summaryrefslogtreecommitdiff
path: root/examples/redis-unstable/tests/unit/moduleapi/usercall.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'examples/redis-unstable/tests/unit/moduleapi/usercall.tcl')
-rw-r--r--examples/redis-unstable/tests/unit/moduleapi/usercall.tcl186
1 files changed, 0 insertions, 186 deletions
diff --git a/examples/redis-unstable/tests/unit/moduleapi/usercall.tcl b/examples/redis-unstable/tests/unit/moduleapi/usercall.tcl
deleted file mode 100644
index 16b4ff1..0000000
--- a/examples/redis-unstable/tests/unit/moduleapi/usercall.tcl
+++ /dev/null
@@ -1,186 +0,0 @@
-set testmodule [file normalize tests/modules/usercall.so]
-
-set test_script_set "#!lua
-redis.call('set','x',1)
-return 1"
-
-set test_script_get "#!lua
-redis.call('get','x')
-return 1"
-
-start_server {tags {"modules usercall external:skip"}} {
- r module load $testmodule
-
- # baseline test that module isn't doing anything weird
- test {test module check regular redis command without user/acl} {
- assert_equal [r usercall.reset_user] OK
- assert_equal [r usercall.add_to_acl "~* &* +@all -set"] OK
- assert_equal [r usercall.call_without_user set x 5] OK
- assert_equal [r usercall.reset_user] OK
- }
-
- # call with user with acl set on it, but without testing the acl
- test {test module check regular redis command with user} {
- assert_equal [r set x 5] OK
-
- assert_equal [r usercall.reset_user] OK
- assert_equal [r usercall.add_to_acl "~* &* +@all -set"] OK
- # off and sanitize-payload because module user / default value
- assert_equal [r usercall.get_acl] "off sanitize-payload ~* &* +@all -set"
-
- # doesn't fail for regular commands as just testing acl here
- assert_equal [r usercall.call_with_user_flag {} set x 10] OK
-
- assert_equal [r get x] 10
- assert_equal [r usercall.reset_user] OK
- }
-
- # call with user with acl set on it, but with testing the acl in rm_call (for cmd itself)
- test {test module check regular redis command with user and acl} {
- assert_equal [r set x 5] OK
-
- r ACL LOG RESET
- assert_equal [r usercall.reset_user] OK
- assert_equal [r usercall.add_to_acl "~* &* +@all -set"] OK
- # off and sanitize-payload because module user / default value
- assert_equal [r usercall.get_acl] "off sanitize-payload ~* &* +@all -set"
-
- # fails here as testing acl in rm call
- assert_error {*NOPERM User module_user has no permissions*} {r usercall.call_with_user_flag C set x 10}
-
- assert_equal [r usercall.call_with_user_flag C get x] 5
-
- # verify that new log entry added
- set entry [lindex [r ACL LOG] 0]
- assert_equal [dict get $entry username] {module_user}
- assert_equal [dict get $entry context] {module}
- assert_equal [dict get $entry object] {set}
- assert_equal [dict get $entry reason] {command}
- assert_match {*cmd=usercall.call_with_user_flag*} [dict get $entry client-info]
-
- assert_equal [r usercall.reset_user] OK
- }
-
- # call with user with acl set on it, but with testing the acl in rm_call (for cmd itself)
- test {test module check regular redis command with user and acl from blocked background thread} {
- assert_equal [r set x 5] OK
-
- r ACL LOG RESET
- assert_equal [r usercall.reset_user] OK
- assert_equal [r usercall.add_to_acl "~* &* +@all -set"] OK
-
- # fails here as testing acl in rm call from a background thread
- assert_error {*NOPERM User module_user has no permissions*} {r usercall.call_with_user_bg C set x 10}
-
- assert_equal [r usercall.call_with_user_bg C get x] 5
-
- # verify that new log entry added
- set entry [lindex [r ACL LOG] 0]
- assert_equal [dict get $entry username] {module_user}
- assert_equal [dict get $entry context] {module}
- assert_equal [dict get $entry object] {set}
- assert_equal [dict get $entry reason] {command}
- assert_match {*cmd=NULL*} [dict get $entry client-info]
-
- assert_equal [r usercall.reset_user] OK
- }
-
- # baseline script test, call without user on script
- test {test module check eval script without user} {
- set sha_set [r script load $test_script_set]
- set sha_get [r script load $test_script_get]
-
- assert_equal [r usercall.call_without_user evalsha $sha_set 0] 1
- assert_equal [r usercall.call_without_user evalsha $sha_get 0] 1
- }
-
- # baseline script test, call without user on script
- test {test module check eval script with user being set, but not acl testing} {
- set sha_set [r script load $test_script_set]
- set sha_get [r script load $test_script_get]
-
- assert_equal [r usercall.reset_user] OK
- assert_equal [r usercall.add_to_acl "~* &* +@all -set"] OK
- # off and sanitize-payload because module user / default value
- assert_equal [r usercall.get_acl] "off sanitize-payload ~* &* +@all -set"
-
- # passes as not checking ACL
- assert_equal [r usercall.call_with_user_flag {} evalsha $sha_set 0] 1
- assert_equal [r usercall.call_with_user_flag {} evalsha $sha_get 0] 1
- }
-
- # call with user on script (without rm_call acl check) to ensure user carries through to script execution
- # we already tested the check in rm_call above, here we are checking the script itself will enforce ACL
- test {test module check eval script with user and acl} {
- set sha_set [r script load $test_script_set]
- set sha_get [r script load $test_script_get]
-
- r ACL LOG RESET
- assert_equal [r usercall.reset_user] OK
- assert_equal [r usercall.add_to_acl "~* &* +@all -set"] OK
-
- # fails here in script, as rm_call will permit the eval call
- catch {r usercall.call_with_user_flag C evalsha $sha_set 0} e
- assert_match {*ERR ACL failure in script*} $e
-
- assert_equal [r usercall.call_with_user_flag C evalsha $sha_get 0] 1
-
- # verify that new log entry added
- set entry [lindex [r ACL LOG] 0]
- assert_equal [dict get $entry username] {module_user}
- assert_equal [dict get $entry context] {lua}
- assert_equal [dict get $entry object] {set}
- assert_equal [dict get $entry reason] {command}
- assert_match {*cmd=usercall.call_with_user_flag*} [dict get $entry client-info]
- }
-
- test {server not crashing when MONITOR is fed from spawned thread} {
- set rd [redis_deferring_client]
- $rd monitor
-
- r ACL LOG RESET
- assert_equal [r usercall.reset_user] OK
- assert_equal [r usercall.add_to_acl "~* &* +@all -set"] OK
-
- r flushdb
- r set x x
-
- # This is enough. This checks that we don't crash inside
- # updateClientMemUsageAndBucket
- assert_equal x [r usercall.call_with_user_bg C get x]
-
- $rd close
- }
-
- start_server {tags {"wait aof network external:skip"}} {
- set slave [srv 0 client]
- set slave_host [srv 0 host]
- set slave_port [srv 0 port]
- set slave_pid [srv 0 pid]
- set master [srv -1 client]
- set master_host [srv -1 host]
- set master_port [srv -1 port]
-
- $master config set appendonly yes
- $master config set appendfsync everysec
- $slave config set appendonly yes
- $slave config set appendfsync everysec
-
- test {Setup slave} {
- $slave slaveof $master_host $master_port
- wait_for_condition 50 100 {
- [s 0 master_link_status] eq {up}
- } else {
- fail "Replication not started."
- }
- }
-
- test {test module replicate only to replicas and WAITAOF} {
- $master set x 1
- assert_equal [$master waitaof 1 1 10000] {1 1}
- $master usercall.call_with_user_flag A! config set loglevel notice
- # Make sure WAITAOF doesn't hang
- assert_equal [$master waitaof 1 1 10000] {1 1}
- }
- }
-}