
New config 'extended-redis-compatibility' (yes/no) default no * When yes: * Use "Redis" in the following error replies: - `-LOADING Redis is loading the dataset in memory` - `-BUSY Redis is busy`... - `-MISCONF Redis is configured to`... * Use `=== REDIS BUG REPORT` in the crash log delimiters (START and END). * The HELLO command returns `"server" => "redis"` and `"version" => "7.2.4"` (our Redis OSS compatibility version). * The INFO field for mode is called `"redis_mode"`. * When no: * Use "Valkey" instead of "Redis" in the mentioned errors and crash log delimiters. * The HELLO command returns `"server" => "valkey"` and the Valkey version for `"version"`. * The INFO field for mode is called `"server_mode"`. * Documentation added in valkey.conf: > Valkey is largely compatible with Redis OSS, apart from a few cases where > Redis OSS compatibility mode makes Valkey pretend to be Redis. Enable this > only if you have problems with tools or clients. This is a temporary > configuration added in Valkey 8.0 and is scheduled to have no effect in Valkey > 9.0 and be completely removed in Valkey 10.0. * A test case for the config is added. It is designed to fail if the config is not deprecated (has no effect) in Valkey 9 and deleted in Valkey 10. * Other test cases are adjusted to work regardless of this config. Fixes #274 Fixes #61 --------- Signed-off-by: Viktor Söderqvist <viktor.soderqvist@est.tech>
64 lines
3.5 KiB
Tcl
64 lines
3.5 KiB
Tcl
# This file is used to test certain crash edge cases to make sure they produce
|
|
# correct stack traces for debugging.
|
|
set testmodule [file normalize tests/modules/crash.so]
|
|
set backtrace_supported [system_backtrace_supported]
|
|
|
|
# Valgrind will complain that the process terminated by a signal, skip it.
|
|
if {!$::valgrind} {
|
|
start_server {tags {"modules"}} {
|
|
r module load $testmodule assert
|
|
test {Test module crash when info crashes with an assertion } {
|
|
catch {r 0 info infocrash}
|
|
set res [wait_for_log_messages 0 {"*=== * BUG REPORT START: Cut & paste starting from here ===*"} 0 10 1000]
|
|
set loglines [lindex $res 1]
|
|
|
|
set res [wait_for_log_messages 0 {"*ASSERTION FAILED*"} $loglines 10 1000]
|
|
set loglines [lindex $res 1]
|
|
|
|
set res [wait_for_log_messages 0 {"*RECURSIVE ASSERTION FAILED*"} $loglines 10 1000]
|
|
set loglines [lindex $res 1]
|
|
|
|
wait_for_log_messages 0 {"*=== * REPORT END. Make sure to include from START to END. ===*"} $loglines 10 1000
|
|
assert_equal 1 [count_log_message 0 "=== .* BUG REPORT END. Make sure to include from START to END. ==="]
|
|
assert_equal 2 [count_log_message 0 "ASSERTION FAILED"]
|
|
if {$backtrace_supported} {
|
|
# Make sure the crash trace is printed twice. There will be 3 instances of,
|
|
# assertCrash 1 in the first stack trace and 2 in the second.
|
|
assert_equal 3 [count_log_message 0 "assertCrash"]
|
|
}
|
|
assert_equal 1 [count_log_message 0 "RECURSIVE ASSERTION FAILED"]
|
|
assert_equal 1 [count_log_message 0 "=== .* BUG REPORT START: Cut & paste starting from here ==="]
|
|
}
|
|
}
|
|
|
|
start_server {tags {"modules"}} {
|
|
r module load $testmodule segfault
|
|
test {Test module crash when info crashes with a segfault} {
|
|
catch {r 0 info infocrash}
|
|
set res [wait_for_log_messages 0 {"*=== * BUG REPORT START: Cut & paste starting from here ===*"} 0 10 1000]
|
|
set loglines [lindex $res 1]
|
|
|
|
if {$backtrace_supported} {
|
|
set res [wait_for_log_messages 0 {"*Crashed running the instruction at*"} $loglines 10 1000]
|
|
set loglines [lindex $res 1]
|
|
|
|
set res [wait_for_log_messages 0 {"*Crashed running signal handler. Providing reduced version of recursive crash report*"} $loglines 10 1000]
|
|
set loglines [lindex $res 1]
|
|
set res [wait_for_log_messages 0 {"*Crashed running the instruction at*"} $loglines 10 1000]
|
|
set loglines [lindex $res 1]
|
|
}
|
|
|
|
wait_for_log_messages 0 {"*=== * BUG REPORT END. Make sure to include from START to END. ===*"} $loglines 10 1000
|
|
assert_equal 1 [count_log_message 0 "=== .* BUG REPORT END. Make sure to include from START to END. ==="]
|
|
assert_equal 1 [count_log_message 0 "Crashed running signal handler. Providing reduced version of recursive crash report"]
|
|
if {$backtrace_supported} {
|
|
assert_equal 2 [count_log_message 0 "Crashed running the instruction at"]
|
|
# Make sure the crash trace is printed twice. There will be 3 instances of
|
|
# modulesCollectInfo, 1 in the first stack trace and 2 in the second.
|
|
assert_equal 3 [count_log_message 0 "modulesCollectInfo"]
|
|
}
|
|
assert_equal 1 [count_log_message 0 "=== .* BUG REPORT START: Cut & paste starting from here ==="]
|
|
}
|
|
}
|
|
}
|