1set testmodule [file normalize tests/modules/commandfilter.so]
2
3start_server {tags {"modules"}} {
4    r module load $testmodule log-key 0
5
6    test {Command Filter handles redirected commands} {
7        r set mykey @log
8        r lrange log-key 0 -1
9    } "{set mykey @log}"
10
11    test {Command Filter can call RedisModule_CommandFilterArgDelete} {
12        r rpush mylist elem1 @delme elem2
13        r lrange mylist 0 -1
14    } {elem1 elem2}
15
16    test {Command Filter can call RedisModule_CommandFilterArgInsert} {
17        r del mylist
18        r rpush mylist elem1 @insertbefore elem2 @insertafter elem3
19        r lrange mylist 0 -1
20    } {elem1 --inserted-before-- @insertbefore elem2 @insertafter --inserted-after-- elem3}
21
22    test {Command Filter can call RedisModule_CommandFilterArgReplace} {
23        r del mylist
24        r rpush mylist elem1 @replaceme elem2
25        r lrange mylist 0 -1
26    } {elem1 --replaced-- elem2}
27
28    test {Command Filter applies on RM_Call() commands} {
29        r del log-key
30        r commandfilter.ping
31        r lrange log-key 0 -1
32    } "{ping @log}"
33
34    test {Command Filter applies on Lua redis.call()} {
35        r del log-key
36        r eval "redis.call('ping', '@log')" 0
37        r lrange log-key 0 -1
38    } "{ping @log}"
39
40    test {Command Filter applies on Lua redis.call() that calls a module} {
41        r del log-key
42        r eval "redis.call('commandfilter.ping')" 0
43        r lrange log-key 0 -1
44    } "{ping @log}"
45
46    test {Command Filter is unregistered implicitly on module unload} {
47        r del log-key
48        r module unload commandfilter
49        r set mykey @log
50        r lrange log-key 0 -1
51    } {}
52
53    r module load $testmodule log-key 0
54
55    test {Command Filter unregister works as expected} {
56        # Validate reloading succeeded
57        r del log-key
58        r set mykey @log
59        assert_equal "{set mykey @log}" [r lrange log-key 0 -1]
60
61        # Unregister
62        r commandfilter.unregister
63        r del log-key
64
65        r set mykey @log
66        r lrange log-key 0 -1
67    } {}
68
69    r module unload commandfilter
70    r module load $testmodule log-key 1
71
72    test {Command Filter REDISMODULE_CMDFILTER_NOSELF works as expected} {
73        r set mykey @log
74        assert_equal "{set mykey @log}" [r lrange log-key 0 -1]
75
76        r del log-key
77        r commandfilter.ping
78        assert_equal {} [r lrange log-key 0 -1]
79
80        r eval "redis.call('commandfilter.ping')" 0
81        assert_equal {} [r lrange log-key 0 -1]
82    }
83
84}
85