1
1
package datetime_test
2
2
3
3
import (
4
- _ "bytes"
4
+ "bufio"
5
+ "bytes"
5
6
"fmt"
6
7
"log"
7
8
"os"
9
+ "reflect"
8
10
"testing"
9
11
"time"
10
12
11
13
. "github.com/tarantool/go-tarantool"
12
- "github.com/tarantool/go-tarantool/datetime"
13
14
"github.com/tarantool/go-tarantool/test_helpers"
14
15
"gopkg.in/vmihailenco/msgpack.v2"
15
16
)
@@ -30,7 +31,7 @@ var space = "testDatetime"
30
31
var index = "primary"
31
32
32
33
type TupleDatetime struct {
33
- tm datetime. EventTime
34
+ tm time. Time
34
35
}
35
36
36
37
func (t * TupleDatetime ) DecodeMsgpack (d * msgpack.Decoder ) error {
@@ -47,7 +48,7 @@ func (t *TupleDatetime) DecodeMsgpack(d *msgpack.Decoder) error {
47
48
if err != nil {
48
49
return err
49
50
}
50
- t .tm = res .(datetime. EventTime )
51
+ t .tm = res .(time. Time )
51
52
52
53
return nil
53
54
}
@@ -63,79 +64,106 @@ func connectWithValidation(t *testing.T) *Connection {
63
64
return conn
64
65
}
65
66
66
- func tupleValueIsDatetime (t * testing.T , tuples []interface {}, tm datetime. EventTime ) {
67
+ func tupleValueIsDatetime (t * testing.T , tuples []interface {}, tm time. Time ) {
67
68
if tpl , ok := tuples [0 ].([]interface {}); ! ok {
68
69
t .Errorf ("Unexpected return value body" )
69
70
} else {
70
- if len (tpl ) != 1 {
71
- t .Errorf ("Unexpected return value body (tuple len)" )
72
- }
73
- if val , ok := tpl [0 ].(datetime.EventTime ); ! ok || val != tm {
71
+ /*
72
+ if len(tpl) != 1 {
73
+ t.Errorf("Unexpected return value body (tuple len = %d)", len(tpl))
74
+ }
75
+ */
76
+ if val , ok := tpl [0 ].(time.Time ); ! ok || val != tm {
77
+ fmt .Println ("Tuple: " , tpl [0 ])
78
+ fmt .Println ("Expected:" , val )
74
79
t .Errorf ("Unexpected return value body (tuple 0 field)" )
75
80
}
76
81
}
77
82
}
78
83
79
84
func TestEncodeDecode (t * testing.T ) {
80
- t .Skip ("Not imeplemented " )
85
+ t .Skip ("not implemented " )
81
86
if isDatetimeSupported == false {
82
87
t .Skip ("Skipping test for Tarantool without datetime support in msgpack" )
83
88
}
84
89
85
- //e := msgpack.NewEncoder(w io.Writer)
86
- /*
87
- r := bytes.NewReader(byteData)
88
- d := msgpack.NewDecoder(r)
89
- var tm datetime.EventTime
90
- //func (t *TupleDatetime) DecodeMsgpack(d *msgpack.Decoder) error {
91
- var err error
92
- var l int
93
- if l, err = d.DecodeSliceLen(); err != nil {
94
- t.Errorf("Datetime decode failed")
95
- }
96
- if l != 1 {
97
- t.Errorf("array len doesn't match: %d", l)
98
- }
90
+ tm , err := time .Parse (time .RFC3339 , "2006-01-02T15:04:05Z" )
91
+ if err != nil {
92
+ t .Errorf ("Parse is failed %s" , err )
93
+ }
99
94
100
- res, err := d.DecodeInterface()
101
- if err != nil {
102
- return err
103
- }
104
- t.tm = res.(datetime.EventTime)
105
- */
106
- }
95
+ // Encode
96
+ var buf bytes.Buffer
97
+ bufferWriter := bufio .NewWriter (& buf )
98
+ e := msgpack .NewEncoder (bufferWriter )
107
99
108
- func TestSelect ( t * testing. T ) {
109
- if isDatetimeSupported == false {
110
- t .Skip ( "Skipping test for Tarantool without datetime support in msgpack" )
100
+ err = e . EncodeValue ( reflect . ValueOf ( tm ))
101
+ if err != nil {
102
+ t .Errorf ( "Datetime encode failed %s" , err )
111
103
}
104
+ fmt .Printf ("%x\n " , buf )
112
105
113
- conn := connectWithValidation (t )
114
- defer conn .Close ()
106
+ // Decode
107
+ r := bufio .NewReader (& buf )
108
+ d := msgpack .NewDecoder (r )
109
+ res , err := d .DecodeInterface ()
110
+ if err != nil {
111
+ t .Errorf ("Datetime encode failed %s" , err )
112
+ }
113
+ dt := res .(time.Time )
114
+ if tm != dt {
115
+ fmt .Println ("not equal" )
116
+ }
117
+ }
118
+
119
+ func tupleRoundtrip (t * testing.T , conn * Connection , datetime string ) {
120
+ tm , err := time .Parse (time .RFC3339 , datetime )
121
+ if err != nil {
122
+ t .Errorf ("Time (%s) parse failed: %s" , datetime , err )
123
+ }
115
124
116
- tm := datetime.EventTime {0 , 0 , 0 , 0 }
125
+ // Insert tuple with datetime.
126
+ resp , err := conn .Insert (space , []interface {}{tm })
127
+ if err != nil {
128
+ t .Errorf ("Datetime insert failed: %s" , err .Error ())
129
+ }
130
+ fmt .Println (resp )
117
131
132
+ // Select tuple with datetime.
118
133
var offset uint32 = 0
119
134
var limit uint32 = 1
120
- resp , errSel : = conn .Select (space , index , offset , limit , IterEq , []interface {}{tm })
121
- if errSel != nil {
122
- t .Errorf ("Datetime select failed: %s" , errSel .Error ())
135
+ resp , err = conn .Select (space , index , offset , limit , IterEq , []interface {}{tm })
136
+ if err != nil {
137
+ t .Errorf ("Datetime select failed: %s" , err .Error ())
123
138
}
124
139
if resp == nil {
125
140
t .Errorf ("Response is nil after Select" )
126
141
}
127
142
tupleValueIsDatetime (t , resp .Data , tm )
128
143
129
- var tuples [] TupleDatetime
130
- errTyp : = conn .SelectTyped (space , index , 0 , 1 , IterEq , []interface {}{tm }, & tuples )
131
- if errTyp != nil {
132
- t .Errorf ("Failed to SelectTyped : %s" , errTyp .Error ())
144
+ // Delete tuple with datetime.
145
+ resp , err = conn .Delete (space , index , []interface {}{tm })
146
+ if err != nil {
147
+ t .Errorf ("Datetime detele failed : %s" , err .Error ())
133
148
}
134
- if len (tuples ) != 1 {
135
- t .Errorf ("Result len of SelectTyped != 1" )
149
+ fmt .Println (resp )
150
+ }
151
+
152
+ var datetimes = []string {
153
+ // "2012-01-31T23:59:59.000000010Z",
154
+ "2006-01-02T15:04:05Z" ,
155
+ }
156
+
157
+ func TestSelect (t * testing.T ) {
158
+ if isDatetimeSupported == false {
159
+ t .Skip ("Skipping test for Tarantool without datetime support in msgpack" )
136
160
}
137
- if tuples [0 ].tm != tm {
138
- t .Errorf ("Bad value loaded from SelectTyped: %d" , tuples [0 ].tm .Seconds )
161
+
162
+ conn := connectWithValidation (t )
163
+ defer conn .Close ()
164
+
165
+ for _ , dt := range datetimes {
166
+ tupleRoundtrip (t , conn , dt )
139
167
}
140
168
}
141
169
@@ -147,25 +175,34 @@ func TestReplace(t *testing.T) {
147
175
conn := connectWithValidation (t )
148
176
defer conn .Close ()
149
177
150
- tm := datetime.EventTime {15 , 0 , 0 , 0 }
178
+ tm , err := time .Parse (time .RFC3339 , "2007-01-02T15:04:05Z" )
179
+ if err != nil {
180
+ t .Errorf ("Time parse failed: %s" , err )
181
+ }
151
182
152
- respRep , errRep := conn .Replace (space , []interface {}{tm })
153
- if errRep != nil {
154
- t .Errorf ("Datetime replace failed: %s" , errRep )
183
+ resp , err := conn .Replace (space , []interface {}{tm })
184
+ if err != nil {
185
+ t .Errorf ("Datetime replace failed: %s" , err )
155
186
}
156
- if respRep == nil {
187
+ if resp == nil {
157
188
t .Errorf ("Response is nil after Replace" )
158
189
}
159
- tupleValueIsDatetime (t , respRep .Data , tm )
190
+ tupleValueIsDatetime (t , resp .Data , tm )
160
191
161
- respSel , errSel : = conn .Select (space , index , 0 , 1 , IterEq , []interface {}{tm })
162
- if errSel != nil {
163
- t .Errorf ("Datetime select failed: %s" , errSel )
192
+ resp , err = conn .Select (space , index , 0 , 1 , IterEq , []interface {}{tm })
193
+ if err != nil {
194
+ t .Errorf ("Datetime select failed: %s" , err )
164
195
}
165
- if respSel == nil {
196
+ if resp == nil {
166
197
t .Errorf ("Response is nil after Select" )
167
198
}
168
- tupleValueIsDatetime (t , respSel .Data , tm )
199
+ tupleValueIsDatetime (t , resp .Data , tm )
200
+
201
+ // Delete tuple with datetime.
202
+ resp , err = conn .Delete (space , index , []interface {}{tm })
203
+ if err != nil {
204
+ t .Errorf ("Datetime detele failed: %s" , err .Error ())
205
+ }
169
206
}
170
207
171
208
// runTestMain is a body of TestMain function
0 commit comments