config: add some structures for configuration
Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
This commit is contained in:
parent
1d0bd01fe7
commit
49139446ab
2 changed files with 84 additions and 0 deletions
24
config.go
Normal file
24
config.go
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "encoding/xml"
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
XMLName xml.Name `xml:"config"`
|
||||||
|
SyncRefs []SyncRef `xml:"refs>ref"`
|
||||||
|
Groups []Group `xml:"groups>group"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Group struct {
|
||||||
|
XMLName xml.Name `xml:"group"`
|
||||||
|
ID string `xml:"id,attr"`
|
||||||
|
Active bool `xml:"active,attr"`
|
||||||
|
Contains []string `xml:"contains>refID"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type SyncRef struct {
|
||||||
|
XMLName xml.Name `xml:"ref"`
|
||||||
|
ID string `xml:"id,attr"`
|
||||||
|
URI string
|
||||||
|
ReadOnly bool
|
||||||
|
Deletes bool
|
||||||
|
}
|
60
config_test.go
Normal file
60
config_test.go
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/xml"
|
||||||
|
"net/url"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
uuid "github.com/satori/go.uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestConfig(t *testing.T) {
|
||||||
|
|
||||||
|
u, err := url.Parse("file:///tmp/tmp.xJiSJUcyus")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
so1 := SyncRef{
|
||||||
|
ID: uuid.NewV4().String(),
|
||||||
|
URI: u.String(),
|
||||||
|
}
|
||||||
|
so2 := SyncRef{
|
||||||
|
ID: uuid.NewV4().String(),
|
||||||
|
URI: "file:///tmp/tmp.bhSM7oRner",
|
||||||
|
}
|
||||||
|
config := Config{
|
||||||
|
SyncRefs: []SyncRef{
|
||||||
|
so1,
|
||||||
|
so2,
|
||||||
|
},
|
||||||
|
Groups: []Group{
|
||||||
|
Group{
|
||||||
|
ID: uuid.NewV4().String(),
|
||||||
|
Contains: []string{so1.ID, so2.ID},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
buf, err := xml.MarshalIndent(config, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
newConfig := Config{}
|
||||||
|
if err := xml.Unmarshal(buf, &newConfig); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, group := range newConfig.Groups {
|
||||||
|
for _, contain := range group.Contains {
|
||||||
|
found := false
|
||||||
|
for _, ref := range newConfig.SyncRefs {
|
||||||
|
if ref.ID == contain {
|
||||||
|
found = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
t.Errorf("expected all group ref IDs to exist, but %q did not", contain)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue