From 456d502b72c66c2674b5c99a15ecf908fe824118 Mon Sep 17 00:00:00 2001 From: stephen mcquay Date: Mon, 15 Feb 2016 01:38:11 -0800 Subject: [PATCH] added some tests for the json storage. --- api_test.go | 16 ++++----- cmd/ysvd/main.go | 5 ++- storage.go | 4 +-- storage_test.go | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 96 insertions(+), 13 deletions(-) create mode 100644 storage_test.go diff --git a/api_test.go b/api_test.go index a66f70a..f7c60fc 100644 --- a/api_test.go +++ b/api_test.go @@ -11,7 +11,7 @@ import ( ) func TestAdd(t *testing.T) { - ms := NewMemStore("") + ms := NewSimpleStore("") s := &Server{ storage: ms, } @@ -78,7 +78,7 @@ func TestAdd(t *testing.T) { } func TestInvalidPath(t *testing.T) { - ms := NewMemStore("") + ms := NewSimpleStore("") s := &Server{ storage: ms, } @@ -98,7 +98,7 @@ func TestInvalidPath(t *testing.T) { } func TestCannotDuplicateExistingPath(t *testing.T) { - ms := NewMemStore("") + ms := NewSimpleStore("") s := &Server{ storage: ms, } @@ -123,7 +123,7 @@ func TestCannotDuplicateExistingPath(t *testing.T) { } func TestCannotAddExistingSubPath(t *testing.T) { - ms := NewMemStore("") + ms := NewSimpleStore("") s := &Server{ storage: ms, } @@ -151,7 +151,7 @@ func TestCannotAddExistingSubPath(t *testing.T) { } func TestMissingRepo(t *testing.T) { - ms := NewMemStore("") + ms := NewSimpleStore("") s := &Server{ storage: ms, } @@ -171,7 +171,7 @@ func TestMissingRepo(t *testing.T) { } func TestBadJson(t *testing.T) { - ms := NewMemStore("") + ms := NewSimpleStore("") s := &Server{ storage: ms, } @@ -191,7 +191,7 @@ func TestBadJson(t *testing.T) { } func TestUnsupportedMethod(t *testing.T) { - ms := NewMemStore("") + ms := NewSimpleStore("") s := &Server{ storage: ms, } @@ -213,7 +213,7 @@ func TestUnsupportedMethod(t *testing.T) { } func TestNewServer(t *testing.T) { - ms := NewMemStore("") + ms := NewSimpleStore("") sm := http.NewServeMux() s := NewServer(sm, ms, "foo") ts := httptest.NewServer(s) diff --git a/cmd/ysvd/main.go b/cmd/ysvd/main.go index 607d5ef..9068d81 100644 --- a/cmd/ysvd/main.go +++ b/cmd/ysvd/main.go @@ -96,10 +96,9 @@ func main() { } log.Printf("serving at: http://%s:%d/", hostname, c.Port) sm := http.NewServeMux() - ms := vain.NewMemStore(c.DB) + ms := vain.NewSimpleStore(c.DB) if err := ms.Load(); err != nil { - log.Printf("unable to load db: %v", err) - os.Exit(1) + log.Printf("unable to load db: %v; creating fresh database", err) } vain.NewServer(sm, ms, c.Host) addr := fmt.Sprintf(":%d", c.Port) diff --git a/storage.go b/storage.go index b7f136a..9ea35fb 100644 --- a/storage.go +++ b/storage.go @@ -35,8 +35,8 @@ type SimpleStore struct { path string } -// NewMemStore returns a ready-to-use SimpleStore storing json at path. -func NewMemStore(path string) *SimpleStore { +// NewSimpleStore returns a ready-to-use SimpleStore storing json at path. +func NewSimpleStore(path string) *SimpleStore { return &SimpleStore{ path: path, p: make(map[string]Package), diff --git a/storage_test.go b/storage_test.go new file mode 100644 index 0000000..aaaf6e8 --- /dev/null +++ b/storage_test.go @@ -0,0 +1,84 @@ +package vain + +import ( + "fmt" + "io/ioutil" + "os" + "path/filepath" + "testing" +) + +func equiv(a, b map[string]Package) (bool, []error) { + equiv := true + errs := []error{} + if got, want := len(a), len(b); got != want { + equiv = false + errs = append(errs, fmt.Errorf("uncorrect number of elements: got %d, want %d", got, want)) + return false, errs + } + + for k := range a { + v, ok := b[k] + if !ok || v != a[k] { + errs = append(errs, fmt.Errorf("missing key: %s", k)) + equiv = false + break + } + } + return equiv, errs +} + +func TestSimpleStorage(t *testing.T) { + root, err := ioutil.TempDir("", "vain-") + if err != nil { + t.Fatalf("problem creating temp dir: %v", err) + } + defer func() { os.RemoveAll(root) }() + db := filepath.Join(root, "vain.json") + ms := NewSimpleStore(db) + orig := map[string]Package{ + "foo": {}, + "bar": {}, + "baz": {}, + } + ms.p = orig + if err := ms.Save(); err != nil { + t.Errorf("should have been able to Save: %v", err) + } + ms.p = map[string]Package{} + if err := ms.Load(); err != nil { + t.Errorf("should have been able to Load: %v", err) + } + if ok, errs := equiv(orig, ms.p); !ok { + for _, err := range errs { + t.Error(err) + } + } +} + +func TestRemove(t *testing.T) { + root, err := ioutil.TempDir("", "vain-") + if err != nil { + t.Fatalf("problem creating temp dir: %v", err) + } + defer func() { os.RemoveAll(root) }() + db := filepath.Join(root, "vain.json") + ms := NewSimpleStore(db) + ms.p = map[string]Package{ + "foo": {}, + "bar": {}, + "baz": {}, + } + if err := ms.Remove("foo"); err != nil { + t.Errorf("unexpected error during remove: %v", err) + } + want := map[string]Package{ + "bar": {}, + "baz": {}, + } + if ok, errs := equiv(ms.p, want); !ok { + for _, err := range errs { + t.Error(err) + } + } +}