Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(477)

Side by Side Diff: impl/memory/datastore_test.go

Issue 1894403002: datastore: Fix AddIndexes with existing namespaces (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/gae@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « impl/memory/datastore_query_execution.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package memory 5 package memory
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "testing" 9 "testing"
10 "time" 10 "time"
(...skipping 22 matching lines...) Expand all
33 } 33 }
34 return mg.Version 34 return mg.Version
35 } 35 }
36 36
37 var pls = dsS.GetPLS 37 var pls = dsS.GetPLS
38 38
39 type Foo struct { 39 type Foo struct {
40 ID int64 `gae:"$id"` 40 ID int64 `gae:"$id"`
41 Parent *dsS.Key `gae:"$parent"` 41 Parent *dsS.Key `gae:"$parent"`
42 42
43 » Val int 43 » Val int
44 » Name string
44 } 45 }
45 46
46 func TestDatastoreSingleReadWriter(t *testing.T) { 47 func TestDatastoreSingleReadWriter(t *testing.T) {
47 t.Parallel() 48 t.Parallel()
48 49
49 Convey("Datastore single reads and writes", t, func() { 50 Convey("Datastore single reads and writes", t, func() {
50 c := Use(context.Background()) 51 c := Use(context.Background())
51 ds := dsS.Get(c) 52 ds := dsS.Get(c)
52 So(ds, ShouldNotBeNil) 53 So(ds, ShouldNotBeNil)
53 54
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 vals := make([]dsS.PropertyMap, len(keys )) 146 vals := make([]dsS.PropertyMap, len(keys ))
146 for i := range vals { 147 for i := range vals {
147 vals[i] = dsS.PropertyMap{} 148 vals[i] = dsS.PropertyMap{}
148 So(vals[i].SetMeta("key", keys[i ]), ShouldBeTrue) 149 So(vals[i].SetMeta("key", keys[i ]), ShouldBeTrue)
149 } 150 }
150 So(ds.GetMulti(vals), ShouldBeNil) 151 So(ds.GetMulti(vals), ShouldBeNil)
151 152
152 for i, val := range vals { 153 for i, val := range vals {
153 So(val, ShouldResemble, dsS.Prop ertyMap{ 154 So(val, ShouldResemble, dsS.Prop ertyMap{
154 "Val": {dsS.MkProperty( 10)}, 155 "Val": {dsS.MkProperty( 10)},
156 "Name": {dsS.MkProperty( "")},
155 "$key": {dsS.MkPropertyN I(keys[i])}, 157 "$key": {dsS.MkPropertyN I(keys[i])},
156 }) 158 })
157 } 159 }
158 }) 160 })
159 161
160 }) 162 })
161 163
162 Convey("allocating ids prevents their use", func() { 164 Convey("allocating ids prevents their use", func() {
163 start, err := ds.AllocateIDs(ds.MakeKey("Foo", 0 ), 100) 165 start, err := ds.AllocateIDs(ds.MakeKey("Foo", 0 ), 100)
164 So(err, ShouldBeNil) 166 So(err, ShouldBeNil)
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
624 So(ds.Put(&Model{ID: 1, Value: []int64{20, 30}}), ShouldBeNil) 626 So(ds.Put(&Model{ID: 1, Value: []int64{20, 30}}), ShouldBeNil)
625 627
626 vals := []dsS.PropertyMap{} 628 vals := []dsS.PropertyMap{}
627 So(ds.GetAll(dsS.NewQuery("Model").Project("Value"), &vals), Sho uldBeNil) 629 So(ds.GetAll(dsS.NewQuery("Model").Project("Value"), &vals), Sho uldBeNil)
628 So(len(vals), ShouldEqual, 2) 630 So(len(vals), ShouldEqual, 2)
629 631
630 So(vals[0]["Value"][0].Value(), ShouldEqual, 20) 632 So(vals[0]["Value"][0].Value(), ShouldEqual, 20)
631 So(vals[1]["Value"][0].Value(), ShouldEqual, 30) 633 So(vals[1]["Value"][0].Value(), ShouldEqual, 30)
632 }) 634 })
633 } 635 }
636
637 func TestAddIndexes(t *testing.T) {
638 t.Parallel()
639
640 Convey("Test Testable.AddIndexes", t, func() {
641 ctx := UseWithAppID(context.Background(), "aid")
642 namespaces := []string{"", "good", "news", "everyone"}
643
644 Convey("After adding datastore entries, can query against indexe s in various namespaces", func() {
645 foos := []*Foo{
646 {ID: 1, Val: 1, Name: "foo"},
647 {ID: 2, Val: 2, Name: "bar"},
648 {ID: 3, Val: 2, Name: "baz"},
649 }
650 for _, ns := range namespaces {
651 So(dsS.Get(infoS.Get(ctx).MustNamespace(ns)).Put Multi(foos), ShouldBeNil)
652 }
653
654 // Initial query, no indexes, will fail.
655 dsS.Get(ctx).Testable().CatchupIndexes()
656
657 var results []*Foo
658 q := dsS.NewQuery("Foo").Eq("Val", 2).Gte("Name", "bar")
659 So(dsS.Get(ctx).GetAll(q, &results), ShouldErrLike, "Ins ufficient indexes")
660
661 // Add index for default namespace.
662 dsS.Get(ctx).Testable().AddIndexes(&dsS.IndexDefinition{
663 Kind: "Foo",
664 SortBy: []dsS.IndexColumn{
665 {Property: "Val"},
666 {Property: "Name"},
667 },
668 })
669 dsS.Get(ctx).Testable().CatchupIndexes()
670
671 for _, ns := range namespaces {
672 results = nil
673 So(dsS.Get(infoS.Get(ctx).MustNamespace(ns)).Get All(q, &results), ShouldBeNil)
674 So(len(results), ShouldEqual, 2)
675 }
676
677 // Add "foos" to a new namesapce, then confirm that it g ets indexed.
678 So(dsS.Get(infoS.Get(ctx).MustNamespace("qux")).PutMulti (foos), ShouldBeNil)
679 dsS.Get(ctx).Testable().CatchupIndexes()
680
681 results = nil
682 So(dsS.Get(infoS.Get(ctx).MustNamespace("qux")).GetAll(q , &results), ShouldBeNil)
683 So(len(results), ShouldEqual, 2)
684 })
685 })
686 }
OLDNEW
« no previous file with comments | « impl/memory/datastore_query_execution.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698