Index: impl/memory/datastore_test.go |
diff --git a/impl/memory/datastore_test.go b/impl/memory/datastore_test.go |
index 3a171109a2aedbda94e2ca4b1133dfeeee7bab8d..54ded94a0599fd44739ed928f138e8ae90493a7f 100644 |
--- a/impl/memory/datastore_test.go |
+++ b/impl/memory/datastore_test.go |
@@ -530,6 +530,79 @@ func TestDatastoreSingleReadWriter(t *testing.T) { |
So(err, ShouldBeNil) |
So(count, ShouldEqual, 1) // normally this would include __entity_group__ |
}) |
+ |
+ Convey("Datastore namespace interaction", func() { |
+ run := func(rc context.Context, txn bool) (putErr, getErr, queryErr, countErr error) { |
+ var foo Foo |
+ |
+ putFunc := func(doC context.Context) error { |
+ return dsS.Get(doC).Put(&foo) |
+ } |
+ |
+ doFunc := func(doC context.Context) { |
+ ds := dsS.Get(doC) |
+ getErr = ds.Get(&foo) |
+ |
+ q := dsS.NewQuery("Foo").Ancestor(ds.KeyForObj(&foo)) |
+ queryErr = ds.Run(q, func(f *Foo) error { return nil }) |
+ _, countErr = ds.Count(q) |
+ } |
+ |
+ if txn { |
+ putErr = dsS.Get(rc).RunInTransaction(func(ic context.Context) error { |
+ return putFunc(ic) |
+ }, nil) |
+ if putErr != nil { |
+ return |
+ } |
+ |
+ dsS.Get(rc).Testable().CatchupIndexes() |
+ dsS.Get(rc).RunInTransaction(func(ic context.Context) error { |
+ doFunc(ic) |
+ return nil |
+ }, nil) |
+ } else { |
+ putErr = putFunc(rc) |
+ if putErr != nil { |
+ return |
+ } |
+ dsS.Get(rc).Testable().CatchupIndexes() |
+ doFunc(rc) |
+ } |
+ return |
+ } |
+ |
+ for _, txn := range []bool{false, true} { |
+ Convey(fmt.Sprintf("In transaction? %v", txn), func() { |
+ Convey("With no namespace installed, can Put, Get, Query, and Count.", func() { |
+ _, has := infoS.Get(c).GetNamespace() |
+ So(has, ShouldBeFalse) |
+ |
+ putErr, getErr, queryErr, countErr := run(c, txn) |
+ So(putErr, ShouldBeNil) |
+ So(getErr, ShouldBeNil) |
+ So(queryErr, ShouldBeNil) |
+ So(countErr, ShouldBeNil) |
+ }) |
+ |
+ Convey("With an non-empty namespace installed, can Put, Get, Query, and Count.", func() { |
+ putErr, getErr, queryErr, countErr := run(infoS.Get(c).MustNamespace("foo"), txn) |
+ So(putErr, ShouldBeNil) |
+ So(getErr, ShouldBeNil) |
+ So(queryErr, ShouldBeNil) |
+ So(countErr, ShouldBeNil) |
+ }) |
+ |
+ Convey("With an empty namespace installed, can Put and Get, but not Query or Count.", func() { |
+ putErr, getErr, queryErr, countErr := run(infoS.Get(c).MustNamespace(""), txn) |
+ So(putErr, ShouldBeNil) |
+ So(getErr, ShouldBeNil) |
+ So(queryErr, ShouldErrLike, "namespace may not be present and empty") |
+ So(countErr, ShouldErrLike, "namespace may not be present and empty") |
+ }) |
+ }) |
+ } |
+ }) |
}) |
} |
@@ -669,12 +742,17 @@ func TestAddIndexes(t *testing.T) { |
dsS.Get(ctx).Testable().CatchupIndexes() |
for _, ns := range namespaces { |
+ if ns == "" { |
+ // Skip query test for empty namespace, as this is invalid. |
+ continue |
+ } |
+ |
results = nil |
So(dsS.Get(infoS.Get(ctx).MustNamespace(ns)).GetAll(q, &results), ShouldBeNil) |
So(len(results), ShouldEqual, 2) |
} |
- // Add "foos" to a new namesapce, then confirm that it gets indexed. |
+ // Add "foos" to a new namespace, then confirm that it gets indexed. |
So(dsS.Get(infoS.Get(ctx).MustNamespace("qux")).PutMulti(foos), ShouldBeNil) |
dsS.Get(ctx).Testable().CatchupIndexes() |