Skip to content

Commit 8faed6a

Browse files
committed
[proto] add more column test case and remove WITH_DB flags from DefaultClientCapability
1 parent bc71478 commit 8faed6a

11 files changed

Lines changed: 266 additions & 18 deletions

File tree

driver/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func NewConn(username, password, address, database string) (c *conn, err error)
103103
{
104104
// auth pack
105105
payload := c.auth.Pack(
106-
c.greeting.Capability,
106+
proto.DefaultClientCapability,
107107
c.greeting.Charset,
108108
username,
109109
password,

driver/client_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ func TestClient(t *testing.T) {
3939
assert.Nil(t, err)
4040
defer client.Close()
4141

42+
// connection ID
43+
assert.Equal(t, uint32(1), client.ConnectionID())
44+
4245
th.SetCond(&Cond{Query: "SELECT2", Result: result2})
4346
rows, err := client.Query("SELECT2")
4447
assert.Nil(t, err)

driver/sql_error_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* go-mysqlstack
3+
* xelabs.org
4+
*
5+
* Copyright (c) XeLabs
6+
* GPL License
7+
*
8+
*/
9+
10+
package driver
11+
12+
import (
13+
"testing"
14+
15+
"github.com/pkg/errors"
16+
"github.com/stretchr/testify/assert"
17+
)
18+
19+
func TestSqlError(t *testing.T) {
20+
sqlerr := NewSQLError(1, "HY000", "i.am.error.man")
21+
assert.Equal(t, 1, sqlerr.Number())
22+
assert.Equal(t, "i.am.error.man (errno 1) (sqlstate HY000)", sqlerr.Error())
23+
assert.Equal(t, "HY000", sqlerr.SQLState())
24+
}
25+
26+
func TestSqlErrorFromErr(t *testing.T) {
27+
{
28+
err := errors.New("errorman")
29+
sqlerr := NewSQLErrorFromError(err)
30+
assert.NotNil(t, sqlerr)
31+
}
32+
33+
{
34+
err := errors.New("i.am.error.man (errno 1) (sqlstate HY000)")
35+
sqlerr := NewSQLErrorFromError(err)
36+
assert.NotNil(t, sqlerr)
37+
}
38+
}

packet/packets_test.go

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package packet
1111

1212
import (
1313
"testing"
14+
"time"
1415

1516
"github.com/XeLabs/go-mysqlstack/common"
1617
"github.com/XeLabs/go-mysqlstack/proto"
@@ -22,6 +23,8 @@ import (
2223

2324
func TestPacketsNext(t *testing.T) {
2425
conn := NewMockConn()
26+
defer conn.Close()
27+
2528
packets := NewPackets(conn)
2629
data := []byte{0x01, 0x02, 0x03}
2730

@@ -76,6 +79,8 @@ func TestPacketsNext(t *testing.T) {
7679

7780
func TestPacketsNextFail(t *testing.T) {
7881
conn := NewMockConn()
82+
defer conn.Close()
83+
7984
packets := NewPackets(conn)
8085
data1 := []byte{0x00, 0x00, 0x00}
8186
data2 := []byte{0x00, 0x00, 0x00, 0x00}
@@ -102,6 +107,8 @@ func TestPacketsNextFail(t *testing.T) {
102107

103108
func TestPacketsWrite(t *testing.T) {
104109
conn := NewMockConn()
110+
defer conn.Close()
111+
105112
buff := common.NewBuffer(64)
106113
packets := NewPackets(conn)
107114
data := []byte{0x01, 0x02, 0x03}
@@ -133,6 +140,8 @@ func TestPacketsWrite(t *testing.T) {
133140

134141
func TestPacketsBatchWrite(t *testing.T) {
135142
conn := NewMockConn()
143+
defer conn.Close()
144+
136145
buff := common.NewBuffer(64)
137146
batch := common.NewBuffer(64)
138147
packets := NewPackets(conn)
@@ -174,8 +183,10 @@ func TestPacketsBatchWrite(t *testing.T) {
174183
}
175184

176185
func TestPacketsWriteCommand(t *testing.T) {
177-
buff := common.NewBuffer(64)
178186
conn := NewMockConn()
187+
defer conn.Close()
188+
189+
buff := common.NewBuffer(64)
179190
packets := NewPackets(conn)
180191
cmd := 0x03
181192
data := []byte{0x01, 0x02, 0x03}
@@ -196,6 +207,8 @@ func TestPacketsWriteCommand(t *testing.T) {
196207

197208
func TestPacketsColumns(t *testing.T) {
198209
conn := NewMockConn()
210+
defer conn.Close()
211+
199212
wPackets := NewPackets(conn)
200213
rPackets := NewPackets(conn)
201214
columns := []*querypb.Field{
@@ -237,6 +250,8 @@ func TestPacketsColumns(t *testing.T) {
237250

238251
func TestPacketsColumnsOK(t *testing.T) {
239252
conn := NewMockConn()
253+
defer conn.Close()
254+
240255
wPackets := NewPackets(conn)
241256
rPackets := NewPackets(conn)
242257
{
@@ -271,6 +286,8 @@ func TestPacketsColumnsOK(t *testing.T) {
271286

272287
func TestPacketsColumnsERR(t *testing.T) {
273288
conn := NewMockConn()
289+
defer conn.Close()
290+
274291
wPackets := NewPackets(conn)
275292
rPackets := NewPackets(conn)
276293
{
@@ -298,6 +315,8 @@ func TestPacketsColumnsERR(t *testing.T) {
298315

299316
func TestPacketsColumnsError(t *testing.T) {
300317
conn := NewMockConn()
318+
defer conn.Close()
319+
301320
wPackets := NewPackets(conn)
302321
rPackets := NewPackets(conn)
303322
{
@@ -317,3 +336,29 @@ func TestPacketsColumnsError(t *testing.T) {
317336
assert.Equal(t, want, got)
318337
}
319338
}
339+
340+
func TestPacketsWriteOK(t *testing.T) {
341+
conn := NewMockConn()
342+
defer conn.Close()
343+
344+
wPackets := NewPackets(conn)
345+
err := wPackets.WriteOK(1, 1, 1, 1)
346+
assert.Nil(t, err)
347+
348+
conn.Datas()
349+
conn.LocalAddr()
350+
conn.RemoteAddr()
351+
conn.SetDeadline(time.Now())
352+
conn.SetReadDeadline(time.Now())
353+
conn.SetWriteDeadline(time.Now())
354+
355+
}
356+
357+
func TestPacketsWriteError(t *testing.T) {
358+
conn := NewMockConn()
359+
defer conn.Close()
360+
361+
wPackets := NewPackets(conn)
362+
err := wPackets.WriteERR(1, "YH000", "err:%v", "unknow")
363+
assert.Nil(t, err)
364+
}

packet/stream_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ import (
2424
// 3. read checks
2525
func TestStream(t *testing.T) {
2626
rBuf := NewMockConn()
27+
defer rBuf.Close()
28+
2729
wBuf := NewMockConn()
30+
defer wBuf.Close()
2831

2932
rStream := NewStream(rBuf, PACKET_MAX_SIZE)
3033
wStream := NewStream(wBuf, PACKET_MAX_SIZE)
@@ -69,10 +72,13 @@ func TestStream(t *testing.T) {
6972
// 2. read checks
7073
// 3. write checks
7174
func TestStreamWriteMax(t *testing.T) {
72-
pktMaxSize := 64
7375
rBuf := NewMockConn()
76+
defer rBuf.Close()
77+
7478
wBuf := NewMockConn()
79+
defer wBuf.Close()
7580

81+
pktMaxSize := 64
7682
rStream := NewStream(rBuf, pktMaxSize)
7783
wStream := NewStream(wBuf, pktMaxSize)
7884

@@ -137,10 +143,13 @@ func TestStreamWriteMax(t *testing.T) {
137143
// 2. read checks
138144
// 3. write checks
139145
func TestStreamWriteOverMax(t *testing.T) {
140-
pktMaxSize := 63
141146
rBuf := NewMockConn()
147+
defer rBuf.Close()
148+
142149
wBuf := NewMockConn()
150+
defer wBuf.Close()
143151

152+
pktMaxSize := 63
144153
rStream := NewStream(rBuf, pktMaxSize)
145154
wStream := NewStream(wBuf, pktMaxSize)
146155

proto/auth_test.go

Lines changed: 78 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@
1010
package proto
1111

1212
import (
13+
"testing"
14+
15+
"github.com/XeLabs/go-mysqlstack/common"
1316
"github.com/XeLabs/go-mysqlstack/consts"
1417
"github.com/stretchr/testify/assert"
15-
"testing"
1618
)
1719

1820
func TestAuth(t *testing.T) {
@@ -85,15 +87,16 @@ func TestAuthUnPack(t *testing.T) {
8587
want := NewAuth()
8688
want.charset = 0x02
8789
want.authResponseLen = 20
88-
want.clientFlags = DefaultCapability
90+
want.clientFlags = DefaultClientCapability
91+
want.clientFlags |= consts.CLIENT_CONNECT_WITH_DB
8992
want.authResponse = nativePassword("sbtest", DefaultSalt)
9093
want.database = "sbtest"
9194
want.user = "sbtest"
9295
want.pluginName = DefaultAuthPluginName
9396

9497
got := NewAuth()
9598
err := got.UnPack(want.Pack(
96-
DefaultCapability,
99+
DefaultClientCapability,
97100
0x02,
98101
"sbtest",
99102
"sbtest",
@@ -108,15 +111,16 @@ func TestAuthWithoutPWD(t *testing.T) {
108111
want := NewAuth()
109112
want.charset = 0x02
110113
want.authResponseLen = 1
111-
want.clientFlags = DefaultCapability
114+
want.clientFlags = DefaultClientCapability
115+
want.clientFlags |= consts.CLIENT_CONNECT_WITH_DB
112116
want.authResponse = nativePassword("", DefaultSalt)
113117
want.database = "sbtest"
114118
want.user = "sbtest"
115119
want.pluginName = DefaultAuthPluginName
116120

117121
got := NewAuth()
118122
err := got.UnPack(want.Pack(
119-
DefaultCapability,
123+
DefaultClientCapability,
120124
0x02,
121125
"sbtest",
122126
"",
@@ -131,14 +135,14 @@ func TestAuthWithoutDB(t *testing.T) {
131135
want := NewAuth()
132136
want.charset = 0x02
133137
want.authResponseLen = 20
134-
want.clientFlags = DefaultCapability &^ consts.CLIENT_CONNECT_WITH_DB
138+
want.clientFlags = DefaultClientCapability
135139
want.authResponse = nativePassword("sbtest", DefaultSalt)
136140
want.user = "sbtest"
137141
want.pluginName = DefaultAuthPluginName
138142

139143
got := NewAuth()
140144
err := got.UnPack(want.Pack(
141-
DefaultCapability,
145+
DefaultClientCapability,
142146
0x02,
143147
"sbtest",
144148
"sbtest",
@@ -153,15 +157,16 @@ func TestAuthWithoutSecure(t *testing.T) {
153157
want := NewAuth()
154158
want.charset = 0x02
155159
want.authResponseLen = 20
156-
want.clientFlags = DefaultCapability &^ consts.CLIENT_SECURE_CONNECTION &^ consts.CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA
160+
want.clientFlags = DefaultClientCapability &^ consts.CLIENT_SECURE_CONNECTION &^ consts.CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA
161+
want.clientFlags |= consts.CLIENT_CONNECT_WITH_DB
157162
want.authResponse = nativePassword("sbtest", DefaultSalt)
158163
want.user = "sbtest"
159164
want.database = "sbtest"
160165
want.pluginName = DefaultAuthPluginName
161166

162167
got := NewAuth()
163168
err := got.UnPack(want.Pack(
164-
DefaultCapability&^consts.CLIENT_SECURE_CONNECTION,
169+
DefaultClientCapability&^consts.CLIENT_SECURE_CONNECTION,
165170
0x02,
166171
"sbtest",
167172
"sbtest",
@@ -172,3 +177,67 @@ func TestAuthWithoutSecure(t *testing.T) {
172177
assert.Nil(t, err)
173178
assert.Equal(t, want, got)
174179
}
180+
181+
func TestAuthUnPackError(t *testing.T) {
182+
capabilityFlags := DefaultClientCapability
183+
capabilityFlags |= consts.CLIENT_PROTOCOL_41
184+
capabilityFlags |= consts.CLIENT_CONNECT_WITH_DB
185+
186+
// NULL
187+
f0 := func(buff *common.Buffer) {
188+
}
189+
190+
// Write clientFlags.
191+
f1 := func(buff *common.Buffer) {
192+
buff.WriteU32(capabilityFlags)
193+
}
194+
195+
// Write maxPacketSize.
196+
f2 := func(buff *common.Buffer) {
197+
buff.WriteU32(uint32(16777216))
198+
}
199+
200+
// Write charset.
201+
f3 := func(buff *common.Buffer) {
202+
buff.WriteU8(0x01)
203+
}
204+
205+
// Write 23 NULLs.
206+
f4 := func(buff *common.Buffer) {
207+
buff.WriteZero(23)
208+
}
209+
210+
// Write username.
211+
f5 := func(buff *common.Buffer) {
212+
buff.WriteString("mock")
213+
buff.WriteZero(1)
214+
}
215+
216+
// Write auth-response.
217+
f6 := func(buff *common.Buffer) {
218+
authRsp := make([]byte, 8)
219+
buff.WriteU8(8)
220+
buff.WriteBytes(authRsp)
221+
}
222+
223+
// Write database.
224+
f7 := func(buff *common.Buffer) {
225+
buff.WriteString("db1")
226+
buff.WriteZero(1)
227+
}
228+
229+
buff := common.NewBuffer(32)
230+
fs := []func(buff *common.Buffer){f0, f1, f2, f3, f4, f5, f6, f7}
231+
for i := 0; i < len(fs); i++ {
232+
auth := NewAuth()
233+
err := auth.UnPack(buff.Datas())
234+
assert.NotNil(t, err)
235+
fs[i](buff)
236+
}
237+
238+
{
239+
auth := NewAuth()
240+
err := auth.UnPack(buff.Datas())
241+
assert.NotNil(t, err)
242+
}
243+
}

proto/column.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,14 @@ func UnpackColumn(payload []byte) (field *querypb.Field, err error) {
9393
return
9494
}
9595

96-
//1 Decimals
96+
// 1 Decimals
9797
decimals, err := buff.ReadU8()
9898
if err != nil {
9999
return
100100
}
101101
field.Decimals = uint32(decimals)
102102

103-
//2 Filler and Default Values is ignored
103+
// 2 Filler and Default Values is ignored
104104

105105
return
106106
}

0 commit comments

Comments
 (0)