X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/994ed2bc552f4114b1f0c8dd3fd8aefaec6beeae..a84e7e46ec2de8bd24fcef263dcb0fa2024eb415:/tests/unit/scripting.tcl?ds=inline diff --git a/tests/unit/scripting.tcl b/tests/unit/scripting.tcl index 22b553d0..5bac5687 100644 --- a/tests/unit/scripting.tcl +++ b/tests/unit/scripting.tcl @@ -54,7 +54,7 @@ start_server {tags {"scripting"}} { test {EVAL - Redis integer -> Lua type conversion} { r eval { - local foo = redis.call('incr','x') + local foo = redis.pcall('incr','x') return {type(foo),foo} } 0 } {number 1} @@ -62,7 +62,7 @@ start_server {tags {"scripting"}} { test {EVAL - Redis bulk -> Lua type conversion} { r set mykey myval r eval { - local foo = redis.call('get','mykey') + local foo = redis.pcall('get','mykey') return {type(foo),foo} } 0 } {string myval} @@ -73,14 +73,14 @@ start_server {tags {"scripting"}} { r rpush mylist b r rpush mylist c r eval { - local foo = redis.call('lrange','mylist',0,-1) + local foo = redis.pcall('lrange','mylist',0,-1) return {type(foo),foo[1],foo[2],foo[3],# foo} } 0 } {table a b c 3} test {EVAL - Redis status reply -> Lua type conversion} { r eval { - local foo = redis.call('set','mykey','myval') + local foo = redis.pcall('set','mykey','myval') return {type(foo),foo['ok']} } 0 } {table OK} @@ -88,7 +88,7 @@ start_server {tags {"scripting"}} { test {EVAL - Redis error reply -> Lua type conversion} { r set mykey myval r eval { - local foo = redis.call('incr','mykey') + local foo = redis.pcall('incr','mykey') return {type(foo),foo['err']} } 0 } {table {ERR value is not an integer or out of range}} @@ -96,7 +96,7 @@ start_server {tags {"scripting"}} { test {EVAL - Redis nil bulk reply -> Lua type conversion} { r del mykey r eval { - local foo = redis.call('get','mykey') + local foo = redis.pcall('get','mykey') return {type(foo),foo == false} } 0 } {boolean 1} @@ -105,11 +105,11 @@ start_server {tags {"scripting"}} { r set mykey "this is DB 9" r select 10 r set mykey "this is DB 10" - r eval {return redis.call('get','mykey')} 0 + r eval {return redis.pcall('get','mykey')} 0 } {this is DB 10} test {EVAL - Is Lua seleced DB retained?} { - r eval {return redis.call('select','9')} 0 + r eval {return redis.pcall('select','9')} 0 r get mykey } {this is DB 9} @@ -123,4 +123,67 @@ start_server {tags {"scripting"}} { } e set _ $e } {*execution time*} + + test {EVAL - Scripts can't run certain commands} { + set e {} + catch {r eval {return redis.pcall('spop','x')} 0} e + set e + } {*not allowed*} + + test {EVAL - Scripts can't run certain commands} { + set e {} + catch { + r eval "redis.pcall('randomkey'); return redis.pcall('set','x','ciao')" 0 + } e + set e + } {*not allowed after*} + + test {EVAL - redis.call variant raises a Lua error on Redis cmd error (1)} { + set e {} + catch { + r eval "redis.call('nosuchcommand')" 0 + } e + set e + } {*Unknown Redis*} + + test {EVAL - redis.call variant raises a Lua error on Redis cmd error (1)} { + set e {} + catch { + r eval "redis.call('get','a','b','c')" 0 + } e + set e + } {*number of args*} + + test {EVAL - redis.call variant raises a Lua error on Redis cmd error (1)} { + set e {} + r set foo bar + catch { + r eval "redis.call('lpush','foo','val')" 0 + } e + set e + } {*against a key*} +} + +start_server {tags {"scripting repl"}} { + start_server {} { + test {Before the slave connects we issue an EVAL command} { + r eval {return redis.call('incr','x')} 0 + } {1} + + test {Connect a slave to the main instance} { + r -1 slaveof [srv 0 host] [srv 0 port] + after 1000 + s -1 role + } {slave} + + test {Now use EVALSHA against the master} { + r evalsha ae3477e27be955de7e1bc9adfdca626b478d3cb2 0 + } {2} + + if {$::valgrind} {after 2000} else {after 100} + + test {If EVALSHA was replicated as EVAL the slave should be ok} { + r -1 get x + } {2} + } }