@@ -15,10 +15,22 @@ 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 lesserBoundaryTimes = []time.Time {
19
+ time .Date (- 5879610 , 06 , 22 , 0 , 0 , 1 , 0 , time .UTC ),
20
+ time .Date (- 5879610 , 06 , 22 , 0 , 0 , 0 , 1 , time .UTC ),
21
+ time .Date (5879611 , 07 , 10 , 23 , 59 , 59 , 0 , time .UTC ),
22
+ time .Date (5879611 , 07 , 10 , 23 , 59 , 59 , 999999999 , time .UTC ),
23
+ }
24
+
25
+ var boundaryTimes = []time.Time {
26
+ time .Date (- 5879610 , 06 , 22 , 0 , 0 , 0 , 0 , time .UTC ),
27
+ time .Date (5879611 , 07 , 11 , 0 , 0 , 0 , 999999999 , time .UTC ),
28
+ }
29
+
30
+ var greaterBoundaryTimes = []time.Time {
31
+ time .Date (- 5879610 , 06 , 21 , 23 , 59 , 59 , 999999999 , time .UTC ),
32
+ time .Date (5879611 , 07 , 11 , 0 , 0 , 1 , 0 , time .UTC ),
33
+ }
22
34
23
35
var isDatetimeSupported = false
24
36
@@ -63,10 +75,15 @@ func assertDatetimeIsEqual(t *testing.T, tuples []interface{}, tm time.Time) {
63
75
}
64
76
65
77
func tupleInsertSelectDelete (t * testing.T , conn * Connection , tm time.Time ) {
66
- dt := NewDatetime (tm )
78
+ t .Helper ()
79
+
80
+ dt , err := NewDatetime (tm )
81
+ if err != nil {
82
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
83
+ }
67
84
68
85
// Insert tuple with datetime.
69
- _ , err : = conn .Insert (spaceTuple1 , []interface {}{dt , "payload" })
86
+ _ , err = conn .Insert (spaceTuple1 , []interface {}{dt , "payload" })
70
87
if err != nil {
71
88
t .Fatalf ("Datetime insert failed: %s" , err .Error ())
72
89
}
@@ -172,22 +189,30 @@ func TestDatetimeInsertSelectDelete(t *testing.T) {
172
189
// time.Parse() could not parse formatted string with datetime where year is
173
190
// bigger than 9999. That's why testcase with maximum datetime value represented
174
191
// as a separate testcase. Testcase with minimal value added for consistency.
175
- func TestDatetimeMax (t * testing.T ) {
192
+ func TestDatetimeBoundaryRange (t * testing.T ) {
176
193
skipIfDatetimeUnsupported (t )
177
194
178
195
conn := test_helpers .ConnectWithValidation (t , server , opts )
179
196
defer conn .Close ()
180
197
181
- tupleInsertSelectDelete (t , conn , maxTime )
198
+ for _ , tm := range append (lesserBoundaryTimes , boundaryTimes ... ) {
199
+ t .Run (tm .String (), func (t * testing.T ) {
200
+ tupleInsertSelectDelete (t , conn , tm )
201
+ })
202
+ }
182
203
}
183
204
184
- func TestDatetimeMin (t * testing.T ) {
205
+ func TestDatetimeOutOfRange (t * testing.T ) {
185
206
skipIfDatetimeUnsupported (t )
186
207
187
- conn := test_helpers .ConnectWithValidation (t , server , opts )
188
- defer conn .Close ()
189
-
190
- tupleInsertSelectDelete (t , conn , minTime )
208
+ for _ , tm := range greaterBoundaryTimes {
209
+ t .Run (tm .String (), func (t * testing.T ) {
210
+ _ , err := NewDatetime (tm )
211
+ if err == nil {
212
+ t .Errorf ("Time %s should be unsupported!" , tm )
213
+ }
214
+ })
215
+ }
191
216
}
192
217
193
218
func TestDatetimeReplace (t * testing.T ) {
@@ -201,7 +226,10 @@ func TestDatetimeReplace(t *testing.T) {
201
226
t .Fatalf ("Time parse failed: %s" , err )
202
227
}
203
228
204
- dt := NewDatetime (tm )
229
+ dt , err := NewDatetime (tm )
230
+ if err != nil {
231
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
232
+ }
205
233
resp , err := conn .Replace (spaceTuple1 , []interface {}{dt , "payload" })
206
234
if err != nil {
207
235
t .Fatalf ("Datetime replace failed: %s" , err )
@@ -346,16 +374,24 @@ func TestCustomEncodeDecodeTuple1(t *testing.T) {
346
374
conn := test_helpers .ConnectWithValidation (t , server , opts )
347
375
defer conn .Close ()
348
376
349
- dt1 , _ := time .Parse (time .RFC3339 , "2010-05-24T17:51:56.000000009Z" )
350
- dt2 , _ := time .Parse (time .RFC3339 , "2022-05-24T17:51:56.000000009Z" )
377
+ tm1 , _ := time .Parse (time .RFC3339 , "2010-05-24T17:51:56.000000009Z" )
378
+ tm2 , _ := time .Parse (time .RFC3339 , "2022-05-24T17:51:56.000000009Z" )
379
+ dt1 , err := NewDatetime (tm1 )
380
+ if err != nil {
381
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm1 , err )
382
+ }
383
+ dt2 , err := NewDatetime (tm2 )
384
+ if err != nil {
385
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm2 , err )
386
+ }
351
387
const cid = 13
352
388
const orig = "orig"
353
389
354
390
tuple := Tuple2 {Cid : cid ,
355
391
Orig : orig ,
356
392
Events : []Event {
357
- {* NewDatetime ( dt1 ) , "Minsk" },
358
- {* NewDatetime ( dt2 ) , "Moscow" },
393
+ {* dt1 , "Minsk" },
394
+ {* dt2 , "Moscow" },
359
395
},
360
396
}
361
397
resp , err := conn .Replace (spaceTuple2 , & tuple )
@@ -392,7 +428,7 @@ func TestCustomEncodeDecodeTuple1(t *testing.T) {
392
428
t .Fatalf ("Unable to convert 2 field to []interface{}" )
393
429
}
394
430
395
- for i , tv := range []time.Time {dt1 , dt2 } {
431
+ for i , tv := range []time.Time {tm1 , tm2 } {
396
432
dt := events [i ].([]interface {})[1 ].(Datetime )
397
433
if ! dt .ToTime ().Equal (tv ) {
398
434
t .Fatalf ("%v != %v" , dt .ToTime (), tv )
@@ -450,8 +486,11 @@ func TestCustomEncodeDecodeTuple5(t *testing.T) {
450
486
defer conn .Close ()
451
487
452
488
tm := time .Unix (500 , 1000 )
453
- dt := NewDatetime (tm )
454
- _ , err := conn .Insert (spaceTuple1 , []interface {}{dt })
489
+ dt , err := NewDatetime (tm )
490
+ if err != nil {
491
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
492
+ }
493
+ _ , err = conn .Insert (spaceTuple1 , []interface {}{dt })
455
494
if err != nil {
456
495
t .Fatalf ("Datetime insert failed: %s" , err .Error ())
457
496
}
@@ -482,7 +521,10 @@ func TestMPEncode(t *testing.T) {
482
521
if err != nil {
483
522
t .Fatalf ("Time (%s) parse failed: %s" , testcase .dt , err )
484
523
}
485
- dt := NewDatetime (tm )
524
+ dt , err := NewDatetime (tm )
525
+ if err != nil {
526
+ t .Fatalf ("Unable to create Datetime from %s: %s" , tm , err )
527
+ }
486
528
buf , err := msgpack .Marshal (dt )
487
529
if err != nil {
488
530
t .Fatalf ("Marshalling failed: %s" , err .Error ())
0 commit comments