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

Side by Side Diff: service/datastore/pls_test.go

Issue 1336443003: Implement projection queries correctly. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: Created 5 years, 3 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
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 // adapted from github.com/golang/appengine/datastore 5 // adapted from github.com/golang/appengine/datastore
6 6
7 package datastore 7 package datastore
8 8
9 import ( 9 import (
10 "bytes" 10 "bytes"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 testKey1a = mkKey("aid", "", "kind", "name1") 64 testKey1a = mkKey("aid", "", "kind", "name1")
65 testKey1b = mkKey("aid", "", "kind", "name1") 65 testKey1b = mkKey("aid", "", "kind", "name1")
66 testKey2a = mkKey("aid", "", "kind", "name0", "kind", "name2") 66 testKey2a = mkKey("aid", "", "kind", "name0", "kind", "name2")
67 testKey2b = mkKey("aid", "", "kind", "name0", "kind", "name2") 67 testKey2b = mkKey("aid", "", "kind", "name0", "kind", "name2")
68 testGeoPt0 = GeoPoint{Lat: 1.2, Lng: 3.4} 68 testGeoPt0 = GeoPoint{Lat: 1.2, Lng: 3.4}
69 testGeoPt1 = GeoPoint{Lat: 5, Lng: 10} 69 testGeoPt1 = GeoPoint{Lat: 5, Lng: 10}
70 testBadGeoPt = GeoPoint{Lat: 1000, Lng: 34} 70 testBadGeoPt = GeoPoint{Lat: 1000, Lng: 34}
71 ) 71 )
72 72
73 type B0 struct { 73 type B0 struct {
74 » B []byte 74 » B []byte `gae:",noindex"`
iannucci 2015/09/10 03:56:58 []byte is indexed by default now.
75 } 75 }
76 76
77 type B1 struct { 77 type B1 struct {
78 B []int8 78 B []int8
79 } 79 }
80 80
81 type B2 struct { 81 type B2 struct {
82 B myBlob 82 B myBlob
83 } 83 }
84 84
85 type B3 struct { 85 type B3 struct {
86 B []myByte 86 B []myByte
87 } 87 }
88 88
89 type B4 struct { 89 type B4 struct {
90 » B [][]byte 90 » B [][]byte `gae:",noindex"`
91 } 91 }
92 92
93 type B5 struct { 93 type B5 struct {
94 » B ByteString 94 » B []byte
iannucci 2015/09/10 03:56:58 and ByteString is gone.
95 } 95 }
96 96
97 type C0 struct { 97 type C0 struct {
98 I int 98 I int
99 C chan int 99 C chan int
100 } 100 }
101 101
102 type C1 struct { 102 type C1 struct {
103 I int 103 I int
104 C *chan int 104 C *chan int
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 I int 313 I int
314 R []MutuallyRecursive1 314 R []MutuallyRecursive1
315 } 315 }
316 316
317 type MutuallyRecursive1 struct { 317 type MutuallyRecursive1 struct {
318 I int 318 I int
319 R []MutuallyRecursive0 319 R []MutuallyRecursive0
320 } 320 }
321 321
322 type ExoticTypes struct { 322 type ExoticTypes struct {
323 » BS blobstore.Key 323 » BS blobstore.Key
324 » DSBS ByteString
325 } 324 }
326 325
327 type Underspecified struct { 326 type Underspecified struct {
328 Iface PropertyConverter 327 Iface PropertyConverter
329 } 328 }
330 329
331 type MismatchTypes struct { 330 type MismatchTypes struct {
332 S string 331 S string
333 B bool 332 B bool
334 F float32 333 F float32
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 641
643 type DerivedKey struct { 642 type DerivedKey struct {
644 K *genericKey 643 K *genericKey
645 } 644 }
646 645
647 type IfaceKey struct { 646 type IfaceKey struct {
648 K Key 647 K Key
649 } 648 }
650 649
651 type testCase struct { 650 type testCase struct {
652 » desc string 651 » desc string
653 » src interface{} 652 » src interface{}
654 » want interface{} 653 » want interface{}
655 » plsErr string 654 » plsErr string
656 » saveErr string 655 » saveErr string
657 » actualNoIndex bool 656 » plsLoadErr string
658 » plsLoadErr string 657 » loadErr string
659 » loadErr string
660 } 658 }
661 659
662 var testCases = []testCase{ 660 var testCases = []testCase{
663 { 661 {
664 desc: "chan save fails", 662 desc: "chan save fails",
665 src: &C0{I: -1}, 663 src: &C0{I: -1},
666 plsErr: `field "C" has invalid type: chan int`, 664 plsErr: `field "C" has invalid type: chan int`,
667 }, 665 },
668 { 666 {
669 desc: "*chan save fails", 667 desc: "*chan save fails",
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 makeUint8Slice(4), 985 makeUint8Slice(4),
988 makeUint8Slice(5), 986 makeUint8Slice(5),
989 }}, 987 }},
990 want: &B4{B: [][]byte{ 988 want: &B4{B: [][]byte{
991 makeUint8Slice(3), 989 makeUint8Slice(3),
992 makeUint8Slice(4), 990 makeUint8Slice(4),
993 makeUint8Slice(5), 991 makeUint8Slice(5),
994 }}, 992 }},
995 }, 993 },
996 { 994 {
997 » » desc: "short ByteString", 995 » » desc: "short []byte",
998 » » src: &B5{B: ByteString(makeUint8Slice(3))}, 996 » » src: &B5{B: makeUint8Slice(3)},
999 » » want: &B5{B: ByteString(makeUint8Slice(3))}, 997 » » want: &B5{B: makeUint8Slice(3)},
1000 }, 998 },
1001 { 999 {
1002 desc: "short ByteString as props", 1000 desc: "short ByteString as props",
1003 » » src: &B5{B: ByteString(makeUint8Slice(3))}, 1001 » » src: &B5{B: makeUint8Slice(3)},
1004 want: PropertyMap{ 1002 want: PropertyMap{
1005 » » » "B": {mp(ByteString(makeUint8Slice(3)))}, 1003 » » » "B": {mp(makeUint8Slice(3))},
1006 }, 1004 },
1007 }, 1005 },
1008 { 1006 {
1009 desc: "[]byte must be noindex",
1010 src: PropertyMap{
1011 "B": {mp(makeUint8Slice(3))},
1012 },
1013 actualNoIndex: true,
1014 },
1015 {
1016 desc: "save tagged load props", 1007 desc: "save tagged load props",
1017 src: &Tagged{A: 1, B: []int{21, 22, 23}, C: 3, D: 4, E: 5, I: 6 , J: 7}, 1008 src: &Tagged{A: 1, B: []int{21, 22, 23}, C: 3, D: 4, E: 5, I: 6 , J: 7},
1018 want: PropertyMap{ 1009 want: PropertyMap{
1019 // A and B are renamed to a and b; A and C are noindex, I is ignored. 1010 // A and B are renamed to a and b; A and C are noindex, I is ignored.
1020 // Indexed properties are loaded before raw properties. Thus, the 1011 // Indexed properties are loaded before raw properties. Thus, the
1021 // result is: b, b, b, D, E, a, c. 1012 // result is: b, b, b, D, E, a, c.
1022 "b1": { 1013 "b1": {
1023 mp(21), 1014 mp(21),
1024 mp(22), 1015 mp(22),
1025 mp(23), 1016 mp(23),
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1267 }, 1258 },
1268 want: &N0{ 1259 want: &N0{
1269 X0: X0{S: "one", I: 2}, 1260 X0: X0{S: "one", I: 2},
1270 Nonymous: X0{S: "four", I: 5}, 1261 Nonymous: X0{S: "four", I: 5},
1271 Other: "other", 1262 Other: "other",
1272 }, 1263 },
1273 }, 1264 },
1274 { 1265 {
1275 desc: "exotic types", 1266 desc: "exotic types",
1276 src: &ExoticTypes{ 1267 src: &ExoticTypes{
1277 » » » BS: "sup", 1268 » » » BS: "sup",
1278 » » » DSBS: ByteString("nerds"),
dnj (Google) 2015/09/10 16:26:11 aaaaaaaaa
iannucci 2015/09/10 17:29:21 ?
dnj 2015/09/10 17:32:21 Just offering alternative stip@-style naming schem
1279 }, 1269 },
1280 want: &ExoticTypes{ 1270 want: &ExoticTypes{
1281 » » » BS: "sup", 1271 » » » BS: "sup",
1282 » » » DSBS: ByteString("nerds"),
1283 }, 1272 },
1284 }, 1273 },
1285 { 1274 {
1286 desc: "underspecified types", 1275 desc: "underspecified types",
1287 src: &Underspecified{}, 1276 src: &Underspecified{},
1288 plsErr: "non-concrete interface", 1277 plsErr: "non-concrete interface",
1289 }, 1278 },
1290 { 1279 {
1291 desc: "mismatch (string)", 1280 desc: "mismatch (string)",
1292 src: PropertyMap{ 1281 src: PropertyMap{
1293 "K": {mp(199)}, 1282 "K": {mp(199)},
1294 "S": {mp([]byte("cats"))}, 1283 "S": {mp([]byte("cats"))},
1295 » » » "F": {mp(ByteString("nurbs"))}, 1284 » » » "F": {mp("nurbs")},
1296 }, 1285 },
1297 want: &MismatchTypes{}, 1286 want: &MismatchTypes{},
1298 loadErr: "type mismatch", 1287 loadErr: "type mismatch",
1299 }, 1288 },
1300 { 1289 {
1301 desc: "mismatch (float)", 1290 desc: "mismatch (float)",
1302 src: PropertyMap{"F": {mp(blobstore.Key("wot"))}}, 1291 src: PropertyMap{"F": {mp(blobstore.Key("wot"))}},
1303 want: &MismatchTypes{}, 1292 want: &MismatchTypes{},
1304 loadErr: "type mismatch", 1293 loadErr: "type mismatch",
1305 }, 1294 },
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
1600 return 1589 return
1601 } 1590 }
1602 So(pls, ShouldNotBeNil) 1591 So(pls, ShouldNotBeNil)
1603 1592
1604 savedProps, err := pls.Save(false) 1593 savedProps, err := pls.Save(false)
1605 if checkErr(err, tc.saveErr) { 1594 if checkErr(err, tc.saveErr) {
1606 return 1595 return
1607 } 1596 }
1608 So(savedProps, ShouldNotBeNil) 1597 So(savedProps, ShouldNotBeNil)
1609 1598
1610 if tc.actualNoIndex {
1611 for _, props := range savedProps {
1612 So(props[0].IndexSetting(), Shou ldEqual, NoIndex)
1613 return
1614 }
1615 So(true, ShouldBeFalse) // shouldn't get here
1616 }
1617
1618 var got interface{} 1599 var got interface{}
1619 if _, ok := tc.want.(PropertyMap); ok { 1600 if _, ok := tc.want.(PropertyMap); ok {
1620 pls = PropertyMap{} 1601 pls = PropertyMap{}
1621 got = pls 1602 got = pls
1622 } else { 1603 } else {
1623 got = reflect.New(reflect.TypeOf(tc.want ).Elem()).Interface() 1604 got = reflect.New(reflect.TypeOf(tc.want ).Elem()).Interface()
1624 if pls, ok = got.(PropertyLoadSaver); !o k { 1605 if pls, ok = got.(PropertyLoadSaver); !o k {
1625 pls = GetPLS(got) 1606 pls = GetPLS(got)
1626 } 1607 }
1627 } 1608 }
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1842 1823
1843 Convey("Bad default meta type", func() { 1824 Convey("Bad default meta type", func() {
1844 type BadDefault struct { 1825 type BadDefault struct {
1845 Val time.Time `gae:"$meta,tomorrow"` 1826 Val time.Time `gae:"$meta,tomorrow"`
1846 } 1827 }
1847 pls := GetPLS(&BadDefault{}) 1828 pls := GetPLS(&BadDefault{})
1848 So(pls.Problem().Error(), ShouldContainSubstring, "bad t ype") 1829 So(pls.Problem().Error(), ShouldContainSubstring, "bad t ype")
1849 }) 1830 })
1850 }) 1831 })
1851 } 1832 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698