Skip to content

Commit f33346e

Browse files
authored
Improve unit tests around Hasresultset and WriteValue (#1006)
* update server tests to use constructor convention from d02e79a * unit test the nil case of Hasresultset * unit test WriteValue for OK vs Resultset * handle nil result correctly, and test nil resultset correctly * test brevity
1 parent db9b6c9 commit f33346e

File tree

4 files changed

+62
-27
lines changed

4 files changed

+62
-27
lines changed

mysql/result.go

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ func (r *Result) Close() {
3636
}
3737

3838
func (r *Result) HasResultset() bool {
39+
if r == nil {
40+
return false
41+
}
3942
if r.Resultset != nil && len(r.Resultset.Fields) > 0 {
4043
return true
4144
}

mysql/result_test.go

+16-2
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,25 @@ import (
99
func TestHasResultset_false(t *testing.T) {
1010
r := NewResultReserveResultset(0)
1111
b := r.HasResultset()
12-
require.Equal(t, false, b)
12+
require.False(t, b)
1313
}
1414

1515
func TestHasResultset_true(t *testing.T) {
1616
r := NewResultReserveResultset(1)
1717
b := r.HasResultset()
18-
require.Equal(t, true, b)
18+
require.True(t, b)
19+
}
20+
21+
// this shouldn't happen after d02e79a, but test just in case
22+
func TestHasResultset_nilset(t *testing.T) {
23+
r := NewResultReserveResultset(0)
24+
r.Resultset = nil
25+
b := r.HasResultset()
26+
require.False(t, b)
27+
}
28+
29+
func TestHasResultset_nil(t *testing.T) {
30+
var r *Result
31+
b := r.HasResultset()
32+
require.False(t, b)
1933
}

server/resp_test.go

+36-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@ func TestConnWriteOK(t *testing.T) {
1414
clientConn := &mockconn.MockConn{}
1515
conn := &Conn{Conn: packet.NewConn(clientConn)}
1616

17-
result := &mysql.Result{
18-
AffectedRows: 1,
19-
InsertId: 2,
20-
}
17+
result := mysql.NewResultReserveResultset(0)
18+
result.AffectedRows = 1
19+
result.InsertId = 2
2120

2221
// write ok with insertid and affectedrows set
2322
err := conn.writeOK(result)
@@ -229,3 +228,36 @@ func TestConnWriteFieldValues(t *testing.T) {
229228
// EOF
230229
require.Equal(t, []byte{1, 0, 0, 4, mysql.EOF_HEADER}, clientConn.WriteBuffered[43:])
231230
}
231+
232+
func TestWriteValue(t *testing.T) {
233+
clientConn := &mockconn.MockConn{MultiWrite: true}
234+
conn := &Conn{Conn: packet.NewConn(clientConn)}
235+
236+
// simple OK
237+
err := conn.WriteValue(mysql.NewResultReserveResultset(0))
238+
require.NoError(t, err)
239+
expected := []byte{3, 0, 0, 0, mysql.OK_HEADER, 0, 0}
240+
require.Equal(t, expected, clientConn.WriteBuffered)
241+
242+
// reset write buffer
243+
clientConn.WriteBuffered = []byte{}
244+
245+
// resultset with no rows
246+
rs := mysql.NewResultReserveResultset(1)
247+
rs.Fields = []*mysql.Field{{Name: []byte("a")}}
248+
err = conn.WriteValue(rs)
249+
require.NoError(t, err)
250+
expected = []byte{1, 0, 0, 1, mysql.MORE_DATE_HEADER}
251+
require.Equal(t, expected, clientConn.WriteBuffered[:5])
252+
253+
// reset write buffer
254+
clientConn.WriteBuffered = []byte{}
255+
256+
// resultset with rows
257+
rs.Fields = []*mysql.Field{{Name: []byte("a")}}
258+
rs.RowDatas = []mysql.RowData{[]byte{1, 2, 3}}
259+
err = conn.WriteValue(rs)
260+
require.NoError(t, err)
261+
expected = []byte{1, 0, 0, 5, mysql.MORE_DATE_HEADER}
262+
require.Equal(t, expected, clientConn.WriteBuffered[:5])
263+
}

server/server_test.go

+7-21
Original file line numberDiff line numberDiff line change
@@ -241,30 +241,16 @@ func (h *testHandler) handleQuery(query string, binary bool) (*mysql.Result, err
241241
if err != nil {
242242
return nil, errors.Trace(err)
243243
} else {
244-
return &mysql.Result{
245-
Status: 0,
246-
Warnings: 0,
247-
InsertId: 0,
248-
AffectedRows: 0,
249-
Resultset: r,
250-
}, nil
244+
return mysql.NewResult(r), nil
251245
}
252246
case "insert":
253-
return &mysql.Result{
254-
Status: 0,
255-
Warnings: 0,
256-
InsertId: 1,
257-
AffectedRows: 0,
258-
Resultset: nil,
259-
}, nil
247+
res := mysql.NewResultReserveResultset(0)
248+
res.InsertId = 1
249+
return res, nil
260250
case "delete", "update", "replace":
261-
return &mysql.Result{
262-
Status: 0,
263-
Warnings: 0,
264-
InsertId: 0,
265-
AffectedRows: 1,
266-
Resultset: nil,
267-
}, nil
251+
res := mysql.NewResultReserveResultset(0)
252+
res.AffectedRows = 1
253+
return res, nil
268254
default:
269255
return nil, fmt.Errorf("invalid query %s", query)
270256
}

0 commit comments

Comments
 (0)