Skip to content

Commit

Permalink
more EVALSHA tests
Browse files Browse the repository at this point in the history
  • Loading branch information
alicebob committed Jan 15, 2018
1 parent 2497f30 commit a082243
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 28 deletions.
4 changes: 2 additions & 2 deletions cmd_scripting.go
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,7 @@ func (m *Miniredis) cmdEval(c *server.Peer, cmd string, args []string) {
}

func (m *Miniredis) cmdEvalsha(c *server.Peer, cmd string, args []string) {
if len(args) < 1 {
if len(args) < 2 {
setDirty(c)
c.WriteError(errWrongNumber(cmd))
return
Expand All @@ -240,7 +240,7 @@ func (m *Miniredis) cmdEvalsha(c *server.Peer, cmd string, args []string) {
script, ok := m.scripts[sha]
m.Unlock()
if !ok {
c.WriteError(fmt.Sprintf("ERR Invalid SHA %v", sha))
c.WriteError(msgNoScriptFound)
return
}
m.runLuaScript(c, script, args)
Expand Down
70 changes: 44 additions & 26 deletions cmd_scripting_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,13 +119,56 @@ func TestScript(t *testing.T) {
mustFail(t, err, msgScriptUsage)
}

func TestCmdEvalReplyConversion(t *testing.T) {
func TestEvalsha(t *testing.T) {
s, err := Run()
ok(t, err)
defer s.Close()
c, err := redis.Dial("tcp", s.Addr())
ok(t, err)
defer c.Close()

script1sha := "bfbf458525d6a0b19200bfd6db3af481156b367b"
{
v, err := redis.String(c.Do("SCRIPT", "LOAD", "return {KEYS[1],ARGV[1]}"))
ok(t, err)
equals(t, script1sha, v)
}

{
b, err := redis.Strings(c.Do("EVALSHA", script1sha, 1, "key1", "key2"))
ok(t, err)
equals(t, []string{"key1", "key2"}, b)
}

_, err = c.Do("EVALSHA")
mustFail(t, err, errWrongNumber("evalsha"))

_, err = c.Do("EVALSHA", "foo")
mustFail(t, err, errWrongNumber("evalsha"))

_, err = c.Do("EVALSHA", "foo", 0)
mustFail(t, err, msgNoScriptFound)

_, err = c.Do("EVALSHA", script1sha, script1sha)
mustFail(t, err, msgInvalidInt)

_, err = c.Do("EVALSHA", script1sha, -1)
mustFail(t, err, msgNegativeKeysNumber)

_, err = c.Do("EVALSHA", script1sha, 1)
mustFail(t, err, msgInvalidKeysNumber)

_, err = c.Do("EVALSHA", "foo", 1, "bar")
mustFail(t, err, msgNoScriptFound)
}

func TestCmdEvalReplyConversion(t *testing.T) {
s, err := Run()
ok(t, err)
defer s.Close()
c, err := redis.Dial("tcp", s.Addr())
ok(t, err)
defer c.Close()

cases := map[string]struct {
script string
Expand Down Expand Up @@ -317,28 +360,3 @@ func TestCmdEvalResponse(t *testing.T) {
equals(t, []interface{}{nil, nil}, v)
}
}

func TestCmdScriptAndEvalsha(t *testing.T) {
s, err := Run()
ok(t, err)
defer s.Close()

c, err := redis.Dial("tcp", s.Addr())
ok(t, err)
defer c.Close()

// SCRIPT LOAD
{
v, err := redis.String(c.Do("SCRIPT", "LOAD", "redis.call('set', KEYS[1], ARGV[1])\n return redis.call('get', KEYS[1]) "))
ok(t, err)
equals(t, "054a13c20b748da2922a5f37f144342de21b8650", v)
}

// TEST EVALSHA
{
v, err := redis.String(c.Do("EVALSHA", "054a13c20b748da2922a5f37f144342de21b8650", 1, "test_key", "test_value"))
ok(t, err)
equals(t, "test_value", v)
}

}
1 change: 1 addition & 0 deletions redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ const (
msgInvalidKeysNumber = "ERR Number of keys can't be greater than number of args"
msgNegativeKeysNumber = "ERR Number of keys can't be negative"
msgScriptUsage = "ERR Unknown SCRIPT subcommand or wrong # of args."
msgNoScriptFound = "NOSCRIPT No matching script. Please use EVAL."
)

func errWrongNumber(cmd string) string {
Expand Down

0 comments on commit a082243

Please sign in to comment.