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