From 49acdc49eb9c19d43645cd45b3d9773a89c946ce Mon Sep 17 00:00:00 2001 From: Soam Vasani Date: Wed, 2 Nov 2016 00:23:06 -0700 Subject: [PATCH] Fix resource store errors on empty db --- controller/resourceStore.go | 5 +++++ controller/resourceStore_test.go | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/controller/resourceStore.go b/controller/resourceStore.go index 0daf953c..b43e97bd 100644 --- a/controller/resourceStore.go +++ b/controller/resourceStore.go @@ -132,9 +132,14 @@ func (rs *ResourceStore) delete(typename, rkey string) error { return err } +// getAll finds all entries under key. If none or found or key +// doesn't exist, returns an empty slice. func (rs *ResourceStore) getAll(key string) ([]string, error) { resp, err := rs.KeysAPI.Get(context.Background(), key, &client.GetOptions{Recursive: true}) if err != nil { + if client.IsKeyNotFound(err) { + return []string{}, nil + } return nil, err } diff --git a/controller/resourceStore_test.go b/controller/resourceStore_test.go index 0b86ef1b..808cf7fc 100644 --- a/controller/resourceStore_test.go +++ b/controller/resourceStore_test.go @@ -69,9 +69,17 @@ func TestResourceStore(t *testing.T) { // Delete the key first, in case of a panic'd previous test run; ignore errors _ = rs.delete("TestResource", tr.Key()) + ks.Delete(context.Background(), "/TestResource", &client.DeleteOptions{Dir: true}) + + // Verify getAll for empty db + trs, err := rs.getAll("TestResource") + panicIf(err) + if len(trs) != 0 { + log.Fatalf("Expected zero length slice, got %v", trs) + } // Create - err := rs.create(tr) + err = rs.create(tr) panicIf(err) defer ks.Delete(context.Background(), "/TestResource", &client.DeleteOptions{Dir: true}) defer rs.delete("TestResource", tr.Key())