redict/tests/unit/moduleapi/timer.tcl
Binbin 23325c135f
sub-command support for ACL CAT and COMMAND LIST. redisCommand always stores fullname (#10127)
Summary of changes:
1. Rename `redisCommand->name` to `redisCommand->declared_name`, it is a
  const char * for native commands and SDS for module commands.
2. Store the [sub]command fullname in `redisCommand->fullname` (sds).
3. List subcommands in `ACL CAT`
4. List subcommands in `COMMAND LIST`
5. `moduleUnregisterCommands` now will also free the module subcommands.
6. RM_GetCurrentCommandName returns full command name

Other changes:
1. Add `addReplyErrorArity` and `addReplyErrorExpireTime`
2. Remove `getFullCommandName` function that now is useless.
3. Some cleanups about `fullname` since now it is SDS.
4. Delete `populateSingleCommand` function from server.h that is useless.
5. Added tests to cover this change.
6. Add some module unload tests and fix the leaks
7. Make error messages uniform, make sure they always contain the full command
  name and that it's quoted.
7. Fixes some typos

see the history in #9504, fixes #10124

Co-authored-by: Oran Agra <oran@redislabs.com>
Co-authored-by: guybe7 <guy.benoish@redislabs.com>
2022-01-23 10:05:06 +02:00

62 lines
1.6 KiB
Tcl

set testmodule [file normalize tests/modules/timer.so]
start_server {tags {"modules"}} {
r module load $testmodule
test {RM_CreateTimer: a sequence of timers work} {
# We can't guarantee same-ms but we try using MULTI/EXEC
r multi
for {set i 0} {$i < 20} {incr i} {
r test.createtimer 10 timer-incr-key
}
r exec
after 500
assert_equal 20 [r get timer-incr-key]
}
test {RM_GetTimer: basic sanity} {
# Getting non-existing timer
assert_equal {} [r test.gettimer 0]
# Getting a real timer
set id [r test.createtimer 10000 timer-incr-key]
set info [r test.gettimer $id]
assert_equal "timer-incr-key" [lindex $info 0]
set remaining [lindex $info 1]
assert {$remaining < 10000 && $remaining > 1}
}
test {RM_StopTimer: basic sanity} {
r set "timer-incr-key" 0
set id [r test.createtimer 1000 timer-incr-key]
assert_equal 1 [r test.stoptimer $id]
# Wait to be sure timer doesn't execute
after 2000
assert_equal 0 [r get timer-incr-key]
# Stop non-existing timer
assert_equal 0 [r test.stoptimer $id]
}
test {Timer appears non-existing after it fires} {
r set "timer-incr-key" 0
set id [r test.createtimer 10 timer-incr-key]
# verify timer fired
after 500
assert_equal 1 [r get timer-incr-key]
# verify id does not exist
assert_equal {} [r test.gettimer $id]
}
test "Unload the module - timer" {
assert_equal {OK} [r module unload timer]
}
}