Skip to content

Commit a78624c

Browse files
committed
MarshalMsgpack/UnmarshalMsgpack tests [TO SQUASH]
1 parent 2e10679 commit a78624c

File tree

1 file changed

+109
-57
lines changed

1 file changed

+109
-57
lines changed

datetime/datetime_test.go

Lines changed: 109 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package datetime_test
22

33
import (
4+
"encoding/hex"
45
"fmt"
56
"log"
67
"os"
8+
"reflect"
79
"testing"
810
"time"
911

@@ -93,59 +95,62 @@ func tupleInsertSelectDelete(t *testing.T, conn *Connection, tm time.Time) {
9395
assertDatetimeIsEqual(t, resp.Data, tm)
9496
}
9597

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"},
149154
}
150155

151156
func TestDatetimeInsertSelectDelete(t *testing.T) {
@@ -156,11 +161,11 @@ func TestDatetimeInsertSelectDelete(t *testing.T) {
156161
conn := connectWithValidation(t)
157162
defer conn.Close()
158163

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)
162167
if err != nil {
163-
t.Fatalf("Time (%s) parse failed: %s", dt, err)
168+
t.Fatalf("Time (%s) parse failed: %s", testcase.dt, err)
164169
}
165170
tupleInsertSelectDelete(t, conn, tm)
166171
})
@@ -501,6 +506,53 @@ func TestCustomEncodeDecodeTuple5(t *testing.T) {
501506
}
502507
}
503508

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+
504556
// runTestMain is a body of TestMain function
505557
// (see https://pkg.go.dev/testing#hdr-Main).
506558
// Using defer + os.Exit is not works so TestMain body

0 commit comments

Comments
 (0)