You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kvrocks.apache.org by ti...@apache.org on 2022/09/19 09:25:17 UTC
[incubator-kvrocks] branch unstable updated: refactor: quit test (#888)
This is an automated email from the ASF dual-hosted git repository.
tison pushed a commit to branch unstable
in repository https://gitbox.apache.org/repos/asf/incubator-kvrocks.git
The following commit(s) were added to refs/heads/unstable by this push:
new d526d6a refactor: quit test (#888)
d526d6a is described below
commit d526d6a8333b71cdb87ef6892934f15c80c5645d
Author: tison <wa...@gmail.com>
AuthorDate: Mon Sep 19 17:25:11 2022 +0800
refactor: quit test (#888)
Signed-off-by: tison <wa...@gmail.com>
---
tests/gocase/unit/limits/limits_test.go | 2 +-
tests/gocase/unit/{ => quit}/quit_test.go | 69 +++++++++++++++----------------
tests/gocase/util/tcp_client.go | 19 +++++++++
3 files changed, 53 insertions(+), 37 deletions(-)
diff --git a/tests/gocase/unit/limits/limits_test.go b/tests/gocase/unit/limits/limits_test.go
index a1a8b82..f6fe6f2 100644
--- a/tests/gocase/unit/limits/limits_test.go
+++ b/tests/gocase/unit/limits/limits_test.go
@@ -44,7 +44,7 @@ func TestNetworkLimits(t *testing.T) {
for i := 0; i < 50; i++ {
c := srv.NewTCPClient()
clean = append(clean, func() { require.NoError(t, c.Close()) })
- require.NoError(t, c.Write("*1\r\n$4\r\nPING\r\n"))
+ require.NoError(t, c.WriteArgs("PING"))
r, err := c.ReadLine()
require.NoError(t, err)
if strings.Contains(r, "ERR") {
diff --git a/tests/gocase/unit/quit_test.go b/tests/gocase/unit/quit/quit_test.go
similarity index 60%
rename from tests/gocase/unit/quit_test.go
rename to tests/gocase/unit/quit/quit_test.go
index cc70e7c..c2cddf8 100644
--- a/tests/gocase/unit/quit_test.go
+++ b/tests/gocase/unit/quit/quit_test.go
@@ -25,64 +25,61 @@ import (
"testing"
"github.com/apache/incubator-kvrocks/tests/gocase/util"
- "github.com/go-redis/redis/v9"
"github.com/stretchr/testify/require"
)
-func reconnect(srv *util.KvrocksServer, rdb **redis.Client) error {
- if err := (*rdb).Close(); err != nil {
- return err
- }
- *rdb = srv.NewClient()
- return nil
-}
-
func TestPipeQuit(t *testing.T) {
srv := util.StartServer(t, map[string]string{})
defer srv.Close()
- rdb := srv.NewClient()
+
ctx := context.Background()
t.Run("QUIT returns OK", func(t *testing.T) {
- trdb := srv.NewTCPClient()
- require.NoError(t, trdb.Write("*1\r\n$4\r\nquit\r\n"))
- resQuit, errQuit := trdb.ReadLine()
- require.Equal(t, "+OK", resQuit)
- require.NoError(t, errQuit)
- require.NoError(t, trdb.Write("*1\r\n$4\r\nping\r\n"))
- resPing, errPing := trdb.ReadLine()
- require.Equal(t, "", resPing)
- require.Error(t, errPing)
- require.NoError(t, trdb.Close())
+ c := srv.NewTCPClient()
+ defer func() { require.NoError(t, c.Close()) }()
+
+ require.NoError(t, c.WriteArgs("QUIT"))
+ r, err := c.ReadLine()
+ require.NoError(t, err)
+ require.Equal(t, "+OK", r)
+
+ require.NoError(t, c.WriteArgs("PING"))
+ r, err = c.ReadLine()
+ require.EqualError(t, err, "EOF")
+ require.Empty(t, r)
})
t.Run("Pipelined commands after QUIT must not be executed", func(t *testing.T) {
- require.NoError(t, reconnect(srv, &rdb))
- pipe := rdb.Pipeline()
+ rdb1 := srv.NewClient()
+ defer func() { require.NoError(t, rdb1.Close()) }()
+ pipe := rdb1.Pipeline()
cmd1 := pipe.Do(ctx, "quit")
- cmd2 := pipe.Do(ctx, "set", "foo", "bar")
+ cmd2 := pipe.Set(ctx, "foo", "bar", 0)
_, err := pipe.Exec(ctx)
- require.Equal(t, "OK", cmd1.Val())
- require.Equal(t, nil, cmd2.Val())
require.Error(t, err)
- require.NoError(t, reconnect(srv, &rdb))
- cmd3 := rdb.Get(ctx, "foo")
+ require.Equal(t, "OK", cmd1.Val())
+ require.Empty(t, cmd2.Val())
+ require.EqualError(t, cmd2.Err(), "EOF")
+ rdb2 := srv.NewClient()
+ defer func() { require.NoError(t, rdb2.Close()) }()
+ cmd3 := rdb2.Get(ctx, "foo")
require.Equal(t, "", cmd3.Val())
})
t.Run("Pipelined commands after QUIT that exceed read buffer size", func(t *testing.T) {
- require.NoError(t, reconnect(srv, &rdb))
- pipe := rdb.Pipeline()
+ rdb1 := srv.NewClient()
+ defer func() { require.NoError(t, rdb1.Close()) }()
+ pipe := rdb1.Pipeline()
cmd1 := pipe.Do(ctx, "quit")
- cmd2 := pipe.Do(ctx, "set", "foo", strings.Repeat("x", 1024))
+ cmd2 := pipe.Set(ctx, "foo", strings.Repeat("x", 1024), 0)
_, err := pipe.Exec(ctx)
- require.Equal(t, "OK", cmd1.Val())
- require.Equal(t, nil, cmd2.Val())
require.Error(t, err)
- require.NoError(t, reconnect(srv, &rdb))
- cmd3 := rdb.Get(ctx, "foo")
+ require.Equal(t, "OK", cmd1.Val())
+ require.Empty(t, cmd2.Val())
+ require.EqualError(t, cmd2.Err(), "EOF")
+ rdb2 := srv.NewClient()
+ defer func() { require.NoError(t, rdb2.Close()) }()
+ cmd3 := rdb2.Get(ctx, "foo")
require.Equal(t, "", cmd3.Val())
})
-
- require.NoError(t, rdb.Close())
}
diff --git a/tests/gocase/util/tcp_client.go b/tests/gocase/util/tcp_client.go
index c166f3d..2a69ffe 100644
--- a/tests/gocase/util/tcp_client.go
+++ b/tests/gocase/util/tcp_client.go
@@ -21,6 +21,8 @@ package util
import (
"bufio"
+ "errors"
+ "fmt"
"net"
"strings"
)
@@ -58,3 +60,20 @@ func (c *tcpClient) Write(s string) error {
}
return c.w.Flush()
}
+
+func (c *tcpClient) WriteArgs(args ...string) error {
+ if args == nil {
+ return errors.New("args cannot be nil")
+ }
+
+ if len(args) == 0 {
+ return errors.New("args cannot be empty")
+ }
+
+ cmd := fmt.Sprintf("*%d\r\n", len(args))
+ for _, arg := range args {
+ cmd = cmd + fmt.Sprintf("$%d\r\n%s\r\n", len(arg), arg)
+ }
+
+ return c.Write(cmd)
+}