go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/gae/service/datastore/meta/namespaces_test.go (about) 1 // Copyright 2015 The LUCI Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package meta 16 17 import ( 18 "context" 19 "testing" 20 21 "go.chromium.org/luci/gae/impl/memory" 22 ds "go.chromium.org/luci/gae/service/datastore" 23 "go.chromium.org/luci/gae/service/info" 24 25 . "github.com/smartystreets/goconvey/convey" 26 ) 27 28 func TestNamespaces(t *testing.T) { 29 t.Parallel() 30 31 Convey(`A testing datastore`, t, func() { 32 ctx := memory.Use(context.Background()) 33 34 // Call to add a datastore entry under the supplied namespace. 35 addNamespace := func(ns string) { 36 if ns != "" { 37 ctx = info.MustNamespace(ctx, ns) 38 } 39 40 err := ds.Raw(ctx).PutMulti( 41 []*ds.Key{ 42 ds.NewKey(ctx, "Warblegarble", "", 1, nil), 43 }, 44 []ds.PropertyMap{ 45 make(ds.PropertyMap), 46 }, 47 func(int, *ds.Key, error) {}) 48 if err != nil { 49 panic(err) 50 } 51 52 ds.GetTestable(ctx).CatchupIndexes() 53 } 54 55 Convey(`A datastore with no namespaces returns {}.`, func() { 56 var coll NamespacesCollector 57 So(Namespaces(ctx, coll.Callback), ShouldBeNil) 58 So(coll, ShouldResemble, NamespacesCollector(nil)) 59 }) 60 61 Convey(`With namespaces {<default>, foo, bar, baz-a, baz-b}`, func() { 62 addNamespace("") 63 addNamespace("foo") 64 addNamespace("bar") 65 addNamespace("baz-a") 66 addNamespace("baz-b") 67 68 Convey(`Can collect all namespaces.`, func() { 69 var coll NamespacesCollector 70 So(Namespaces(ctx, coll.Callback), ShouldBeNil) 71 So(coll, ShouldResemble, NamespacesCollector{"", "bar", "baz-a", "baz-b", "foo"}) 72 }) 73 74 Convey(`Can get namespaces with prefix "baz-".`, func() { 75 var coll NamespacesCollector 76 So(NamespacesWithPrefix(ctx, "baz-", coll.Callback), ShouldBeNil) 77 So(coll, ShouldResemble, NamespacesCollector{"baz-a", "baz-b"}) 78 }) 79 }) 80 }) 81 }