OLD | NEW |
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 helper | 5 package rawdatastore |
6 | 6 |
7 import ( | 7 import ( |
8 "bytes" | 8 "bytes" |
9 "io" | 9 "io" |
10 "testing" | 10 "testing" |
11 "time" | 11 "time" |
12 | 12 |
13 » "github.com/luci/gae" | 13 » "github.com/luci/gae/service/blobstore" |
14 "github.com/luci/luci-go/common/cmpbin" | 14 "github.com/luci/luci-go/common/cmpbin" |
15 . "github.com/smartystreets/goconvey/convey" | 15 . "github.com/smartystreets/goconvey/convey" |
16 ) | 16 ) |
17 | 17 |
18 func init() { | 18 func init() { |
19 » WriteDSPropertyMapDeterministic = true | 19 » WritePropertyMapDeterministic = true |
20 } | 20 } |
21 | 21 |
22 type dspmapTC struct { | 22 type dspmapTC struct { |
23 name string | 23 name string |
24 » props gae.DSPropertyMap | 24 » props PropertyMap |
25 } | 25 } |
26 | 26 |
27 func TestDSPropertyMapSerialization(t *testing.T) { | 27 func TestPropertyMapSerialization(t *testing.T) { |
28 t.Parallel() | 28 t.Parallel() |
29 | 29 |
30 tests := []dspmapTC{ | 30 tests := []dspmapTC{ |
31 { | 31 { |
32 "basic", | 32 "basic", |
33 » » » gae.DSPropertyMap{ | 33 » » » PropertyMap{ |
34 "R": {mp(false), mp(2.1), mpNI(3)}, | 34 "R": {mp(false), mp(2.1), mpNI(3)}, |
35 "S": {mp("hello"), mp("world")}, | 35 "S": {mp("hello"), mp("world")}, |
36 }, | 36 }, |
37 }, | 37 }, |
38 { | 38 { |
39 "keys", | 39 "keys", |
40 » » » gae.DSPropertyMap{ | 40 » » » PropertyMap{ |
41 » » » » "DS": {mp(mkKey("appy", "ns", "Foo", 7)), mp(mkK
ey("other", "", "Yot", "wheeep"))}, | 41 » » » » "DS": {mp(mkKey("appy", "ns", "Foo", 7)),
mp(mkKey("other", "", "Yot", "wheeep"))}, |
42 » » » » "BS": {mp(gae.BSKey("sup")), mp(gae.BSKey("nerds
"))}, | 42 » » » » "blobstore": {mp(blobstore.Key("sup")), mp(blobs
tore.Key("nerds"))}, |
43 }, | 43 }, |
44 }, | 44 }, |
45 { | 45 { |
46 "geo", | 46 "geo", |
47 » » » gae.DSPropertyMap{ | 47 » » » PropertyMap{ |
48 » » » » "G": {mp(gae.DSGeoPoint{Lat: 1, Lng: 2})}, | 48 » » » » "G": {mp(GeoPoint{Lat: 1, Lng: 2})}, |
49 }, | 49 }, |
50 }, | 50 }, |
51 { | 51 { |
52 "data", | 52 "data", |
53 » » » gae.DSPropertyMap{ | 53 » » » PropertyMap{ |
54 "S": {mp("sup"), mp("fool"), mp("nerd")
}, | 54 "S": {mp("sup"), mp("fool"), mp("nerd")
}, |
55 "D.Foo.Nerd": {mp([]byte("sup")), mp([]byte("foo
l"))}, | 55 "D.Foo.Nerd": {mp([]byte("sup")), mp([]byte("foo
l"))}, |
56 » » » » "B": {mp(gae.DSByteString("sup")), mp(g
ae.DSByteString("fool"))}, | 56 » » » » "B": {mp(ByteString("sup")), mp(ByteStr
ing("fool"))}, |
57 }, | 57 }, |
58 }, | 58 }, |
59 { | 59 { |
60 "time", | 60 "time", |
61 » » » gae.DSPropertyMap{ | 61 » » » PropertyMap{ |
62 "T": { | 62 "T": { |
63 mp(time.Now().UTC()), | 63 mp(time.Now().UTC()), |
64 mp(time.Now().Add(time.Second).UTC())}, | 64 mp(time.Now().Add(time.Second).UTC())}, |
65 }, | 65 }, |
66 }, | 66 }, |
67 { | 67 { |
68 "empty vals", | 68 "empty vals", |
69 » » » gae.DSPropertyMap{ | 69 » » » PropertyMap{ |
70 "T": {mp(true), mp(true)}, | 70 "T": {mp(true), mp(true)}, |
71 "F": {mp(false), mp(false)}, | 71 "F": {mp(false), mp(false)}, |
72 "N": {mp(nil), mp(nil)}, | 72 "N": {mp(nil), mp(nil)}, |
73 "E": {}, | 73 "E": {}, |
74 }, | 74 }, |
75 }, | 75 }, |
76 } | 76 } |
77 | 77 |
78 » Convey("DSPropertyMap serialization", t, func() { | 78 » Convey("PropertyMap serialization", t, func() { |
79 Convey("round trip", func() { | 79 Convey("round trip", func() { |
80 for _, tc := range tests { | 80 for _, tc := range tests { |
81 tc := tc | 81 tc := tc |
82 Convey(tc.name, func() { | 82 Convey(tc.name, func() { |
83 buf := &bytes.Buffer{} | 83 buf := &bytes.Buffer{} |
84 » » » » » WriteDSPropertyMap(buf, tc.props, WithCo
ntext) | 84 » » » » » WritePropertyMap(buf, tc.props, WithCont
ext) |
85 » » » » » dec, err := ReadDSPropertyMap(buf, WithC
ontext, "", "") | 85 » » » » » dec, err := ReadPropertyMap(buf, WithCon
text, "", "") |
86 So(err, ShouldBeNil) | 86 So(err, ShouldBeNil) |
87 So(dec, ShouldResemble, tc.props) | 87 So(dec, ShouldResemble, tc.props) |
88 }) | 88 }) |
89 } | 89 } |
90 }) | 90 }) |
91 }) | 91 }) |
92 } | 92 } |
93 | 93 |
94 func TestSerializationReadMisc(t *testing.T) { | 94 func TestSerializationReadMisc(t *testing.T) { |
95 t.Parallel() | 95 t.Parallel() |
96 | 96 |
97 Convey("Misc Serialization tests", t, func() { | 97 Convey("Misc Serialization tests", t, func() { |
98 » » Convey("ReadDSKey", func() { | 98 » » buf := &bytes.Buffer{} |
| 99 » » Convey("ReadKey", func() { |
99 Convey("good cases", func() { | 100 Convey("good cases", func() { |
100 Convey("w/ ctx decodes normally w/ ctx", func()
{ | 101 Convey("w/ ctx decodes normally w/ ctx", func()
{ |
101 k := mkKey("aid", "ns", "knd", "yo", "ot
her", 10) | 102 k := mkKey("aid", "ns", "knd", "yo", "ot
her", 10) |
102 » » » » » buf := &bytes.Buffer{} | 103 » » » » » WriteKey(buf, WithContext, k) |
103 » » » » » WriteDSKey(buf, WithContext, k) | 104 » » » » » dk, err := ReadKey(buf, WithContext, "",
"") |
104 » » » » » dk, err := ReadDSKey(buf, WithContext, "
", "") | |
105 So(err, ShouldBeNil) | 105 So(err, ShouldBeNil) |
106 So(dk, ShouldEqualKey, k) | 106 So(dk, ShouldEqualKey, k) |
107 }) | 107 }) |
108 Convey("w/ ctx decodes normally w/o ctx", func()
{ | 108 Convey("w/ ctx decodes normally w/o ctx", func()
{ |
109 k := mkKey("aid", "ns", "knd", "yo", "ot
her", 10) | 109 k := mkKey("aid", "ns", "knd", "yo", "ot
her", 10) |
110 » » » » » buf := &bytes.Buffer{} | 110 » » » » » WriteKey(buf, WithContext, k) |
111 » » » » » WriteDSKey(buf, WithContext, k) | 111 » » » » » dk, err := ReadKey(buf, WithoutContext,
"spam", "nerd") |
112 » » » » » dk, err := ReadDSKey(buf, WithoutContext
, "spam", "nerd") | |
113 So(err, ShouldBeNil) | 112 So(err, ShouldBeNil) |
114 So(dk, ShouldEqualKey, mkKey("spam", "ne
rd", "knd", "yo", "other", 10)) | 113 So(dk, ShouldEqualKey, mkKey("spam", "ne
rd", "knd", "yo", "other", 10)) |
115 }) | 114 }) |
116 Convey("w/o ctx decodes normally w/ ctx", func()
{ | 115 Convey("w/o ctx decodes normally w/ ctx", func()
{ |
117 k := mkKey("aid", "ns", "knd", "yo", "ot
her", 10) | 116 k := mkKey("aid", "ns", "knd", "yo", "ot
her", 10) |
118 » » » » » buf := &bytes.Buffer{} | 117 » » » » » WriteKey(buf, WithoutContext, k) |
119 » » » » » WriteDSKey(buf, WithoutContext, k) | 118 » » » » » dk, err := ReadKey(buf, WithContext, "sp
am", "nerd") |
120 » » » » » dk, err := ReadDSKey(buf, WithContext, "
spam", "nerd") | |
121 So(err, ShouldBeNil) | 119 So(err, ShouldBeNil) |
122 So(dk, ShouldEqualKey, mkKey("", "", "kn
d", "yo", "other", 10)) | 120 So(dk, ShouldEqualKey, mkKey("", "", "kn
d", "yo", "other", 10)) |
123 }) | 121 }) |
124 Convey("w/o ctx decodes normally w/o ctx", func(
) { | 122 Convey("w/o ctx decodes normally w/o ctx", func(
) { |
125 k := mkKey("aid", "ns", "knd", "yo", "ot
her", 10) | 123 k := mkKey("aid", "ns", "knd", "yo", "ot
her", 10) |
126 » » » » » buf := &bytes.Buffer{} | 124 » » » » » WriteKey(buf, WithoutContext, k) |
127 » » » » » WriteDSKey(buf, WithoutContext, k) | 125 » » » » » dk, err := ReadKey(buf, WithoutContext,
"spam", "nerd") |
128 » » » » » dk, err := ReadDSKey(buf, WithoutContext
, "spam", "nerd") | |
129 So(err, ShouldBeNil) | 126 So(err, ShouldBeNil) |
130 So(dk, ShouldEqualKey, mkKey("spam", "ne
rd", "knd", "yo", "other", 10)) | 127 So(dk, ShouldEqualKey, mkKey("spam", "ne
rd", "knd", "yo", "other", 10)) |
131 }) | 128 }) |
132 Convey("IntIDs always sort before StringIDs", fu
nc() { | 129 Convey("IntIDs always sort before StringIDs", fu
nc() { |
133 // -1 writes as almost all 1's in the fi
rst byte under cmpbin, even | 130 // -1 writes as almost all 1's in the fi
rst byte under cmpbin, even |
134 // though it's technically not a valid k
ey. | 131 // though it's technically not a valid k
ey. |
135 k := mkKey("aid", "ns", "knd", -1) | 132 k := mkKey("aid", "ns", "knd", -1) |
136 » » » » » buf := &bytes.Buffer{} | 133 » » » » » WriteKey(buf, WithoutContext, k) |
137 » » » » » WriteDSKey(buf, WithoutContext, k) | |
138 | 134 |
139 k = mkKey("aid", "ns", "knd", "hat") | 135 k = mkKey("aid", "ns", "knd", "hat") |
140 buf2 := &bytes.Buffer{} | 136 buf2 := &bytes.Buffer{} |
141 » » » » » WriteDSKey(buf2, WithoutContext, k) | 137 » » » » » WriteKey(buf2, WithoutContext, k) |
142 | 138 |
143 So(bytes.Compare(buf.Bytes(), buf2.Bytes
()), ShouldBeLessThan, 0) | 139 So(bytes.Compare(buf.Bytes(), buf2.Bytes
()), ShouldBeLessThan, 0) |
144 }) | 140 }) |
145 }) | 141 }) |
146 | 142 |
147 Convey("err cases", func() { | 143 Convey("err cases", func() { |
148 Convey("nil", func() { | 144 Convey("nil", func() { |
149 » » » » » buf := &bytes.Buffer{} | 145 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
150 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | |
151 So(err, ShouldEqual, io.EOF) | 146 So(err, ShouldEqual, io.EOF) |
152 }) | 147 }) |
153 Convey("str", func() { | 148 Convey("str", func() { |
154 buf := &bytes.Buffer{} | |
155 buf.WriteString("sup") | 149 buf.WriteString("sup") |
156 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 150 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
157 So(err, ShouldErrLike, "expected actualC
tx") | 151 So(err, ShouldErrLike, "expected actualC
tx") |
158 }) | 152 }) |
159 Convey("truncated 1", func() { | 153 Convey("truncated 1", func() { |
160 buf := &bytes.Buffer{} | |
161 buf.WriteByte(1) // actualCtx == 1 | 154 buf.WriteByte(1) // actualCtx == 1 |
162 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 155 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
163 So(err, ShouldEqual, io.EOF) | 156 So(err, ShouldEqual, io.EOF) |
164 }) | 157 }) |
165 Convey("truncated 2", func() { | 158 Convey("truncated 2", func() { |
166 buf := &bytes.Buffer{} | |
167 buf.WriteByte(1) // actualCtx == 1 | 159 buf.WriteByte(1) // actualCtx == 1 |
168 cmpbin.WriteString(buf, "aid") | 160 cmpbin.WriteString(buf, "aid") |
169 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 161 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
170 So(err, ShouldEqual, io.EOF) | 162 So(err, ShouldEqual, io.EOF) |
171 }) | 163 }) |
172 Convey("truncated 3", func() { | 164 Convey("truncated 3", func() { |
173 buf := &bytes.Buffer{} | |
174 buf.WriteByte(1) // actualCtx == 1 | 165 buf.WriteByte(1) // actualCtx == 1 |
175 cmpbin.WriteString(buf, "aid") | 166 cmpbin.WriteString(buf, "aid") |
176 cmpbin.WriteString(buf, "ns") | 167 cmpbin.WriteString(buf, "ns") |
177 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 168 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
178 So(err, ShouldEqual, io.EOF) | 169 So(err, ShouldEqual, io.EOF) |
179 }) | 170 }) |
180 Convey("huge key", func() { | 171 Convey("huge key", func() { |
181 buf := &bytes.Buffer{} | |
182 buf.WriteByte(1) // actualCtx == 1 | 172 buf.WriteByte(1) // actualCtx == 1 |
183 cmpbin.WriteString(buf, "aid") | 173 cmpbin.WriteString(buf, "aid") |
184 cmpbin.WriteString(buf, "ns") | 174 cmpbin.WriteString(buf, "ns") |
185 cmpbin.WriteUint(buf, 1000) | 175 cmpbin.WriteUint(buf, 1000) |
186 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 176 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
187 So(err, ShouldErrLike, "huge key") | 177 So(err, ShouldErrLike, "huge key") |
188 }) | 178 }) |
189 Convey("insufficient tokens", func() { | 179 Convey("insufficient tokens", func() { |
190 buf := &bytes.Buffer{} | |
191 buf.WriteByte(1) // actualCtx == 1 | 180 buf.WriteByte(1) // actualCtx == 1 |
192 cmpbin.WriteString(buf, "aid") | 181 cmpbin.WriteString(buf, "aid") |
193 cmpbin.WriteString(buf, "ns") | 182 cmpbin.WriteString(buf, "ns") |
194 cmpbin.WriteUint(buf, 2) | 183 cmpbin.WriteUint(buf, 2) |
195 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 184 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
196 So(err, ShouldEqual, io.EOF) | 185 So(err, ShouldEqual, io.EOF) |
197 }) | 186 }) |
198 Convey("partial token 1", func() { | 187 Convey("partial token 1", func() { |
199 buf := &bytes.Buffer{} | |
200 buf.WriteByte(1) // actualCtx == 1 | 188 buf.WriteByte(1) // actualCtx == 1 |
201 cmpbin.WriteString(buf, "aid") | 189 cmpbin.WriteString(buf, "aid") |
202 cmpbin.WriteString(buf, "ns") | 190 cmpbin.WriteString(buf, "ns") |
203 cmpbin.WriteUint(buf, 2) | 191 cmpbin.WriteUint(buf, 2) |
204 cmpbin.WriteString(buf, "hi") | 192 cmpbin.WriteString(buf, "hi") |
205 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 193 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
206 So(err, ShouldEqual, io.EOF) | 194 So(err, ShouldEqual, io.EOF) |
207 }) | 195 }) |
208 Convey("partial token 2", func() { | 196 Convey("partial token 2", func() { |
209 buf := &bytes.Buffer{} | |
210 buf.WriteByte(1) // actualCtx == 1 | 197 buf.WriteByte(1) // actualCtx == 1 |
211 cmpbin.WriteString(buf, "aid") | 198 cmpbin.WriteString(buf, "aid") |
212 cmpbin.WriteString(buf, "ns") | 199 cmpbin.WriteString(buf, "ns") |
213 cmpbin.WriteUint(buf, 2) | 200 cmpbin.WriteUint(buf, 2) |
214 cmpbin.WriteString(buf, "hi") | 201 cmpbin.WriteString(buf, "hi") |
215 » » » » » buf.WriteByte(byte(gae.DSPTString)) | 202 » » » » » buf.WriteByte(byte(PTString)) |
216 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 203 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
217 So(err, ShouldEqual, io.EOF) | 204 So(err, ShouldEqual, io.EOF) |
218 }) | 205 }) |
219 Convey("bad token (invalid type)", func() { | 206 Convey("bad token (invalid type)", func() { |
220 buf := &bytes.Buffer{} | |
221 buf.WriteByte(1) // actualCtx == 1 | 207 buf.WriteByte(1) // actualCtx == 1 |
222 cmpbin.WriteString(buf, "aid") | 208 cmpbin.WriteString(buf, "aid") |
223 cmpbin.WriteString(buf, "ns") | 209 cmpbin.WriteString(buf, "ns") |
224 cmpbin.WriteUint(buf, 2) | 210 cmpbin.WriteUint(buf, 2) |
225 cmpbin.WriteString(buf, "hi") | 211 cmpbin.WriteString(buf, "hi") |
226 » » » » » buf.WriteByte(byte(gae.DSPTBlobKey)) | 212 » » » » » buf.WriteByte(byte(PTBlobKey)) |
227 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 213 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
228 » » » » » So(err, ShouldErrLike, "invalid type DSP
TBlobKey") | 214 » » » » » So(err, ShouldErrLike, "invalid type PTB
lobKey") |
229 }) | 215 }) |
230 Convey("bad token (invalid IntID)", func() { | 216 Convey("bad token (invalid IntID)", func() { |
231 buf := &bytes.Buffer{} | |
232 buf.WriteByte(1) // actualCtx == 1 | 217 buf.WriteByte(1) // actualCtx == 1 |
233 cmpbin.WriteString(buf, "aid") | 218 cmpbin.WriteString(buf, "aid") |
234 cmpbin.WriteString(buf, "ns") | 219 cmpbin.WriteString(buf, "ns") |
235 cmpbin.WriteUint(buf, 2) | 220 cmpbin.WriteUint(buf, 2) |
236 cmpbin.WriteString(buf, "hi") | 221 cmpbin.WriteString(buf, "hi") |
237 » » » » » buf.WriteByte(byte(gae.DSPTInt)) | 222 » » » » » buf.WriteByte(byte(PTInt)) |
238 cmpbin.WriteInt(buf, -2) | 223 cmpbin.WriteInt(buf, -2) |
239 » » » » » _, err := ReadDSKey(buf, WithContext, ""
, "") | 224 » » » » » _, err := ReadKey(buf, WithContext, "",
"") |
240 So(err, ShouldErrLike, "zero/negative") | 225 So(err, ShouldErrLike, "zero/negative") |
241 }) | 226 }) |
242 }) | 227 }) |
243 }) | 228 }) |
244 | 229 |
245 » » Convey("ReadDSGeoPoint", func() { | 230 » » Convey("ReadGeoPoint", func() { |
246 Convey("trunc 1", func() { | 231 Convey("trunc 1", func() { |
247 » » » » buf := &bytes.Buffer{} | 232 » » » » _, err := ReadGeoPoint(buf) |
248 » » » » _, err := ReadDSGeoPoint(buf) | |
249 So(err, ShouldEqual, io.EOF) | 233 So(err, ShouldEqual, io.EOF) |
250 }) | 234 }) |
251 Convey("trunc 2", func() { | 235 Convey("trunc 2", func() { |
252 buf := &bytes.Buffer{} | |
253 cmpbin.WriteFloat64(buf, 100) | 236 cmpbin.WriteFloat64(buf, 100) |
254 » » » » _, err := ReadDSGeoPoint(buf) | 237 » » » » _, err := ReadGeoPoint(buf) |
255 So(err, ShouldEqual, io.EOF) | 238 So(err, ShouldEqual, io.EOF) |
256 }) | 239 }) |
257 Convey("invalid", func() { | 240 Convey("invalid", func() { |
258 buf := &bytes.Buffer{} | |
259 cmpbin.WriteFloat64(buf, 100) | 241 cmpbin.WriteFloat64(buf, 100) |
260 cmpbin.WriteFloat64(buf, 1000) | 242 cmpbin.WriteFloat64(buf, 1000) |
261 » » » » _, err := ReadDSGeoPoint(buf) | 243 » » » » _, err := ReadGeoPoint(buf) |
262 » » » » So(err, ShouldErrLike, "invalid DSGeoPoint") | 244 » » » » So(err, ShouldErrLike, "invalid GeoPoint") |
263 }) | 245 }) |
264 }) | 246 }) |
265 | 247 |
266 Convey("WriteTime", func() { | 248 Convey("WriteTime", func() { |
267 Convey("in non-UTC!", func() { | 249 Convey("in non-UTC!", func() { |
268 buf := &bytes.Buffer{} | |
269 pst, err := time.LoadLocation("America/Los_Angel
es") | 250 pst, err := time.LoadLocation("America/Los_Angel
es") |
270 So(err, ShouldBeNil) | 251 So(err, ShouldBeNil) |
271 So(func() { | 252 So(func() { |
272 WriteTime(buf, time.Now().In(pst)) | 253 WriteTime(buf, time.Now().In(pst)) |
273 }, ShouldPanic) | 254 }, ShouldPanic) |
274 }) | 255 }) |
275 }) | 256 }) |
276 | 257 |
277 Convey("ReadTime", func() { | 258 Convey("ReadTime", func() { |
278 Convey("trunc 1", func() { | 259 Convey("trunc 1", func() { |
279 buf := &bytes.Buffer{} | |
280 _, err := ReadTime(buf) | 260 _, err := ReadTime(buf) |
281 So(err, ShouldEqual, io.EOF) | 261 So(err, ShouldEqual, io.EOF) |
282 }) | 262 }) |
283 }) | 263 }) |
284 | 264 |
285 » » Convey("ReadDSProperty", func() { | 265 » » Convey("ReadProperty", func() { |
286 Convey("trunc 1", func() { | 266 Convey("trunc 1", func() { |
287 » » » » buf := &bytes.Buffer{} | 267 » » » » _, err := ReadProperty(buf, WithContext, "", "") |
288 » » » » _, err := ReadDSProperty(buf, WithContext, "", "
") | |
289 So(err, ShouldEqual, io.EOF) | 268 So(err, ShouldEqual, io.EOF) |
290 }) | 269 }) |
291 » » » Convey("trunc (DSPTBytes)", func() { | 270 » » » Convey("trunc (PTBytes)", func() { |
292 » » » » buf := &bytes.Buffer{} | 271 » » » » buf.WriteByte(byte(PTBytes)) |
293 » » » » buf.WriteByte(byte(gae.DSPTBytes)) | 272 » » » » _, err := ReadProperty(buf, WithContext, "", "") |
294 » » » » _, err := ReadDSProperty(buf, WithContext, "", "
") | |
295 So(err, ShouldEqual, io.EOF) | 273 So(err, ShouldEqual, io.EOF) |
296 }) | 274 }) |
297 » » » Convey("trunc (DSPTBlobKey)", func() { | 275 » » » Convey("trunc (PTBlobKey)", func() { |
298 » » » » buf := &bytes.Buffer{} | 276 » » » » buf.WriteByte(byte(PTBlobKey)) |
299 » » » » buf.WriteByte(byte(gae.DSPTBlobKey)) | 277 » » » » _, err := ReadProperty(buf, WithContext, "", "") |
300 » » » » _, err := ReadDSProperty(buf, WithContext, "", "
") | |
301 So(err, ShouldEqual, io.EOF) | 278 So(err, ShouldEqual, io.EOF) |
302 }) | 279 }) |
303 Convey("invalid type", func() { | 280 Convey("invalid type", func() { |
304 » » » » buf := &bytes.Buffer{} | 281 » » » » buf.WriteByte(byte(PTUnknown + 1)) |
305 » » » » buf.WriteByte(byte(gae.DSPTUnknown + 1)) | 282 » » » » _, err := ReadProperty(buf, WithContext, "", "") |
306 » » » » _, err := ReadDSProperty(buf, WithContext, "", "
") | |
307 So(err, ShouldErrLike, "unknown type!") | 283 So(err, ShouldErrLike, "unknown type!") |
308 }) | 284 }) |
309 }) | 285 }) |
310 | 286 |
311 » » Convey("ReadDSPropertyMap", func() { | 287 » » Convey("ReadPropertyMap", func() { |
312 Convey("trunc 1", func() { | 288 Convey("trunc 1", func() { |
313 » » » » buf := &bytes.Buffer{} | 289 » » » » _, err := ReadPropertyMap(buf, WithContext, "",
"") |
314 » » » » _, err := ReadDSPropertyMap(buf, WithContext, ""
, "") | |
315 So(err, ShouldEqual, io.EOF) | 290 So(err, ShouldEqual, io.EOF) |
316 }) | 291 }) |
317 Convey("too many rows", func() { | 292 Convey("too many rows", func() { |
318 buf := &bytes.Buffer{} | |
319 cmpbin.WriteUint(buf, 1000000) | 293 cmpbin.WriteUint(buf, 1000000) |
320 » » » » _, err := ReadDSPropertyMap(buf, WithContext, ""
, "") | 294 » » » » _, err := ReadPropertyMap(buf, WithContext, "",
"") |
321 So(err, ShouldErrLike, "huge number of rows") | 295 So(err, ShouldErrLike, "huge number of rows") |
322 }) | 296 }) |
323 Convey("trunc 2", func() { | 297 Convey("trunc 2", func() { |
324 buf := &bytes.Buffer{} | |
325 cmpbin.WriteUint(buf, 10) | 298 cmpbin.WriteUint(buf, 10) |
326 » » » » _, err := ReadDSPropertyMap(buf, WithContext, ""
, "") | 299 » » » » _, err := ReadPropertyMap(buf, WithContext, "",
"") |
327 So(err, ShouldEqual, io.EOF) | 300 So(err, ShouldEqual, io.EOF) |
328 }) | 301 }) |
329 Convey("trunc 3", func() { | 302 Convey("trunc 3", func() { |
330 buf := &bytes.Buffer{} | |
331 cmpbin.WriteUint(buf, 10) | 303 cmpbin.WriteUint(buf, 10) |
332 cmpbin.WriteString(buf, "ohai") | 304 cmpbin.WriteString(buf, "ohai") |
333 » » » » _, err := ReadDSPropertyMap(buf, WithContext, ""
, "") | 305 » » » » _, err := ReadPropertyMap(buf, WithContext, "",
"") |
334 So(err, ShouldEqual, io.EOF) | 306 So(err, ShouldEqual, io.EOF) |
335 }) | 307 }) |
336 Convey("too many values", func() { | 308 Convey("too many values", func() { |
337 buf := &bytes.Buffer{} | |
338 cmpbin.WriteUint(buf, 10) | 309 cmpbin.WriteUint(buf, 10) |
339 cmpbin.WriteString(buf, "ohai") | 310 cmpbin.WriteString(buf, "ohai") |
340 cmpbin.WriteUint(buf, 100000) | 311 cmpbin.WriteUint(buf, 100000) |
341 » » » » _, err := ReadDSPropertyMap(buf, WithContext, ""
, "") | 312 » » » » _, err := ReadPropertyMap(buf, WithContext, "",
"") |
342 So(err, ShouldErrLike, "huge number of propertie
s") | 313 So(err, ShouldErrLike, "huge number of propertie
s") |
343 }) | 314 }) |
344 Convey("trunc 4", func() { | 315 Convey("trunc 4", func() { |
345 buf := &bytes.Buffer{} | |
346 cmpbin.WriteUint(buf, 10) | 316 cmpbin.WriteUint(buf, 10) |
347 cmpbin.WriteString(buf, "ohai") | 317 cmpbin.WriteString(buf, "ohai") |
348 cmpbin.WriteUint(buf, 10) | 318 cmpbin.WriteUint(buf, 10) |
349 » » » » _, err := ReadDSPropertyMap(buf, WithContext, ""
, "") | 319 » » » » _, err := ReadPropertyMap(buf, WithContext, "",
"") |
350 So(err, ShouldEqual, io.EOF) | 320 So(err, ShouldEqual, io.EOF) |
351 }) | 321 }) |
352 }) | 322 }) |
353 }) | 323 }) |
354 } | 324 } |
OLD | NEW |