@@ -15,10 +15,17 @@ import (
1515 "gopkg.in/vmihailenco/msgpack.v2"
1616)
1717
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+ }
2229
2330var isDatetimeSupported = false
2431
@@ -76,10 +83,15 @@ func assertDatetimeIsEqual(t *testing.T, tuples []interface{}, tm time.Time) {
7683}
7784
7885func 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+ }
8092
8193 // Insert tuple with datetime.
82- _ , err : = conn .Insert (spaceTuple1 , []interface {}{dt , "payload" })
94+ _ , err = conn .Insert (spaceTuple1 , []interface {}{dt , "payload" })
8395 if err != nil {
8496 t .Fatalf ("Datetime insert failed: %s" , err .Error ())
8597 }
@@ -191,16 +203,27 @@ func TestDatetimeMax(t *testing.T) {
191203 conn := connectWithValidation (t )
192204 defer conn .Close ()
193205
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+ }
195211}
196212
197- func TestDatetimeMin (t * testing.T ) {
213+ func TestDatetimeTooBig (t * testing.T ) {
198214 skipIfDatetimeUnsupported (t )
199215
200216 conn := connectWithValidation (t )
201217 defer conn .Close ()
202218
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+ }
204227}
205228
206229func TestDatetimeReplace (t * testing.T ) {
@@ -214,7 +237,10 @@ func TestDatetimeReplace(t *testing.T) {
214237 t .Fatalf ("Time parse failed: %s" , err )
215238 }
216239
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+ }
218244 resp , err := conn .Replace (spaceTuple1 , []interface {}{dt , "payload" })
219245 if err != nil {
220246 t .Fatalf ("Datetime replace failed: %s" , err )
@@ -359,16 +385,24 @@ func TestCustomEncodeDecodeTuple1(t *testing.T) {
359385 conn := connectWithValidation (t )
360386 defer conn .Close ()
361387
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+ }
364398 const cid = 13
365399 const orig = "orig"
366400
367401 tuple := Tuple2 {Cid : cid ,
368402 Orig : orig ,
369403 Events : []Event {
370- {* NewDatetime ( dt1 ) , "Minsk" },
371- {* NewDatetime ( dt2 ) , "Moscow" },
404+ {* dt1 , "Minsk" },
405+ {* dt2 , "Moscow" },
372406 },
373407 }
374408 resp , err := conn .Replace (spaceTuple2 , & tuple )
@@ -405,7 +439,7 @@ func TestCustomEncodeDecodeTuple1(t *testing.T) {
405439 t .Fatalf ("Unable to convert 2 field to []interface{}" )
406440 }
407441
408- for i , tv := range []time.Time {dt1 , dt2 } {
442+ for i , tv := range []time.Time {tm1 , tm2 } {
409443 dt := events [i ].([]interface {})[1 ].(Datetime )
410444 if ! dt .ToTime ().Equal (tv ) {
411445 t .Fatalf ("%v != %v" , dt .ToTime (), tv )
@@ -463,8 +497,11 @@ func TestCustomEncodeDecodeTuple5(t *testing.T) {
463497 defer conn .Close ()
464498
465499 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 })
468505 if err != nil {
469506 t .Fatalf ("Datetime insert failed: %s" , err .Error ())
470507 }
@@ -495,7 +532,10 @@ func TestMPEncode(t *testing.T) {
495532 if err != nil {
496533 t .Fatalf ("Time (%s) parse failed: %s" , testcase .dt , err )
497534 }
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+ }
499539 buf , err := msgpack .Marshal (dt )
500540 if err != nil {
501541 t .Fatalf ("Marshalling failed: %s" , err .Error ())
0 commit comments