redict/tests/unit/moduleapi/basics.tcl
Meir Shpilraien (Spielrein) eb6accad40
Fix crash on RM_Call inside module load (#11346)
PR #9320 introduces initialization order changes. Now cluster is initialized after modules.
This changes causes a crash if the module uses RM_Call inside the load function
on cluster mode (the code will try to access `server.cluster` which at this point is NULL).

To solve it, separate cluster initialization into 2 phases:
1. Structure initialization that happened before the modules initialization
2. Listener initialization that happened after.

Test was added to verify the fix.
2022-10-12 13:09:51 +03:00

42 lines
1.1 KiB
Tcl

set testmodule [file normalize tests/modules/basics.so]
start_server {tags {"modules"}} {
r module load $testmodule
test {test module api basics} {
r test.basics
} {ALL TESTS PASSED}
test {test rm_call auto mode} {
r hello 2
set reply [r test.rmcallautomode]
assert_equal [lindex $reply 0] f1
assert_equal [lindex $reply 1] v1
assert_equal [lindex $reply 2] f2
assert_equal [lindex $reply 3] v2
r hello 3
set reply [r test.rmcallautomode]
assert_equal [dict get $reply f1] v1
assert_equal [dict get $reply f2] v2
}
test {test get resp} {
r hello 2
set reply [r test.getresp]
assert_equal $reply 2
r hello 3
set reply [r test.getresp]
assert_equal $reply 3
}
test "Unload the module - test" {
assert_equal {OK} [r module unload test]
}
}
start_server {tags {"modules external:skip"} overrides {enable-module-command no}} {
test {module command disabled} {
assert_error "ERR *MODULE command not allowed*" {r module load $testmodule}
}
}