1
1
package datetime_test
2
2
3
3
import (
4
+ "encoding/hex"
4
5
"fmt"
5
6
"log"
6
7
"os"
8
+ "reflect"
7
9
"testing"
8
10
"time"
9
11
@@ -93,59 +95,62 @@ func tupleInsertSelectDelete(t *testing.T, conn *Connection, tm time.Time) {
93
95
assertDatetimeIsEqual (t , resp .Data , tm )
94
96
}
95
97
96
- var datetimes = []string {
97
- "2012-01-31T23:59:59.000000010Z" ,
98
- "1970-01-01T00:00:00.000000010Z" ,
99
- "2010-08-12T11:39:14Z" ,
100
- "1984-03-24T18:04:05Z" ,
101
- "2010-01-12T00:00:00Z" ,
102
- "1970-01-01T00:00:00Z" ,
103
- "1970-01-01T00:00:00.123456789Z" ,
104
- "1970-01-01T00:00:00.12345678Z" ,
105
- "1970-01-01T00:00:00.1234567Z" ,
106
- "1970-01-01T00:00:00.123456Z" ,
107
- "1970-01-01T00:00:00.12345Z" ,
108
- "1970-01-01T00:00:00.1234Z" ,
109
- "1970-01-01T00:00:00.123Z" ,
110
- "1970-01-01T00:00:00.12Z" ,
111
- "1970-01-01T00:00:00.1Z" ,
112
- "1970-01-01T00:00:00.01Z" ,
113
- "1970-01-01T00:00:00.001Z" ,
114
- "1970-01-01T00:00:00.0001Z" ,
115
- "1970-01-01T00:00:00.00001Z" ,
116
- "1970-01-01T00:00:00.000001Z" ,
117
- "1970-01-01T00:00:00.0000001Z" ,
118
- "1970-01-01T00:00:00.00000001Z" ,
119
- "1970-01-01T00:00:00.000000001Z" ,
120
- "1970-01-01T00:00:00.000000009Z" ,
121
- "1970-01-01T00:00:00.00000009Z" ,
122
- "1970-01-01T00:00:00.0000009Z" ,
123
- "1970-01-01T00:00:00.000009Z" ,
124
- "1970-01-01T00:00:00.00009Z" ,
125
- "1970-01-01T00:00:00.0009Z" ,
126
- "1970-01-01T00:00:00.009Z" ,
127
- "1970-01-01T00:00:00.09Z" ,
128
- "1970-01-01T00:00:00.9Z" ,
129
- "1970-01-01T00:00:00.99Z" ,
130
- "1970-01-01T00:00:00.999Z" ,
131
- "1970-01-01T00:00:00.9999Z" ,
132
- "1970-01-01T00:00:00.99999Z" ,
133
- "1970-01-01T00:00:00.999999Z" ,
134
- "1970-01-01T00:00:00.9999999Z" ,
135
- "1970-01-01T00:00:00.99999999Z" ,
136
- "1970-01-01T00:00:00.999999999Z" ,
137
- "1970-01-01T00:00:00.0Z" ,
138
- "1970-01-01T00:00:00.00Z" ,
139
- "1970-01-01T00:00:00.000Z" ,
140
- "1970-01-01T00:00:00.0000Z" ,
141
- "1970-01-01T00:00:00.00000Z" ,
142
- "1970-01-01T00:00:00.000000Z" ,
143
- "1970-01-01T00:00:00.0000000Z" ,
144
- "1970-01-01T00:00:00.00000000Z" ,
145
- "1970-01-01T00:00:00.000000000Z" ,
146
- "1973-11-29T21:33:09Z" ,
147
- "2013-10-28T17:51:56Z" ,
148
- "9999-12-31T23:59:59Z" ,
98
+ var datetimeSample = []struct {
99
+ dt string
100
+ mpBuf string // MessagePack buffer.
101
+ }{
102
+ {"2012-01-31T23:59:59.000000010Z" , "d8047f80284f000000000a00000000001900" },
103
+ {"1970-01-01T00:00:00.000000010Z" , "d80400000000000000000a00000000001900" },
104
+ {"2010-08-12T11:39:14Z" , "d80462dd634c000000000000000000001900" },
105
+ {"1984-03-24T18:04:05Z" , "d8041530c31a000000000000000000001900" },
106
+ {"2010-01-12T00:00:00Z" , "d80480bb4b4b000000000000000000001900" },
107
+ {"1970-01-01T00:00:00Z" , "d80400000000000000000000000000001900" },
108
+ {"1970-01-01T00:00:00.123456789Z" , "d804000000000000000015cd5b0700001900" },
109
+ {"1970-01-01T00:00:00.12345678Z" , "d80400000000000000000ccd5b0700001900" },
110
+ {"1970-01-01T00:00:00.1234567Z" , "d8040000000000000000bccc5b0700001900" },
111
+ {"1970-01-01T00:00:00.123456Z" , "d804000000000000000000ca5b0700001900" },
112
+ {"1970-01-01T00:00:00.12345Z" , "d804000000000000000090b25b0700001900" },
113
+ {"1970-01-01T00:00:00.1234Z" , "d804000000000000000040ef5a0700001900" },
114
+ {"1970-01-01T00:00:00.123Z" , "d8040000000000000000c0d4540700001900" },
115
+ {"1970-01-01T00:00:00.12Z" , "d8040000000000000000000e270700001900" },
116
+ {"1970-01-01T00:00:00.1Z" , "d804000000000000000000e1f50500001900" },
117
+ {"1970-01-01T00:00:00.01Z" , "d80400000000000000008096980000001900" },
118
+ {"1970-01-01T00:00:00.001Z" , "d804000000000000000040420f0000001900" },
119
+ {"1970-01-01T00:00:00.0001Z" , "d8040000000000000000a086010000001900" },
120
+ {"1970-01-01T00:00:00.00001Z" , "d80400000000000000001027000000001900" },
121
+ {"1970-01-01T00:00:00.000001Z" , "d8040000000000000000e803000000001900" },
122
+ {"1970-01-01T00:00:00.0000001Z" , "d80400000000000000006400000000001900" },
123
+ {"1970-01-01T00:00:00.00000001Z" , "d80400000000000000000a00000000001900" },
124
+ {"1970-01-01T00:00:00.000000001Z" , "d80400000000000000000100000000001900" },
125
+ {"1970-01-01T00:00:00.000000009Z" , "d80400000000000000000900000000001900" },
126
+ {"1970-01-01T00:00:00.00000009Z" , "d80400000000000000005a00000000001900" },
127
+ {"1970-01-01T00:00:00.0000009Z" , "d80400000000000000008403000000001900" },
128
+ {"1970-01-01T00:00:00.000009Z" , "d18446744073709551614" },
129
+ {"1970-01-01T00:00:00.00009Z" , "d8040000000000000000905f010000001900" },
130
+ {"1970-01-01T00:00:00.0009Z" , "d8040000000000000000a0bb0d0000001900" },
131
+ {"1970-01-01T00:00:00.009Z" , "d80400000000000000004054890000001900" },
132
+ {"1970-01-01T00:00:00.09Z" , "d8040000000000000000804a5d0500001900" },
133
+ {"1970-01-01T00:00:00.9Z" , "d804000000000000000000e9a43500001900" },
134
+ {"1970-01-01T00:00:00.99Z" , "d80400000000000000008033023b00001900" },
135
+ {"1970-01-01T00:00:00.999Z" , "d8040000000000000000c0878b3b00001900" },
136
+ {"1970-01-01T00:00:00.9999Z" , "d80400000000000000006043993b00001900" },
137
+ {"1970-01-01T00:00:00.99999Z" , "d8040000000000000000f0a29a3b00001900" },
138
+ {"1970-01-01T00:00:00.999999Z" , "d804000000000000000018c69a3b00001900" },
139
+ {"1970-01-01T00:00:00.9999999Z" , "d80400000000000000009cc99a3b00001900" },
140
+ {"1970-01-01T00:00:00.99999999Z" , "d8040000000000000000f6c99a3b00001900" },
141
+ {"1970-01-01T00:00:00.999999999Z" , "d8040000000000000000ffc99a3b00001900" },
142
+ {"1970-01-01T00:00:00.0Z" , "d80400000000000000000000000000001900" },
143
+ {"1970-01-01T00:00:00.00Z" , "d80400000000000000000000000000001900" },
144
+ {"1970-01-01T00:00:00.000Z" , "d80400000000000000000000000000001900" },
145
+ {"1970-01-01T00:00:00.0000Z" , "d80400000000000000000000000000001900" },
146
+ {"1970-01-01T00:00:00.00000Z" , "d80400000000000000000000000000001900" },
147
+ {"1970-01-01T00:00:00.000000Z" , "d80400000000000000000000000000001900" },
148
+ {"1970-01-01T00:00:00.0000000Z" , "d80400000000000000000000000000001900" },
149
+ {"1970-01-01T00:00:00.00000000Z" , "d80400000000000000000000000000001900" },
150
+ {"1970-01-01T00:00:00.000000000Z" , "d80400000000000000000000000000001900" },
151
+ {"1973-11-29T21:33:09Z" , "d80415cd5b07000000000000000000001900" },
152
+ {"2013-10-28T17:51:56Z" , "d8043ca46e52000000000000000000001900" },
153
+ {"9999-12-31T23:59:59Z" , "d8047f41f4ff3a0000000000000000001900" },
149
154
}
150
155
151
156
func TestDatetimeInsertSelectDelete (t * testing.T ) {
@@ -156,11 +161,11 @@ func TestDatetimeInsertSelectDelete(t *testing.T) {
156
161
conn := connectWithValidation (t )
157
162
defer conn .Close ()
158
163
159
- for _ , dt := range datetimes {
160
- t .Run (dt , func (t * testing.T ) {
161
- tm , err := time .Parse (time .RFC3339 , dt )
164
+ for _ , testcase := range datetimeSample {
165
+ t .Run (testcase . dt , func (t * testing.T ) {
166
+ tm , err := time .Parse (time .RFC3339 , testcase . dt )
162
167
if err != nil {
163
- t .Fatalf ("Time (%s) parse failed: %s" , dt , err )
168
+ t .Fatalf ("Time (%s) parse failed: %s" , testcase . dt , err )
164
169
}
165
170
tupleInsertSelectDelete (t , conn , tm )
166
171
})
@@ -501,6 +506,53 @@ func TestCustomEncodeDecodeTuple5(t *testing.T) {
501
506
}
502
507
}
503
508
509
+ func TestMPEncode (t * testing.T ) {
510
+ t .Skip ("Broken" )
511
+ for _ , testcase := range datetimeSample {
512
+ t .Run (testcase .dt , func (t * testing.T ) {
513
+ tm , err := time .Parse (time .RFC3339 , testcase .dt )
514
+ if err != nil {
515
+ t .Fatalf ("Time (%s) parse failed: %s" , testcase .dt , err )
516
+ }
517
+ dt := NewDateTime (tm )
518
+ buf , err := msgpack .Marshal (& dt )
519
+ if err != nil {
520
+ t .Fatalf ("Marshalling failed: %s" , err .Error ())
521
+ }
522
+ refBuf , _ := hex .DecodeString (testcase .mpBuf )
523
+ if reflect .DeepEqual (buf , refBuf ) != true {
524
+ fmt .Println ("Buffer: " , refBuf )
525
+ fmt .Println ("Expected:" , buf )
526
+ t .Fatalf ("Failed to encode datetime '%s'" , testcase .dt )
527
+ }
528
+ })
529
+ }
530
+ }
531
+
532
+ func TestMPDecode (t * testing.T ) {
533
+ t .Skip ("Broken" )
534
+ for _ , testcase := range datetimeSample {
535
+ t .Run (testcase .dt , func (t * testing.T ) {
536
+ tm , err := time .Parse (time .RFC3339 , testcase .dt )
537
+ if err != nil {
538
+ t .Fatalf ("Time (%s) parse failed: %s" , testcase .dt , err )
539
+ }
540
+ buf , _ := hex .DecodeString (testcase .mpBuf )
541
+ var v interface {}
542
+ err = msgpack .Unmarshal (buf , & v )
543
+ if err != nil {
544
+ t .Fatalf ("Unmarshalling failed: %s" , err .Error ())
545
+ }
546
+ tt := v .(DateTime )
547
+ if ! tm .Equal (tt .ToTime ()) {
548
+ fmt .Println ("Datetime:" , testcase .dt )
549
+ fmt .Println ("Expected:" , tt .ToTime ())
550
+ t .Fatalf ("Failed to decode datetime buf '%s'" , testcase .mpBuf )
551
+ }
552
+ })
553
+ }
554
+ }
555
+
504
556
// runTestMain is a body of TestMain function
505
557
// (see https://pkg.go.dev/testing#hdr-Main).
506
558
// Using defer + os.Exit is not works so TestMain body
0 commit comments