Skip to content

Commit 61783a8

Browse files
committed
fix server panic on ping
1 parent 73458f1 commit 61783a8

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

server.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,8 @@ func (s *IprotoServer) WithOptions(opts *IprotoServerOptions) *IprotoServer {
5858
opts = &IprotoServerOptions{}
5959
}
6060
s.perf = opts.Perf
61-
s.getPingStatus = opts.GetPingStatus
62-
if s.getPingStatus == nil {
63-
s.getPingStatus = func(*IprotoServer) uint { return 0 }
61+
if opts.GetPingStatus != nil {
62+
s.getPingStatus = opts.GetPingStatus
6463
}
6564
return s
6665
}
@@ -229,7 +228,9 @@ READER_LOOP:
229228
code := packet.Cmd
230229
if code == PingCommand {
231230
pr := packetPool.GetWithID(packet.requestID)
232-
pr.packet.Cmd = s.getPingStatus(s)
231+
if s.getPingStatus != nil {
232+
pr.packet.Cmd = s.getPingStatus(s)
233+
}
233234
pr.packet.SchemaID = packet.SchemaID
234235

235236
select {

server_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package tarantool
2+
3+
import (
4+
"context"
5+
"net"
6+
"testing"
7+
8+
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/require"
10+
)
11+
12+
func TestServerPing(t *testing.T) {
13+
handler := func(queryContext context.Context, query Query) *Result {
14+
return &Result{}
15+
}
16+
17+
s := NewIprotoServer("1", handler, nil)
18+
19+
listenAddr := make(chan string)
20+
go func() {
21+
ln, err := net.Listen("tcp", "127.0.0.1:0")
22+
require.NoError(t, err)
23+
defer ln.Close()
24+
25+
listenAddr <- ln.Addr().String()
26+
close(listenAddr)
27+
28+
conn, err := ln.Accept()
29+
require.NoError(t, err)
30+
31+
s.Accept(conn)
32+
}()
33+
34+
addr := <-listenAddr
35+
conn, err := Connect(addr, nil)
36+
require.NoError(t, err)
37+
38+
res := conn.Exec(context.Background(), &Ping{})
39+
assert.Equal(t, res.ErrorCode, OKCommand)
40+
assert.NoError(t, res.Error)
41+
42+
conn.Close()
43+
s.Shutdown()
44+
}

0 commit comments

Comments
 (0)