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

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

Issue 1292913002: Split off serialization and key functions to their own packages. (Closed) Base URL: https://github.com/luci/gae.git@make_queries_better
Patch Set: rebase Created 5 years, 4 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.go ('k') | impl/memory/testing_utils_test.go » ('j') | 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 "bytes"
9 "fmt" 8 "fmt"
10 "testing" 9 "testing"
11 10
12 dsS "github.com/luci/gae/service/datastore" 11 dsS "github.com/luci/gae/service/datastore"
12 "github.com/luci/gae/service/datastore/dskey"
13 "github.com/luci/gae/service/datastore/serialize"
13 infoS "github.com/luci/gae/service/info" 14 infoS "github.com/luci/gae/service/info"
14 . "github.com/smartystreets/goconvey/convey" 15 . "github.com/smartystreets/goconvey/convey"
15 "golang.org/x/net/context" 16 "golang.org/x/net/context"
16 ) 17 )
17 18
18 func TestDatastoreKinder(t *testing.T) { 19 func TestDatastoreKinder(t *testing.T) {
19 t.Parallel() 20 t.Parallel()
20 21
21 Convey("Datastore keys", t, func() { 22 Convey("Datastore keys", t, func() {
22 c := Use(context.Background()) 23 c := Use(context.Background())
23 ds := dsS.Get(c) 24 ds := dsS.Get(c)
24 So(ds, ShouldNotBeNil) 25 So(ds, ShouldNotBeNil)
25 26
26 Convey("implements DSNewKeyer", func() { 27 Convey("implements DSNewKeyer", func() {
27 Convey("NewKey", func() { 28 Convey("NewKey", func() {
28 key := ds.NewKey("nerd", "stringID", 0, nil) 29 key := ds.NewKey("nerd", "stringID", 0, nil)
29 So(key, ShouldNotBeNil) 30 So(key, ShouldNotBeNil)
30 So(key.Kind(), ShouldEqual, "nerd") 31 So(key.Kind(), ShouldEqual, "nerd")
31 So(key.StringID(), ShouldEqual, "stringID") 32 So(key.StringID(), ShouldEqual, "stringID")
32 So(key.IntID(), ShouldEqual, 0) 33 So(key.IntID(), ShouldEqual, 0)
33 So(key.Parent(), ShouldBeNil) 34 So(key.Parent(), ShouldBeNil)
34 So(key.AppID(), ShouldEqual, "dev~app") 35 So(key.AppID(), ShouldEqual, "dev~app")
35 So(key.Namespace(), ShouldEqual, "") 36 So(key.Namespace(), ShouldEqual, "")
36 So(key.String(), ShouldEqual, "/nerd,stringID") 37 So(key.String(), ShouldEqual, "/nerd,stringID")
37 » » » » So(dsS.KeyIncomplete(key), ShouldBeFalse) 38 » » » » So(key.Incomplete(), ShouldBeFalse)
38 » » » » So(dsS.KeyValid(key, false, "dev~app", ""), Shou ldBeTrue) 39 » » » » So(key.Valid(false, "dev~app", ""), ShouldBeTrue )
39 }) 40 })
40 }) 41 })
41 42
42 }) 43 })
43 } 44 }
44 45
45 type MetaGroup struct { 46 type MetaGroup struct {
46 _id int64 `gae:"$id,1"` 47 _id int64 `gae:"$id,1"`
47 _kind string `gae:"$kind,__entity_group__"` 48 _kind string `gae:"$kind,__entity_group__"`
48 Parent dsS.Key `gae:"$parent"` 49 Parent dsS.Key `gae:"$parent"`
49 50
50 Version int64 `gae:"__version__"` 51 Version int64 `gae:"__version__"`
51 } 52 }
52 53
53 func testGetMeta(c context.Context, k dsS.Key) int64 { 54 func testGetMeta(c context.Context, k dsS.Key) int64 {
54 ds := dsS.Get(c) 55 ds := dsS.Get(c)
55 » mg := &MetaGroup{Parent: dsS.KeyRoot(k)} 56 » mg := &MetaGroup{Parent: dskey.Root(k)}
56 if err := ds.Get(mg); err != nil { 57 if err := ds.Get(mg); err != nil {
57 panic(err) 58 panic(err)
58 } 59 }
59 return mg.Version 60 return mg.Version
60 } 61 }
61 62
62 var pls = dsS.GetPLS 63 var pls = dsS.GetPLS
63 64
64 type Foo struct { 65 type Foo struct {
65 Id int64 `gae:"$id"` 66 Id int64 `gae:"$id"`
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 }) 419 })
419 }) 420 })
420 }) 421 })
421 422
422 }) 423 })
423 } 424 }
424 425
425 func TestCompoundIndexes(t *testing.T) { 426 func TestCompoundIndexes(t *testing.T) {
426 t.Parallel() 427 t.Parallel()
427 428
428 » idxKey := func(def *dsS.IndexDefinition) string { 429 » idxKey := func(def dsS.IndexDefinition) string {
429 » » buf := &bytes.Buffer{} 430 » » So(def, ShouldNotBeNil)
430 » » buf.WriteString("idx::") 431 » » return "idx::" + string(serialize.ToBytes(def))
431 » » So(def.Write(buf), ShouldBeNil)
432 » » return buf.String()
433 } 432 }
434 433
435 numItms := func(c *memCollection) uint64 { 434 numItms := func(c *memCollection) uint64 {
436 ret, _ := c.GetTotals() 435 ret, _ := c.GetTotals()
437 return ret 436 return ret
438 } 437 }
439 438
440 Convey("Test Compound indexes", t, func() { 439 Convey("Test Compound indexes", t, func() {
441 type Model struct { 440 type Model struct {
442 ID int64 `gae:"$id"` 441 ID int64 `gae:"$id"`
443 442
444 Field1 []string 443 Field1 []string
445 Field2 []int64 444 Field2 []int64
446 } 445 }
447 446
448 c := Use(context.Background()) 447 c := Use(context.Background())
449 ds := dsS.Get(c) 448 ds := dsS.Get(c)
450 t := ds.Raw().Testable().(*dsImpl) 449 t := ds.Raw().Testable().(*dsImpl)
451 store := t.data.store 450 store := t.data.store
452 451
453 So(ds.Put(&Model{1, []string{"hello", "world"}, []int64{10, 11}} ), ShouldBeNil) 452 So(ds.Put(&Model{1, []string{"hello", "world"}, []int64{10, 11}} ), ShouldBeNil)
454 453
455 » » idx := &dsS.IndexDefinition{ 454 » » idx := dsS.IndexDefinition{
456 Kind: "Model", 455 Kind: "Model",
457 SortBy: []dsS.IndexColumn{ 456 SortBy: []dsS.IndexColumn{
458 {Property: "Field2"}, 457 {Property: "Field2"},
459 }, 458 },
460 } 459 }
461 460
462 coll := store.GetCollection(idxKey(idx)) 461 coll := store.GetCollection(idxKey(idx))
463 So(coll, ShouldNotBeNil) 462 So(coll, ShouldNotBeNil)
464 So(numItms(coll), ShouldEqual, 2) 463 So(numItms(coll), ShouldEqual, 2)
465 464
466 idx.SortBy[0].Property = "Field1" 465 idx.SortBy[0].Property = "Field1"
467 coll = store.GetCollection(idxKey(idx)) 466 coll = store.GetCollection(idxKey(idx))
468 So(coll, ShouldNotBeNil) 467 So(coll, ShouldNotBeNil)
469 So(numItms(coll), ShouldEqual, 2) 468 So(numItms(coll), ShouldEqual, 2)
470 469
471 idx.SortBy = append(idx.SortBy, dsS.IndexColumn{Property: "Field 1"}) 470 idx.SortBy = append(idx.SortBy, dsS.IndexColumn{Property: "Field 1"})
472 So(store.GetCollection(idxKey(idx)), ShouldBeNil) 471 So(store.GetCollection(idxKey(idx)), ShouldBeNil)
473 472
474 » » t.AddIndexes(idx) 473 » » t.AddIndexes(&idx)
475 coll = store.GetCollection(idxKey(idx)) 474 coll = store.GetCollection(idxKey(idx))
476 So(coll, ShouldNotBeNil) 475 So(coll, ShouldNotBeNil)
477 So(numItms(coll), ShouldEqual, 4) 476 So(numItms(coll), ShouldEqual, 4)
478 }) 477 })
479 } 478 }
OLDNEW
« no previous file with comments | « impl/memory/datastore_query.go ('k') | impl/memory/testing_utils_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698