@@ -15,10 +15,17 @@ import (
15
15
"gopkg.in/vmihailenco/msgpack.v2"
16
16
)
17
17
18
- var (
19
- minTime = time .Unix (0 , 0 )
20
- maxTime = time .Unix (1 << 63 - 1 , 999999999 )
21
- )
18
+ var maxTimes = []time.Time {
19
+ time .Date (- 5879610 , 06 , 22 , 0 , 0 , 0 , 0 , time .UTC ),
20
+ time .Date (5879611 , 07 , 11 , 0 , 0 , 0 , 999999999 , time .UTC ),
21
+ time .Date (- 5879610 , 06 , 21 , 23 , 59 , 59 , 1000000000 , time .UTC ),
22
+ }
23
+
24
+ var tooBigTimes = []time.Time {
25
+ time .Date (- 5879610 , 06 , 21 , 23 , 59 , 59 , 999999999 , time .UTC ),
26
+ time .Date (5879611 , 07 , 11 , 0 , 0 , 1 , 0 , time .UTC ),
27
+ time .Date (5879611 , 07 , 11 , 0 , 0 , 0 , 1000000000 , time .UTC ),
28
+ }
22
29
23
30
var isDatetimeSupported = false
24
31
@@ -76,10 +83,15 @@ func assertDatetimeIsEqual(t *testing.T, tuples []interface{}, tm time.Time) {
76
83
}
77
84
78
85
func tupleInsertSelectDelete (t * testing.T , conn * Connection , tm time.Time ) {
79
- dt := NewDatetime (tm )
86
+ t .Helper ()
87
+
88
+ dt , err := NewDatetime (tm )
89
+ if err != nil {
90
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
91
+ }
80
92
81
93
// Insert tuple with datetime.
82
- _ , err : = conn .Insert (spaceTuple1 , []interface {}{dt , "payload" })
94
+ _ , err = conn .Insert (spaceTuple1 , []interface {}{dt , "payload" })
83
95
if err != nil {
84
96
t .Fatalf ("Datetime insert failed: %s" , err .Error ())
85
97
}
@@ -191,16 +203,27 @@ func TestDatetimeMax(t *testing.T) {
191
203
conn := connectWithValidation (t )
192
204
defer conn .Close ()
193
205
194
- tupleInsertSelectDelete (t , conn , maxTime )
206
+ for _ , tm := range maxTimes {
207
+ t .Run (tm .String (), func (t * testing.T ) {
208
+ tupleInsertSelectDelete (t , conn , tm )
209
+ })
210
+ }
195
211
}
196
212
197
- func TestDatetimeMin (t * testing.T ) {
213
+ func TestDatetimeTooBig (t * testing.T ) {
198
214
skipIfDatetimeUnsupported (t )
199
215
200
216
conn := connectWithValidation (t )
201
217
defer conn .Close ()
202
218
203
- tupleInsertSelectDelete (t , conn , minTime )
219
+ for _ , tm := range tooBigTimes {
220
+ t .Run (tm .String (), func (t * testing.T ) {
221
+ _ , err := NewDatetime (tm )
222
+ if err == nil {
223
+ t .Errorf ("Time %s should be unsupported!" , tm )
224
+ }
225
+ })
226
+ }
204
227
}
205
228
206
229
func TestDatetimeReplace (t * testing.T ) {
@@ -214,7 +237,10 @@ func TestDatetimeReplace(t *testing.T) {
214
237
t .Fatalf ("Time parse failed: %s" , err )
215
238
}
216
239
217
- dt := NewDatetime (tm )
240
+ dt , err := NewDatetime (tm )
241
+ if err != nil {
242
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
243
+ }
218
244
resp , err := conn .Replace (spaceTuple1 , []interface {}{dt , "payload" })
219
245
if err != nil {
220
246
t .Fatalf ("Datetime replace failed: %s" , err )
@@ -359,16 +385,24 @@ func TestCustomEncodeDecodeTuple1(t *testing.T) {
359
385
conn := connectWithValidation (t )
360
386
defer conn .Close ()
361
387
362
- dt1 , _ := time .Parse (time .RFC3339 , "2010-05-24T17:51:56.000000009Z" )
363
- dt2 , _ := time .Parse (time .RFC3339 , "2022-05-24T17:51:56.000000009Z" )
388
+ tm1 , _ := time .Parse (time .RFC3339 , "2010-05-24T17:51:56.000000009Z" )
389
+ tm2 , _ := time .Parse (time .RFC3339 , "2022-05-24T17:51:56.000000009Z" )
390
+ dt1 , err := NewDatetime (tm1 )
391
+ if err != nil {
392
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm1 , err )
393
+ }
394
+ dt2 , err := NewDatetime (tm2 )
395
+ if err != nil {
396
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm2 , err )
397
+ }
364
398
const cid = 13
365
399
const orig = "orig"
366
400
367
401
tuple := Tuple2 {Cid : cid ,
368
402
Orig : orig ,
369
403
Events : []Event {
370
- {* NewDatetime ( dt1 ) , "Minsk" },
371
- {* NewDatetime ( dt2 ) , "Moscow" },
404
+ {* dt1 , "Minsk" },
405
+ {* dt2 , "Moscow" },
372
406
},
373
407
}
374
408
resp , err := conn .Replace (spaceTuple2 , & tuple )
@@ -405,7 +439,7 @@ func TestCustomEncodeDecodeTuple1(t *testing.T) {
405
439
t .Fatalf ("Unable to convert 2 field to []interface{}" )
406
440
}
407
441
408
- for i , tv := range []time.Time {dt1 , dt2 } {
442
+ for i , tv := range []time.Time {tm1 , tm2 } {
409
443
dt := events [i ].([]interface {})[1 ].(Datetime )
410
444
if ! dt .ToTime ().Equal (tv ) {
411
445
t .Fatalf ("%v != %v" , dt .ToTime (), tv )
@@ -463,8 +497,11 @@ func TestCustomEncodeDecodeTuple5(t *testing.T) {
463
497
defer conn .Close ()
464
498
465
499
tm := time .Unix (500 , 1000 )
466
- dt := NewDatetime (tm )
467
- _ , err := conn .Insert (spaceTuple1 , []interface {}{dt })
500
+ dt , err := NewDatetime (tm )
501
+ if err != nil {
502
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
503
+ }
504
+ _ , err = conn .Insert (spaceTuple1 , []interface {}{dt })
468
505
if err != nil {
469
506
t .Fatalf ("Datetime insert failed: %s" , err .Error ())
470
507
}
@@ -495,7 +532,10 @@ func TestMPEncode(t *testing.T) {
495
532
if err != nil {
496
533
t .Fatalf ("Time (%s) parse failed: %s" , testcase .dt , err )
497
534
}
498
- dt := NewDatetime (tm )
535
+ dt , err := NewDatetime (tm )
536
+ if err != nil {
537
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
538
+ }
499
539
buf , err := msgpack .Marshal (dt )
500
540
if err != nil {
501
541
t .Fatalf ("Marshalling failed: %s" , err .Error ())
0 commit comments