serverconfig: fix serverconfig tests, which got broken with genconfig changes

Change-Id: I163ea61b568c966439d054962a9dfaa722645606
This commit is contained in:
Brad Fitzpatrick 2012-04-13 15:46:01 -07:00
parent e0dacfa164
commit 6a8a5e197e
3 changed files with 94 additions and 31 deletions

View File

@ -17,10 +17,14 @@ limitations under the License.
package serverconfig_test
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"reflect"
"sort"
"strings"
"testing"
@ -28,32 +32,40 @@ import (
"camlistore.org/pkg/serverconfig"
)
func prettyPrint(i interface{}, indent int) {
func sortedKeys(m map[string]interface{}) (keys []string) {
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
return
}
func prettyPrint(w io.Writer, i interface{}, indent int) {
switch ei := i.(type) {
case jsonconfig.Obj:
for k, v := range ei {
fmt.Printf("\n")
fmt.Printf("%s: ", k)
prettyPrint(v, indent)
for _, k := range sortedKeys(map[string]interface{}(ei)) {
fmt.Fprintf(w, "\n")
fmt.Fprintf(w, "%s: ", k)
prettyPrint(w, ei[k], indent+1)
}
fmt.Printf("\n")
fmt.Fprintf(w, "\n")
case map[string]interface{}:
indent++
for k, v := range ei {
fmt.Printf("\n")
for _, k := range sortedKeys(ei) {
fmt.Fprintf(w, "\n")
for i := 0; i < indent; i++ {
fmt.Printf(" ")
fmt.Fprintf(w, " ")
}
fmt.Printf("%s: ", k)
prettyPrint(v, indent)
fmt.Fprintf(w, "%s: ", k)
prettyPrint(w, ei[k], indent+1)
}
fmt.Fprintf(w, "\n")
case []interface{}:
fmt.Printf(" ")
fmt.Fprintf(w, " ")
for _, v := range ei {
prettyPrint(v, indent)
prettyPrint(w, v, indent+1)
}
default:
fmt.Printf("%v, ", i)
fmt.Fprintf(w, "%v, ", i)
}
}
@ -76,8 +88,35 @@ func TestConfigs(t *testing.T) {
}
}
type namedReadSeeker struct {
name string
io.ReadSeeker
}
func (n namedReadSeeker) Name() string { return n.name }
func (n namedReadSeeker) Close() error { return nil }
func configParser() *jsonconfig.ConfigParser {
// Make a custom jsonconfig ConfigParser whose reader rewrites "/path/to/secring" to the absolute
// path of the jsonconfig test-secring.gpg file.
secRing, err := filepath.Abs("../jsonsign/testdata/test-secring.gpg")
if err != nil {
panic(err)
}
return &jsonconfig.ConfigParser{
Open: func(path string) (jsonconfig.File, error) {
slurpBytes, err := ioutil.ReadFile(path)
if err != nil {
return nil, err
}
slurp := strings.Replace(string(slurpBytes), "/path/to/secring", secRing, 1)
return namedReadSeeker{path, strings.NewReader(slurp)}, nil
},
}
}
func testConfig(name string, t *testing.T) {
obj, err := jsonconfig.ReadFile("testdata/default.json")
obj, err := configParser().ReadFile("testdata/default.json")
if err != nil {
t.Fatal(err)
}
@ -85,16 +124,36 @@ func testConfig(name string, t *testing.T) {
if err != nil {
t.Fatal(err)
}
wantConf, err := jsonconfig.ReadFile("testdata/default-want.json")
wantConf, err := configParser().ReadFile("testdata/default-want.json")
if err != nil {
t.Fatal(err)
}
if !reflect.DeepEqual(lowLevelConf.Obj, wantConf) {
fmt.Printf("Configurations differ:\n")
fmt.Printf("Generated:")
prettyPrint(lowLevelConf.Obj, 0)
fmt.Printf("\nWant:")
prettyPrint(wantConf, 0)
t.Fail()
var got, want bytes.Buffer
prettyPrint(&got, lowLevelConf.Obj, 0)
prettyPrint(&want, wantConf, 0)
if got.String() != want.String() {
tempGot := tempFile(got.Bytes())
tempWant := tempFile(want.Bytes())
defer os.Remove(tempGot.Name())
defer os.Remove(tempWant.Name())
diff, err := exec.Command("diff", "-u", tempWant.Name(), tempGot.Name()).Output()
if err != nil {
t.Logf("diff failure: %v", err)
}
t.Errorf("Configurations differ.\nGot:\n%s\nWant:\n%s\nDiff:\n%s",
&got, &want, diff)
}
}
func tempFile(b []byte) *os.File {
f, err := ioutil.TempFile("", "")
if err != nil {
panic(err)
}
_, err = f.Write(b)
if err != nil {
panic(err)
}
f.Close()
return f
}

View File

@ -21,7 +21,11 @@
}
},
"/sync/": {
"/setup/": {
"handler": "setup"
},
"/sync/": {
"handler": "sync",
"handlerArgs": {
"from": "/bs/",
@ -32,9 +36,9 @@
"/sighelper/": {
"handler": "jsonsign",
"handlerArgs": {
"secretRing": "/home/foo/.camli/secring",
"keyId": "86043920",
"publicKeyDest": "/bs/"
"secretRing": "/path/to/secring",
"keyId": "26F5ABDA",
"publicKeyDest": "/bs-and-index/"
}
},

View File

@ -3,8 +3,8 @@
"TLS": false,
"auth": "userpass:camlistore:pass3179",
"blobPath": "/tmp/blobs",
"identity": "86043920",
"identitySecretRing": "/home/foo/.camli/secring",
"identity": "26F5ABDA",
"identitySecretRing": "/path/to/secring",
"mysql": "",
"mongo": "",
"s3": "",