| OLD | NEW |
| 1 // Copyright 2015 The LUCI Authors. All rights reserved. | 1 // Copyright 2015 The LUCI Authors. All rights reserved. |
| 2 // Use of this source code is governed under the Apache License, Version 2.0 | 2 // Use of this source code is governed under the Apache License, Version 2.0 |
| 3 // that can be found in the LICENSE file. | 3 // that can be found in the LICENSE file. |
| 4 | 4 |
| 5 package memory | 5 package memory |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "errors" | 8 "errors" |
| 9 "fmt" | 9 "fmt" |
| 10 "testing" | 10 "testing" |
| (...skipping 647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 } | 658 } |
| 659 | 659 |
| 660 func TestCompoundIndexes(t *testing.T) { | 660 func TestCompoundIndexes(t *testing.T) { |
| 661 t.Parallel() | 661 t.Parallel() |
| 662 | 662 |
| 663 idxKey := func(def ds.IndexDefinition) string { | 663 idxKey := func(def ds.IndexDefinition) string { |
| 664 So(def, ShouldNotBeNil) | 664 So(def, ShouldNotBeNil) |
| 665 return "idx::" + string(serialize.ToBytes(*def.PrepForIdxTable()
)) | 665 return "idx::" + string(serialize.ToBytes(*def.PrepForIdxTable()
)) |
| 666 } | 666 } |
| 667 | 667 |
| 668 numItms := func(c memCollection) uint64 { | |
| 669 ret, _ := c.GetTotals() | |
| 670 return ret | |
| 671 } | |
| 672 | |
| 673 Convey("Test Compound indexes", t, func() { | 668 Convey("Test Compound indexes", t, func() { |
| 674 type Model struct { | 669 type Model struct { |
| 675 ID int64 `gae:"$id"` | 670 ID int64 `gae:"$id"` |
| 676 | 671 |
| 677 Field1 []string | 672 Field1 []string |
| 678 Field2 []int64 | 673 Field2 []int64 |
| 679 } | 674 } |
| 680 | 675 |
| 681 c := Use(context.Background()) | 676 c := Use(context.Background()) |
| 682 t := ds.GetTestable(c).(*dsImpl) | 677 t := ds.GetTestable(c).(*dsImpl) |
| 683 head := t.data.head | 678 head := t.data.head |
| 684 | 679 |
| 685 So(ds.Put(c, &Model{1, []string{"hello", "world"}, []int64{10, 1
1}}), ShouldBeNil) | 680 So(ds.Put(c, &Model{1, []string{"hello", "world"}, []int64{10, 1
1}}), ShouldBeNil) |
| 686 | 681 |
| 687 idx := ds.IndexDefinition{ | 682 idx := ds.IndexDefinition{ |
| 688 Kind: "Model", | 683 Kind: "Model", |
| 689 SortBy: []ds.IndexColumn{ | 684 SortBy: []ds.IndexColumn{ |
| 690 {Property: "Field2"}, | 685 {Property: "Field2"}, |
| 691 }, | 686 }, |
| 692 } | 687 } |
| 693 | 688 |
| 694 » » coll := head.GetCollection(idxKey(idx)) | 689 » » coll := head.Snapshot().GetCollection(idxKey(idx)) |
| 695 So(coll, ShouldNotBeNil) | 690 So(coll, ShouldNotBeNil) |
| 696 » » So(numItms(coll), ShouldEqual, 2) | 691 » » So(countItems(coll), ShouldEqual, 2) |
| 697 | 692 |
| 698 idx.SortBy[0].Property = "Field1" | 693 idx.SortBy[0].Property = "Field1" |
| 699 » » coll = head.GetCollection(idxKey(idx)) | 694 » » coll = head.Snapshot().GetCollection(idxKey(idx)) |
| 700 So(coll, ShouldNotBeNil) | 695 So(coll, ShouldNotBeNil) |
| 701 » » So(numItms(coll), ShouldEqual, 2) | 696 » » So(countItems(coll), ShouldEqual, 2) |
| 702 | 697 |
| 703 idx.SortBy = append(idx.SortBy, ds.IndexColumn{Property: "Field1
"}) | 698 idx.SortBy = append(idx.SortBy, ds.IndexColumn{Property: "Field1
"}) |
| 704 So(head.GetCollection(idxKey(idx)), ShouldBeNil) | 699 So(head.GetCollection(idxKey(idx)), ShouldBeNil) |
| 705 | 700 |
| 706 t.AddIndexes(&idx) | 701 t.AddIndexes(&idx) |
| 707 » » coll = head.GetCollection(idxKey(idx)) | 702 » » coll = head.Snapshot().GetCollection(idxKey(idx)) |
| 708 So(coll, ShouldNotBeNil) | 703 So(coll, ShouldNotBeNil) |
| 709 » » So(numItms(coll), ShouldEqual, 4) | 704 » » So(countItems(coll), ShouldEqual, 4) |
| 710 }) | 705 }) |
| 711 } | 706 } |
| 712 | 707 |
| 713 // High level test for regression in how zero time is stored, | 708 // High level test for regression in how zero time is stored, |
| 714 // see https://codereview.chromium.org/1334043003/ | 709 // see https://codereview.chromium.org/1334043003/ |
| 715 func TestDefaultTimeField(t *testing.T) { | 710 func TestDefaultTimeField(t *testing.T) { |
| 716 t.Parallel() | 711 t.Parallel() |
| 717 | 712 |
| 718 Convey("Default time.Time{} can be stored", t, func() { | 713 Convey("Default time.Time{} can be stored", t, func() { |
| 719 type Model struct { | 714 type Model struct { |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 // Add "foos" to a new namespace, then confirm that it g
ets indexed. | 803 // Add "foos" to a new namespace, then confirm that it g
ets indexed. |
| 809 So(ds.Put(infoS.MustNamespace(ctx, "qux"), foos), Should
BeNil) | 804 So(ds.Put(infoS.MustNamespace(ctx, "qux"), foos), Should
BeNil) |
| 810 ds.GetTestable(ctx).CatchupIndexes() | 805 ds.GetTestable(ctx).CatchupIndexes() |
| 811 | 806 |
| 812 results = nil | 807 results = nil |
| 813 So(ds.GetAll(infoS.MustNamespace(ctx, "qux"), q, &result
s), ShouldBeNil) | 808 So(ds.GetAll(infoS.MustNamespace(ctx, "qux"), q, &result
s), ShouldBeNil) |
| 814 So(len(results), ShouldEqual, 2) | 809 So(len(results), ShouldEqual, 2) |
| 815 }) | 810 }) |
| 816 }) | 811 }) |
| 817 } | 812 } |
| OLD | NEW |