1
2
3
4
5
6
7 package bsonrw
8
9 import (
10 "testing"
11
12 "go.mongodb.org/mongo-driver/bson/bsontype"
13 "go.mongodb.org/mongo-driver/bson/primitive"
14 "go.mongodb.org/mongo-driver/x/bsonx/bsoncore"
15 )
16
17 type VRWInvoked byte
18
19 const (
20 _ = iota
21 llvrwReadArray VRWInvoked = 1
22 llvrwReadBinary
23 llvrwReadBoolean
24 llvrwReadDocument
25 llvrwReadCodeWithScope
26 llvrwReadDBPointer
27 llvrwReadDateTime
28 llvrwReadDecimal128
29 llvrwReadDouble
30 llvrwReadInt32
31 llvrwReadInt64
32 llvrwReadJavascript
33 llvrwReadMaxKey
34 llvrwReadMinKey
35 llvrwReadNull
36 llvrwReadObjectID
37 llvrwReadRegex
38 llvrwReadString
39 llvrwReadSymbol
40 llvrwReadTimestamp
41 llvrwReadUndefined
42 llvrwReadElement
43 llvrwReadValue
44 llvrwWriteArray
45 llvrwWriteBinary
46 llvrwWriteBinaryWithSubtype
47 llvrwWriteBoolean
48 llvrwWriteCodeWithScope
49 llvrwWriteDBPointer
50 llvrwWriteDateTime
51 llvrwWriteDecimal128
52 llvrwWriteDouble
53 llvrwWriteInt32
54 llvrwWriteInt64
55 llvrwWriteJavascript
56 llvrwWriteMaxKey
57 llvrwWriteMinKey
58 llvrwWriteNull
59 llvrwWriteObjectID
60 llvrwWriteRegex
61 llvrwWriteString
62 llvrwWriteDocument
63 llvrwWriteSymbol
64 llvrwWriteTimestamp
65 llvrwWriteUndefined
66 llvrwWriteDocumentElement
67 llvrwWriteDocumentEnd
68 llvrwWriteArrayElement
69 llvrwWriteArrayEnd
70 )
71
72 type TestValueReaderWriter struct {
73 t *testing.T
74 invoked VRWInvoked
75 readval interface{}
76 bsontype bsontype.Type
77 err error
78 errAfter VRWInvoked
79 }
80
81 func (llvrw *TestValueReaderWriter) Type() bsontype.Type {
82 return llvrw.bsontype
83 }
84
85 func (llvrw *TestValueReaderWriter) Skip() error {
86 panic("not implemented")
87 }
88
89 func (llvrw *TestValueReaderWriter) ReadArray() (ArrayReader, error) {
90 llvrw.invoked = llvrwReadArray
91 if llvrw.errAfter == llvrw.invoked {
92 return nil, llvrw.err
93 }
94
95 return llvrw, nil
96 }
97
98 func (llvrw *TestValueReaderWriter) ReadBinary() (b []byte, btype byte, err error) {
99 llvrw.invoked = llvrwReadBinary
100 if llvrw.errAfter == llvrw.invoked {
101 return nil, 0x00, llvrw.err
102 }
103
104 switch tt := llvrw.readval.(type) {
105 case bsoncore.Value:
106 subtype, data, _, ok := bsoncore.ReadBinary(tt.Data)
107 if !ok {
108 llvrw.t.Error("Invalid Value provided for return value of ReadBinary.")
109 return nil, 0x00, nil
110 }
111 return data, subtype, nil
112 default:
113 llvrw.t.Errorf("Incorrect type provided for return value of ReadBinary: %T", llvrw.readval)
114 return nil, 0x00, nil
115 }
116 }
117
118 func (llvrw *TestValueReaderWriter) ReadBoolean() (bool, error) {
119 llvrw.invoked = llvrwReadBoolean
120 if llvrw.errAfter == llvrw.invoked {
121 return false, llvrw.err
122 }
123
124 b, ok := llvrw.readval.(bool)
125 if !ok {
126 llvrw.t.Errorf("Incorrect type provided for return value of ReadBoolean: %T", llvrw.readval)
127 return false, nil
128 }
129
130 return b, llvrw.err
131 }
132
133 func (llvrw *TestValueReaderWriter) ReadDocument() (DocumentReader, error) {
134 llvrw.invoked = llvrwReadDocument
135 if llvrw.errAfter == llvrw.invoked {
136 return nil, llvrw.err
137 }
138
139 return llvrw, nil
140 }
141
142 func (llvrw *TestValueReaderWriter) ReadCodeWithScope() (code string, dr DocumentReader, err error) {
143 llvrw.invoked = llvrwReadCodeWithScope
144 if llvrw.errAfter == llvrw.invoked {
145 return "", nil, llvrw.err
146 }
147
148 return "", llvrw, nil
149 }
150
151 func (llvrw *TestValueReaderWriter) ReadDBPointer() (ns string, oid primitive.ObjectID, err error) {
152 llvrw.invoked = llvrwReadDBPointer
153 if llvrw.errAfter == llvrw.invoked {
154 return "", primitive.ObjectID{}, llvrw.err
155 }
156
157 switch tt := llvrw.readval.(type) {
158 case bsoncore.Value:
159 ns, oid, _, ok := bsoncore.ReadDBPointer(tt.Data)
160 if !ok {
161 llvrw.t.Error("Invalid Value instance provided for return value of ReadDBPointer")
162 return "", primitive.ObjectID{}, nil
163 }
164 return ns, oid, nil
165 default:
166 llvrw.t.Errorf("Incorrect type provided for return value of ReadDBPointer: %T", llvrw.readval)
167 return "", primitive.ObjectID{}, nil
168 }
169 }
170
171 func (llvrw *TestValueReaderWriter) ReadDateTime() (int64, error) {
172 llvrw.invoked = llvrwReadDateTime
173 if llvrw.errAfter == llvrw.invoked {
174 return 0, llvrw.err
175 }
176
177 dt, ok := llvrw.readval.(int64)
178 if !ok {
179 llvrw.t.Errorf("Incorrect type provided for return value of ReadDateTime: %T", llvrw.readval)
180 return 0, nil
181 }
182
183 return dt, nil
184 }
185
186 func (llvrw *TestValueReaderWriter) ReadDecimal128() (primitive.Decimal128, error) {
187 llvrw.invoked = llvrwReadDecimal128
188 if llvrw.errAfter == llvrw.invoked {
189 return primitive.Decimal128{}, llvrw.err
190 }
191
192 d128, ok := llvrw.readval.(primitive.Decimal128)
193 if !ok {
194 llvrw.t.Errorf("Incorrect type provided for return value of ReadDecimal128: %T", llvrw.readval)
195 return primitive.Decimal128{}, nil
196 }
197
198 return d128, nil
199 }
200
201 func (llvrw *TestValueReaderWriter) ReadDouble() (float64, error) {
202 llvrw.invoked = llvrwReadDouble
203 if llvrw.errAfter == llvrw.invoked {
204 return 0, llvrw.err
205 }
206
207 f64, ok := llvrw.readval.(float64)
208 if !ok {
209 llvrw.t.Errorf("Incorrect type provided for return value of ReadDouble: %T", llvrw.readval)
210 return 0, nil
211 }
212
213 return f64, nil
214 }
215
216 func (llvrw *TestValueReaderWriter) ReadInt32() (int32, error) {
217 llvrw.invoked = llvrwReadInt32
218 if llvrw.errAfter == llvrw.invoked {
219 return 0, llvrw.err
220 }
221
222 i32, ok := llvrw.readval.(int32)
223 if !ok {
224 llvrw.t.Errorf("Incorrect type provided for return value of ReadInt32: %T", llvrw.readval)
225 return 0, nil
226 }
227
228 return i32, nil
229 }
230
231 func (llvrw *TestValueReaderWriter) ReadInt64() (int64, error) {
232 llvrw.invoked = llvrwReadInt64
233 if llvrw.errAfter == llvrw.invoked {
234 return 0, llvrw.err
235 }
236 i64, ok := llvrw.readval.(int64)
237 if !ok {
238 llvrw.t.Errorf("Incorrect type provided for return value of ReadInt64: %T", llvrw.readval)
239 return 0, nil
240 }
241
242 return i64, nil
243 }
244
245 func (llvrw *TestValueReaderWriter) ReadJavascript() (code string, err error) {
246 llvrw.invoked = llvrwReadJavascript
247 if llvrw.errAfter == llvrw.invoked {
248 return "", llvrw.err
249 }
250 js, ok := llvrw.readval.(string)
251 if !ok {
252 llvrw.t.Errorf("Incorrect type provided for return value of ReadJavascript: %T", llvrw.readval)
253 return "", nil
254 }
255
256 return js, nil
257 }
258
259 func (llvrw *TestValueReaderWriter) ReadMaxKey() error {
260 llvrw.invoked = llvrwReadMaxKey
261 if llvrw.errAfter == llvrw.invoked {
262 return llvrw.err
263 }
264
265 return nil
266 }
267
268 func (llvrw *TestValueReaderWriter) ReadMinKey() error {
269 llvrw.invoked = llvrwReadMinKey
270 if llvrw.errAfter == llvrw.invoked {
271 return llvrw.err
272 }
273
274 return nil
275 }
276
277 func (llvrw *TestValueReaderWriter) ReadNull() error {
278 llvrw.invoked = llvrwReadNull
279 if llvrw.errAfter == llvrw.invoked {
280 return llvrw.err
281 }
282
283 return nil
284 }
285
286 func (llvrw *TestValueReaderWriter) ReadObjectID() (primitive.ObjectID, error) {
287 llvrw.invoked = llvrwReadObjectID
288 if llvrw.errAfter == llvrw.invoked {
289 return primitive.ObjectID{}, llvrw.err
290 }
291 oid, ok := llvrw.readval.(primitive.ObjectID)
292 if !ok {
293 llvrw.t.Errorf("Incorrect type provided for return value of ReadObjectID: %T", llvrw.readval)
294 return primitive.ObjectID{}, nil
295 }
296
297 return oid, nil
298 }
299
300 func (llvrw *TestValueReaderWriter) ReadRegex() (pattern string, options string, err error) {
301 llvrw.invoked = llvrwReadRegex
302 if llvrw.errAfter == llvrw.invoked {
303 return "", "", llvrw.err
304 }
305 switch tt := llvrw.readval.(type) {
306 case bsoncore.Value:
307 pattern, options, _, ok := bsoncore.ReadRegex(tt.Data)
308 if !ok {
309 llvrw.t.Error("Invalid Value instance provided for ReadRegex")
310 return "", "", nil
311 }
312 return pattern, options, nil
313 default:
314 llvrw.t.Errorf("Incorrect type provided for return value of ReadRegex: %T", llvrw.readval)
315 return "", "", nil
316 }
317 }
318
319 func (llvrw *TestValueReaderWriter) ReadString() (string, error) {
320 llvrw.invoked = llvrwReadString
321 if llvrw.errAfter == llvrw.invoked {
322 return "", llvrw.err
323 }
324 str, ok := llvrw.readval.(string)
325 if !ok {
326 llvrw.t.Errorf("Incorrect type provided for return value of ReadString: %T", llvrw.readval)
327 return "", nil
328 }
329
330 return str, nil
331 }
332
333 func (llvrw *TestValueReaderWriter) ReadSymbol() (symbol string, err error) {
334 llvrw.invoked = llvrwReadSymbol
335 if llvrw.errAfter == llvrw.invoked {
336 return "", llvrw.err
337 }
338 switch tt := llvrw.readval.(type) {
339 case bsoncore.Value:
340 symbol, _, ok := bsoncore.ReadSymbol(tt.Data)
341 if !ok {
342 llvrw.t.Error("Invalid Value instance provided for ReadSymbol")
343 return "", nil
344 }
345 return symbol, nil
346 default:
347 llvrw.t.Errorf("Incorrect type provided for return value of ReadSymbol: %T", llvrw.readval)
348 return "", nil
349 }
350 }
351
352 func (llvrw *TestValueReaderWriter) ReadTimestamp() (t uint32, i uint32, err error) {
353 llvrw.invoked = llvrwReadTimestamp
354 if llvrw.errAfter == llvrw.invoked {
355 return 0, 0, llvrw.err
356 }
357 switch tt := llvrw.readval.(type) {
358 case bsoncore.Value:
359 t, i, _, ok := bsoncore.ReadTimestamp(tt.Data)
360 if !ok {
361 llvrw.t.Errorf("Invalid Value instance provided for return value of ReadTimestamp")
362 return 0, 0, nil
363 }
364 return t, i, nil
365 default:
366 llvrw.t.Errorf("Incorrect type provided for return value of ReadTimestamp: %T", llvrw.readval)
367 return 0, 0, nil
368 }
369 }
370
371 func (llvrw *TestValueReaderWriter) ReadUndefined() error {
372 llvrw.invoked = llvrwReadUndefined
373 if llvrw.errAfter == llvrw.invoked {
374 return llvrw.err
375 }
376
377 return nil
378 }
379
380 func (llvrw *TestValueReaderWriter) WriteArray() (ArrayWriter, error) {
381 llvrw.invoked = llvrwWriteArray
382 if llvrw.errAfter == llvrw.invoked {
383 return nil, llvrw.err
384 }
385 return llvrw, nil
386 }
387
388 func (llvrw *TestValueReaderWriter) WriteBinary([]byte) error {
389 llvrw.invoked = llvrwWriteBinary
390 if llvrw.errAfter == llvrw.invoked {
391 return llvrw.err
392 }
393 return nil
394 }
395
396 func (llvrw *TestValueReaderWriter) WriteBinaryWithSubtype([]byte, byte) error {
397 llvrw.invoked = llvrwWriteBinaryWithSubtype
398 if llvrw.errAfter == llvrw.invoked {
399 return llvrw.err
400 }
401 return nil
402 }
403
404 func (llvrw *TestValueReaderWriter) WriteBoolean(bool) error {
405 llvrw.invoked = llvrwWriteBoolean
406 if llvrw.errAfter == llvrw.invoked {
407 return llvrw.err
408 }
409 return nil
410 }
411
412 func (llvrw *TestValueReaderWriter) WriteCodeWithScope(string) (DocumentWriter, error) {
413 llvrw.invoked = llvrwWriteCodeWithScope
414 if llvrw.errAfter == llvrw.invoked {
415 return nil, llvrw.err
416 }
417 return llvrw, nil
418 }
419
420 func (llvrw *TestValueReaderWriter) WriteDBPointer(string, primitive.ObjectID) error {
421 llvrw.invoked = llvrwWriteDBPointer
422 if llvrw.errAfter == llvrw.invoked {
423 return llvrw.err
424 }
425 return nil
426 }
427
428 func (llvrw *TestValueReaderWriter) WriteDateTime(int64) error {
429 llvrw.invoked = llvrwWriteDateTime
430 if llvrw.errAfter == llvrw.invoked {
431 return llvrw.err
432 }
433 return nil
434 }
435
436 func (llvrw *TestValueReaderWriter) WriteDecimal128(primitive.Decimal128) error {
437 llvrw.invoked = llvrwWriteDecimal128
438 if llvrw.errAfter == llvrw.invoked {
439 return llvrw.err
440 }
441 return nil
442 }
443
444 func (llvrw *TestValueReaderWriter) WriteDouble(float64) error {
445 llvrw.invoked = llvrwWriteDouble
446 if llvrw.errAfter == llvrw.invoked {
447 return llvrw.err
448 }
449 return nil
450 }
451
452 func (llvrw *TestValueReaderWriter) WriteInt32(int32) error {
453 llvrw.invoked = llvrwWriteInt32
454 if llvrw.errAfter == llvrw.invoked {
455 return llvrw.err
456 }
457 return nil
458 }
459
460 func (llvrw *TestValueReaderWriter) WriteInt64(int64) error {
461 llvrw.invoked = llvrwWriteInt64
462 if llvrw.errAfter == llvrw.invoked {
463 return llvrw.err
464 }
465 return nil
466 }
467
468 func (llvrw *TestValueReaderWriter) WriteJavascript(string) error {
469 llvrw.invoked = llvrwWriteJavascript
470 if llvrw.errAfter == llvrw.invoked {
471 return llvrw.err
472 }
473 return nil
474 }
475
476 func (llvrw *TestValueReaderWriter) WriteMaxKey() error {
477 llvrw.invoked = llvrwWriteMaxKey
478 if llvrw.errAfter == llvrw.invoked {
479 return llvrw.err
480 }
481 return nil
482 }
483
484 func (llvrw *TestValueReaderWriter) WriteMinKey() error {
485 llvrw.invoked = llvrwWriteMinKey
486 if llvrw.errAfter == llvrw.invoked {
487 return llvrw.err
488 }
489 return nil
490 }
491
492 func (llvrw *TestValueReaderWriter) WriteNull() error {
493 llvrw.invoked = llvrwWriteNull
494 if llvrw.errAfter == llvrw.invoked {
495 return llvrw.err
496 }
497 return nil
498 }
499
500 func (llvrw *TestValueReaderWriter) WriteObjectID(primitive.ObjectID) error {
501 llvrw.invoked = llvrwWriteObjectID
502 if llvrw.errAfter == llvrw.invoked {
503 return llvrw.err
504 }
505 return nil
506 }
507
508 func (llvrw *TestValueReaderWriter) WriteRegex(string, string) error {
509 llvrw.invoked = llvrwWriteRegex
510 if llvrw.errAfter == llvrw.invoked {
511 return llvrw.err
512 }
513 return nil
514 }
515
516 func (llvrw *TestValueReaderWriter) WriteString(string) error {
517 llvrw.invoked = llvrwWriteString
518 if llvrw.errAfter == llvrw.invoked {
519 return llvrw.err
520 }
521 return nil
522 }
523
524 func (llvrw *TestValueReaderWriter) WriteDocument() (DocumentWriter, error) {
525 llvrw.invoked = llvrwWriteDocument
526 if llvrw.errAfter == llvrw.invoked {
527 return nil, llvrw.err
528 }
529 return llvrw, nil
530 }
531
532 func (llvrw *TestValueReaderWriter) WriteSymbol(string) error {
533 llvrw.invoked = llvrwWriteSymbol
534 if llvrw.errAfter == llvrw.invoked {
535 return llvrw.err
536 }
537 return nil
538 }
539
540 func (llvrw *TestValueReaderWriter) WriteTimestamp(uint32, uint32) error {
541 llvrw.invoked = llvrwWriteTimestamp
542 if llvrw.errAfter == llvrw.invoked {
543 return llvrw.err
544 }
545 return nil
546 }
547
548 func (llvrw *TestValueReaderWriter) WriteUndefined() error {
549 llvrw.invoked = llvrwWriteUndefined
550 if llvrw.errAfter == llvrw.invoked {
551 return llvrw.err
552 }
553 return nil
554 }
555
556 func (llvrw *TestValueReaderWriter) ReadElement() (string, ValueReader, error) {
557 llvrw.invoked = llvrwReadElement
558 if llvrw.errAfter == llvrw.invoked {
559 return "", nil, llvrw.err
560 }
561
562 return "", llvrw, nil
563 }
564
565 func (llvrw *TestValueReaderWriter) WriteDocumentElement(string) (ValueWriter, error) {
566 llvrw.invoked = llvrwWriteDocumentElement
567 if llvrw.errAfter == llvrw.invoked {
568 return nil, llvrw.err
569 }
570
571 return llvrw, nil
572 }
573
574 func (llvrw *TestValueReaderWriter) WriteDocumentEnd() error {
575 llvrw.invoked = llvrwWriteDocumentEnd
576 if llvrw.errAfter == llvrw.invoked {
577 return llvrw.err
578 }
579
580 return nil
581 }
582
583 func (llvrw *TestValueReaderWriter) ReadValue() (ValueReader, error) {
584 llvrw.invoked = llvrwReadValue
585 if llvrw.errAfter == llvrw.invoked {
586 return nil, llvrw.err
587 }
588
589 return llvrw, nil
590 }
591
592 func (llvrw *TestValueReaderWriter) WriteArrayElement() (ValueWriter, error) {
593 llvrw.invoked = llvrwWriteArrayElement
594 if llvrw.errAfter == llvrw.invoked {
595 return nil, llvrw.err
596 }
597
598 return llvrw, nil
599 }
600
601 func (llvrw *TestValueReaderWriter) WriteArrayEnd() error {
602 llvrw.invoked = llvrwWriteArrayEnd
603 if llvrw.errAfter == llvrw.invoked {
604 return llvrw.err
605 }
606
607 return nil
608 }
609
View as plain text