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)
+}