@@ -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 outOfRangeTimes = []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
@@ -63,10 +70,15 @@ func assertDatetimeIsEqual(t *testing.T, tuples []interface{}, tm time.Time) {
63
70
}
64
71
65
72
func tupleInsertSelectDelete (t * testing.T , conn * Connection , tm time.Time ) {
66
- dt := NewDatetime (tm )
73
+ t .Helper ()
74
+
75
+ dt , err := NewDatetime (tm )
76
+ if err != nil {
77
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
78
+ }
67
79
68
80
// Insert tuple with datetime.
69
- _ , err : = conn .Insert (spaceTuple1 , []interface {}{dt , "payload" })
81
+ _ , err = conn .Insert (spaceTuple1 , []interface {}{dt , "payload" })
70
82
if err != nil {
71
83
t .Fatalf ("Datetime insert failed: %s" , err .Error ())
72
84
}
@@ -178,16 +190,27 @@ func TestDatetimeMax(t *testing.T) {
178
190
conn := test_helpers .ConnectWithValidation (t , server , opts )
179
191
defer conn .Close ()
180
192
181
- tupleInsertSelectDelete (t , conn , maxTime )
193
+ for _ , tm := range maxTimes {
194
+ t .Run (tm .String (), func (t * testing.T ) {
195
+ tupleInsertSelectDelete (t , conn , tm )
196
+ })
197
+ }
182
198
}
183
199
184
- func TestDatetimeMin (t * testing.T ) {
200
+ func TestDatetimeOutOfRange (t * testing.T ) {
185
201
skipIfDatetimeUnsupported (t )
186
202
187
203
conn := test_helpers .ConnectWithValidation (t , server , opts )
188
204
defer conn .Close ()
189
205
190
- tupleInsertSelectDelete (t , conn , minTime )
206
+ for _ , tm := range outOfRangeTimes {
207
+ t .Run (tm .String (), func (t * testing.T ) {
208
+ _ , err := NewDatetime (tm )
209
+ if err == nil {
210
+ t .Errorf ("Time %s should be unsupported!" , tm )
211
+ }
212
+ })
213
+ }
191
214
}
192
215
193
216
func TestDatetimeReplace (t * testing.T ) {
@@ -201,7 +224,10 @@ func TestDatetimeReplace(t *testing.T) {
201
224
t .Fatalf ("Time parse failed: %s" , err )
202
225
}
203
226
204
- dt := NewDatetime (tm )
227
+ dt , err := NewDatetime (tm )
228
+ if err != nil {
229
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
230
+ }
205
231
resp , err := conn .Replace (spaceTuple1 , []interface {}{dt , "payload" })
206
232
if err != nil {
207
233
t .Fatalf ("Datetime replace failed: %s" , err )
@@ -346,16 +372,24 @@ func TestCustomEncodeDecodeTuple1(t *testing.T) {
346
372
conn := test_helpers .ConnectWithValidation (t , server , opts )
347
373
defer conn .Close ()
348
374
349
- dt1 , _ := time .Parse (time .RFC3339 , "2010-05-24T17:51:56.000000009Z" )
350
- dt2 , _ := time .Parse (time .RFC3339 , "2022-05-24T17:51:56.000000009Z" )
375
+ tm1 , _ := time .Parse (time .RFC3339 , "2010-05-24T17:51:56.000000009Z" )
376
+ tm2 , _ := time .Parse (time .RFC3339 , "2022-05-24T17:51:56.000000009Z" )
377
+ dt1 , err := NewDatetime (tm1 )
378
+ if err != nil {
379
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm1 , err )
380
+ }
381
+ dt2 , err := NewDatetime (tm2 )
382
+ if err != nil {
383
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm2 , err )
384
+ }
351
385
const cid = 13
352
386
const orig = "orig"
353
387
354
388
tuple := Tuple2 {Cid : cid ,
355
389
Orig : orig ,
356
390
Events : []Event {
357
- {* NewDatetime ( dt1 ) , "Minsk" },
358
- {* NewDatetime ( dt2 ) , "Moscow" },
391
+ {* dt1 , "Minsk" },
392
+ {* dt2 , "Moscow" },
359
393
},
360
394
}
361
395
resp , err := conn .Replace (spaceTuple2 , & tuple )
@@ -392,7 +426,7 @@ func TestCustomEncodeDecodeTuple1(t *testing.T) {
392
426
t .Fatalf ("Unable to convert 2 field to []interface{}" )
393
427
}
394
428
395
- for i , tv := range []time.Time {dt1 , dt2 } {
429
+ for i , tv := range []time.Time {tm1 , tm2 } {
396
430
dt := events [i ].([]interface {})[1 ].(Datetime )
397
431
if ! dt .ToTime ().Equal (tv ) {
398
432
t .Fatalf ("%v != %v" , dt .ToTime (), tv )
@@ -450,8 +484,11 @@ func TestCustomEncodeDecodeTuple5(t *testing.T) {
450
484
defer conn .Close ()
451
485
452
486
tm := time .Unix (500 , 1000 )
453
- dt := NewDatetime (tm )
454
- _ , err := conn .Insert (spaceTuple1 , []interface {}{dt })
487
+ dt , err := NewDatetime (tm )
488
+ if err != nil {
489
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
490
+ }
491
+ _ , err = conn .Insert (spaceTuple1 , []interface {}{dt })
455
492
if err != nil {
456
493
t .Fatalf ("Datetime insert failed: %s" , err .Error ())
457
494
}
@@ -482,7 +519,10 @@ func TestMPEncode(t *testing.T) {
482
519
if err != nil {
483
520
t .Fatalf ("Time (%s) parse failed: %s" , testcase .dt , err )
484
521
}
485
- dt := NewDatetime (tm )
522
+ dt , err := NewDatetime (tm )
523
+ if err != nil {
524
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
525
+ }
486
526
buf , err := msgpack .Marshal (dt )
487
527
if err != nil {
488
528
t .Fatalf ("Marshalling failed: %s" , err .Error ())
0 commit comments