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  }