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 "sort" | 8 "sort" |
9 "testing" | 9 "testing" |
10 "time" | 10 "time" |
11 | 11 |
12 ds "github.com/luci/gae/service/datastore" | 12 ds "github.com/luci/gae/service/datastore" |
13 "github.com/luci/gae/service/datastore/serialize" | 13 "github.com/luci/gae/service/datastore/serialize" |
14 » "github.com/luci/gkvlite" | 14 |
15 . "github.com/smartystreets/goconvey/convey" | 15 . "github.com/smartystreets/goconvey/convey" |
16 ) | 16 ) |
17 | 17 |
18 var fakeKey = key("parentKind", "sid", "knd", 10) | 18 var fakeKey = key("parentKind", "sid", "knd", 10) |
19 | 19 |
20 var rgenComplexTime = time.Date( | 20 var rgenComplexTime = time.Date( |
21 1986, time.October, 26, 1, 20, 00, 00, time.UTC) | 21 1986, time.October, 26, 1, 20, 00, 00, time.UTC) |
22 var rgenComplexKey = key("kind", "id") | 22 var rgenComplexKey = key("kind", "id") |
23 | 23 |
24 var _, rgenComplexTimeInt = prop(rgenComplexTime).IndexTypeAndValue() | 24 var _, rgenComplexTimeInt = prop(rgenComplexTime).IndexTypeAndValue() |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 Convey("nil collated", func() { | 198 Convey("nil collated", func() { |
199 Convey("defaultIndexes (nil)", func() { | 199 Convey("defaultIndexes (nil)", func() { |
200 idxs := defaultIndexes("knd", ds.PropertyMap(nil
)) | 200 idxs := defaultIndexes("knd", ds.PropertyMap(nil
)) |
201 So(len(idxs), ShouldEqual, 1) | 201 So(len(idxs), ShouldEqual, 1) |
202 So(idxs[0].String(), ShouldEqual, "B:knd") | 202 So(idxs[0].String(), ShouldEqual, "B:knd") |
203 }) | 203 }) |
204 | 204 |
205 Convey("indexEntries", func() { | 205 Convey("indexEntries", func() { |
206 sip := serialize.PropertyMapPartially(fakeKey, n
il) | 206 sip := serialize.PropertyMapPartially(fakeKey, n
il) |
207 s := indexEntries(fakeKey, sip, defaultIndexes("
knd", ds.PropertyMap(nil))) | 207 s := indexEntries(fakeKey, sip, defaultIndexes("
knd", ds.PropertyMap(nil))) |
208 » » » » numItems, _ := s.GetCollection("idx").GetTotals(
) | 208 » » » » So(countItems(s.Snapshot().GetCollection("idx"))
, ShouldEqual, 1) |
209 » » » » So(numItems, ShouldEqual, 1) | 209 » » » » itm := s.GetCollection("idx").MinItem() |
210 » » » » itm := s.GetCollection("idx").MinItem(false) | 210 » » » » So(itm.key, ShouldResemble, cat(indx("knd").Prep
ForIdxTable())) |
211 » » » » So(itm.Key, ShouldResemble, cat(indx("knd").Prep
ForIdxTable())) | 211 » » » » So(countItems(s.Snapshot().GetCollection("idx:ns
:"+string(itm.key))), ShouldEqual, 1) |
212 » » » » numItems, _ = s.GetCollection("idx:ns:" + string
(itm.Key)).GetTotals() | |
213 » » » » So(numItems, ShouldEqual, 1) | |
214 }) | 212 }) |
215 | 213 |
216 Convey("defaultIndexes", func() { | 214 Convey("defaultIndexes", func() { |
217 pm := ds.PropertyMap{ | 215 pm := ds.PropertyMap{ |
218 "wat": ds.PropertySlice{propNI("thing")
, prop("hat"), prop(100)}, | 216 "wat": ds.PropertySlice{propNI("thing")
, prop("hat"), prop(100)}, |
219 "nerd": prop(103.7), | 217 "nerd": prop(103.7), |
220 "spaz": propNI(false), | 218 "spaz": propNI(false), |
221 } | 219 } |
222 idxs := defaultIndexes("knd", pm) | 220 idxs := defaultIndexes("knd", pm) |
223 So(len(idxs), ShouldEqual, 5) | 221 So(len(idxs), ShouldEqual, 5) |
(...skipping 22 matching lines...) Expand all Loading... |
246 store := (memStore)(nil) | 244 store := (memStore)(nil) |
247 if tc.withBuiltin { | 245 if tc.withBuiltin { |
248 store = indexEntriesWithBuiltins(fakeKey
, tc.pmap, tc.idxs) | 246 store = indexEntriesWithBuiltins(fakeKey
, tc.pmap, tc.idxs) |
249 } else { | 247 } else { |
250 sip := serialize.PropertyMapPartially(fa
keKey, tc.pmap) | 248 sip := serialize.PropertyMapPartially(fa
keKey, tc.pmap) |
251 store = indexEntries(fakeKey, sip, tc.id
xs) | 249 store = indexEntries(fakeKey, sip, tc.id
xs) |
252 } | 250 } |
253 for colName, vals := range tc.collections { | 251 for colName, vals := range tc.collections { |
254 i := 0 | 252 i := 0 |
255 coll := store.Snapshot().GetCollection(c
olName) | 253 coll := store.Snapshot().GetCollection(c
olName) |
256 » » » » » numItems, _ := coll.GetTotals() | 254 » » » » » So(countItems(coll), ShouldEqual, len(tc
.collections[colName])) |
257 » » » » » So(numItems, ShouldEqual, len(tc.collect
ions[colName])) | 255 |
258 » » » » » coll.VisitItemsAscend(nil, true, func(it
m *gkvlite.Item) bool { | 256 » » » » » coll.ForEachItem(func(k, _ []byte) bool
{ |
259 » » » » » » So(itm.Key, ShouldResemble, vals
[i]) | 257 » » » » » » So(k, ShouldResemble, vals[i]) |
260 i++ | 258 i++ |
261 return true | 259 return true |
262 }) | 260 }) |
263 So(i, ShouldEqual, len(vals)) | 261 So(i, ShouldEqual, len(vals)) |
264 } | 262 } |
265 }) | 263 }) |
266 } | 264 } |
267 }) | 265 }) |
268 } | 266 } |
269 | 267 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
365 prev := tmpLoader[ks] | 363 prev := tmpLoader[ks] |
366 updateIndexes(store, itm.key, prev, itm.
props) | 364 updateIndexes(store, itm.key, prev, itm.
props) |
367 tmpLoader[ks] = itm.props | 365 tmpLoader[ks] = itm.props |
368 } | 366 } |
369 tmpLoader = nil | 367 tmpLoader = nil |
370 | 368 |
371 for colName, data := range tc.expected { | 369 for colName, data := range tc.expected { |
372 coll := store.Snapshot().GetCollection(c
olName) | 370 coll := store.Snapshot().GetCollection(c
olName) |
373 So(coll, ShouldNotBeNil) | 371 So(coll, ShouldNotBeNil) |
374 i := 0 | 372 i := 0 |
375 » » » » » coll.VisitItemsAscend(nil, false, func(i
tm *gkvlite.Item) bool { | 373 » » » » » coll.ForEachItem(func(k, _ []byte) bool
{ |
376 » » » » » » So(data[i], ShouldResemble, itm.
Key) | 374 » » » » » » So(data[i], ShouldResemble, k) |
377 i++ | 375 i++ |
378 return true | 376 return true |
379 }) | 377 }) |
380 So(i, ShouldEqual, len(data)) | 378 So(i, ShouldEqual, len(data)) |
381 } | 379 } |
382 }) | 380 }) |
383 } | 381 } |
384 }) | 382 }) |
385 } | 383 } |
OLD | NEW |