Skip to content

Commit

Permalink
Move TCL test unit/pubsub to Go case (#982)
Browse files Browse the repository at this point in the history
Signed-off-by: tison <wander4096@gmail.com>
  • Loading branch information
tisonkun authored Oct 13, 2022
1 parent 81d3792 commit 352dbaf
Show file tree
Hide file tree
Showing 11 changed files with 405 additions and 340 deletions.
12 changes: 3 additions & 9 deletions tests/gocase/unit/introspection/introspection_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,17 +49,11 @@ func TestIntrospection(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.WriteArgs("MONITOR"))
v, err := c.ReadLine()
require.NoError(t, err)
require.Equal(t, "+OK", v)
c.MustRead(t, "+OK")
require.NoError(t, rdb.Set(ctx, "foo", "bar", 0).Err())
require.NoError(t, rdb.Get(ctx, "foo").Err())
v, err = c.ReadLine()
require.NoError(t, err)
require.Regexp(t, ".*set.*foo.*bar.*", v)
v, err = c.ReadLine()
require.NoError(t, err)
require.Regexp(t, ".*get.*foo.*", v)
c.MustMatch(t, ".*set.*foo.*bar.*")
c.MustMatch(t, ".*get.*foo.*")
})

t.Run("CLIENT GETNAME should return NIL if name is not assigned", func(t *testing.T) {
Expand Down
16 changes: 4 additions & 12 deletions tests/gocase/unit/keyspace/keyspace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,18 +107,10 @@ func TestKeyspace(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("SET k1 xyzk\r\nGET k1\r\nPING\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Equal(t, "+OK", r)
r, err = c.ReadLine()
require.NoError(t, err)
require.Equal(t, "$4", r)
r, err = c.ReadLine()
require.NoError(t, err)
require.Equal(t, "xyzk", r)
r, err = c.ReadLine()
require.NoError(t, err)
require.Equal(t, "+PONG", r)
c.MustRead(t, "+OK")
c.MustRead(t, "$4")
c.MustRead(t, "xyzk")
c.MustRead(t, "+PONG")
})

t.Run("Non existing command", func(t *testing.T) {
Expand Down
16 changes: 4 additions & 12 deletions tests/gocase/unit/ping/ping_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,11 @@ func TestPing(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.WriteArgs("PING"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Equal(t, r, "+PONG")
c.MustRead(t, "+PONG")
require.NoError(t, c.WriteArgs("PING", "PONG"))
r, err = c.ReadLine()
require.NoError(t, err)
require.Equal(t, r, "$4")
r, err = c.ReadLine()
require.NoError(t, err)
require.Equal(t, r, "PONG")
c.MustRead(t, "$4")
c.MustRead(t, "PONG")
require.NoError(t, c.WriteArgs("ping", "hello", "redis"))
r, err = c.ReadLine()
require.NoError(t, err)
require.Equal(t, r, "-ERR wrong number of arguments")
c.MustRead(t, "-ERR wrong number of arguments")
})
}
44 changes: 11 additions & 33 deletions tests/gocase/unit/protocol/protocol_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,63 +36,49 @@ func TestProtocolNetwork(t *testing.T) {
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("\r\n"))
require.NoError(t, c.Write("*1\r\n$4\r\nPING\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Equal(t, "+PONG", r)
c.MustRead(t, "+PONG")
})

t.Run("out of range multibulk length", func(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("*20000000\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Contains(t, r, "invalid multibulk length")
c.MustMatch(t, "invalid multibulk length")
})

t.Run("wrong multibulk payload header", func(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("*3\r\n$3\r\nSET\r\n$1\r\nx\r\nfoo\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Contains(t, r, "expected '$'")
c.MustMatch(t, "expected '\\$'")
})

t.Run("negative multibulk payload length", func(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("*3\r\n$3\r\nSET\r\n$1\r\nx\r\n$-10\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Contains(t, r, "invalid bulk length")
c.MustMatch(t, "invalid bulk length")
})

t.Run("out of range multibulk payload length", func(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("*3\r\n$3\r\nSET\r\n$1\r\nx\r\n$2000000000\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Contains(t, r, "invalid bulk length")
c.MustMatch(t, "invalid bulk length")
})

t.Run("non-number multibulk payload length", func(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("*3\r\n$3\r\nSET\r\n$1\r\nx\r\n$foo\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Contains(t, r, "invalid bulk length")
c.MustMatch(t, "invalid bulk length")
})

t.Run("multibulk request not followed by bulk arguments", func(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("*1\r\nfoo\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Contains(t, r, "expected '$'")
c.MustMatch(t, "expected '\\$'")
})

t.Run("generic wrong number of args", func(t *testing.T) {
Expand All @@ -106,37 +92,29 @@ func TestProtocolNetwork(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("*-1\r\n*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$3\r\nval\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Equal(t, r, "+OK")
c.MustRead(t, "+OK")
})

t.Run("allow only LF protocol separator", func(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("set foo 123\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Equal(t, r, "+OK")
c.MustRead(t, "+OK")
})

t.Run("mix LF/CRLF protocol separator", func(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("*-1\r\nset foo 123\nget foo\r\n*3\r\n$3\r\nset\r\n$3\r\nkey\r\n$3\r\nval\r\n"))
for _, res := range []string{"+OK", "$3", "123", "+OK"} {
r, err := c.ReadLine()
require.NoError(t, err)
require.Equal(t, res, r)
c.MustRead(t, res)
}
})

t.Run("invalid LF in multi bulk protocol", func(t *testing.T) {
c := srv.NewTCPClient()
defer func() { require.NoError(t, c.Close()) }()
require.NoError(t, c.Write("*3\n$3\r\nset\r\n$3\r\nkey\r\n$3\r\nval\r\n"))
r, err := c.ReadLine()
require.NoError(t, err)
require.Contains(t, r, "invalid multibulk length")
c.MustMatch(t, "invalid multibulk length")
})
}
8 changes: 2 additions & 6 deletions tests/gocase/unit/protocol/regression_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,13 @@ func TestRegression(t *testing.T) {
v := rdb.RPush(ctx, "handle", "a")
require.EqualValues(t, 1, v.Val())
for _, res := range resList {
r, err := c.ReadLine()
require.NoError(t, err)
require.Equal(t, res, r)
c.MustRead(t, res)
}

v = rdb.RPush(ctx, "handle", "a")
require.EqualValues(t, 1, v.Val())

for _, res := range resList {
r, err := c.ReadLine()
require.NoError(t, err)
require.Equal(t, res, r)
c.MustRead(t, res)
}
}
Loading

0 comments on commit 352dbaf

Please sign in to comment.