1 start_server
{tags
{"scripting"}} {
2 test
{EVAL
- Does Lua interpreter replies to our requests?
} {
3 r
eval {return 'hello'
} 0
6 test
{EVAL
- Lua integer
-> Redis protocol type conversion
} {
7 r
eval {return 100.5} 0
10 test
{EVAL
- Lua
string -> Redis protocol type conversion
} {
11 r
eval {return 'hello world'
} 0
14 test
{EVAL
- Lua true boolean
-> Redis protocol type conversion
} {
15 r
eval {return true
} 0
18 test
{EVAL
- Lua false boolean
-> Redis protocol type conversion
} {
19 r
eval {return false
} 0
22 test
{EVAL
- Lua status code reply
-> Redis protocol type conversion
} {
23 r
eval {return {ok
='fine'
}} 0
26 test
{EVAL
- Lua
error reply
-> Redis protocol type conversion
} {
28 r
eval {return {err
='this is an
error'
}} 0
33 test
{EVAL
- Lua table
-> Redis protocol type conversion
} {
34 r
eval {return {1,2,3,'ciao'
,{1,2}}} 0
37 test
{EVAL
- Are the KEYS and ARGS arrays populated correctly?
} {
38 r
eval {return {KEYS
[1],KEYS
[2],ARGV
[1],ARGV
[2]}} 2 a b c d
41 test
{EVAL
- is Lua able to call Redis API?
} {
43 r
eval {return redis.call
('get'
,'mykey'
)} 0
46 test
{EVALSHA
- Can we call a SHA1
if already defined?
} {
47 r evalsha
9bd632c7d33e571e9f24556ebed26c3479a87129
0
50 test
{EVALSHA
- Do we get an
error on non defined SHA1?
} {
51 catch {r evalsha ffffffffffffffffffffffffffffffffffffffff
0} e
55 test
{EVAL
- Redis integer
-> Lua type conversion
} {
57 local foo
= redis.call
('
incr'
,'x'
)
58 return {type
(foo
),foo
}
62 test
{EVAL
- Redis bulk
-> Lua type conversion
} {
65 local foo
= redis.call
('get'
,'mykey'
)
66 return {type
(foo
),foo
}
70 test
{EVAL
- Redis multi bulk
-> Lua type conversion
} {
76 local foo
= redis.call
('
lrange'
,'mylist'
,0,-1)
77 return {type
(foo
),foo
[1],foo
[2],foo
[3],# foo}
81 test
{EVAL
- Redis status reply
-> Lua type conversion
} {
83 local foo
= redis.call
('
set'
,'mykey'
,'myval'
)
84 return {type
(foo
),foo
['ok'
]}
88 test
{EVAL
- Redis
error reply
-> Lua type conversion
} {
91 local foo
= redis.call
('
incr'
,'mykey'
)
92 return {type
(foo
),foo
['err'
]}
94 } {table
{ERR value is not an integer or out of range
}}
96 test
{EVAL
- Redis nil bulk reply
-> Lua type conversion
} {
99 local foo
= redis.call
('get'
,'mykey'
)
100 return {type
(foo
),foo
== false
}
104 test
{EVAL
- Is Lua affecting the currently selected DB?
} {
105 r
set mykey
"this is DB 9"
107 r
set mykey
"this is DB 10"
108 r
eval {return redis.call
('get'
,'mykey'
)} 0
111 test
{EVAL
- Is Lua seleced DB retained?
} {
112 r
eval {return redis.call
('select'
,'
9'
)} 0
116 test
{EVAL
- Script can't run more than configured
time limit
} {
117 r config
set lua-time-limit
1
121 while true do i
=i
+1 end
128 start_server
{tags
{"scripting repl"}} {
130 test
{Before the slave connects we issue an EVAL command
} {
131 r
eval {return redis.call
('
incr'
,'x'
)} 0
134 test
{Connect a slave to the main instance
} {
135 r
-1 slaveof
[srv
0 host
] [srv
0 port
]
140 test
{Now use EVALSHA against the master
} {
141 r evalsha ae3477e27be955de7e1bc9adfdca626b478d3cb2
0
146 test
{If EVALSHA was replicated as EVAL the slave should be ok
} {