summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorItamar Haber <itamar@redislabs.com>2020-07-10 16:22:58 +0300
committerGitHub <noreply@github.com>2020-07-10 16:22:58 +0300
commita6504a16f70511c06bd5460b7cdfee6247cb09a6 (patch)
treeed0a47f5c181e8bfc046d0d9bd6b7da64cf98e0a /tests
parent91d309681cf9db8c3b8d4f2d828c336cff661efb (diff)
parentd5648d617e1ed5b9cfa575ad412bc9d450b16afd (diff)
downloadredis-conduct.tar.gz
Merge branch 'unstable' into conductconduct
Diffstat (limited to 'tests')
-rw-r--r--tests/integration/psync2.tcl6
-rw-r--r--tests/integration/rdb.tcl14
-rw-r--r--tests/integration/redis-cli.tcl115
-rw-r--r--tests/integration/replication.tcl16
-rw-r--r--tests/support/server.tcl147
-rw-r--r--tests/support/util.tcl22
-rw-r--r--tests/test_helper.tcl2
-rw-r--r--tests/unit/dump.tcl13
-rw-r--r--tests/unit/introspection.tcl28
-rw-r--r--tests/unit/moduleapi/testrdb.tcl6
-rw-r--r--tests/unit/type/incr.tcl21
11 files changed, 283 insertions, 107 deletions
diff --git a/tests/integration/psync2.tcl b/tests/integration/psync2.tcl
index 3f636463a..1b996ffd4 100644
--- a/tests/integration/psync2.tcl
+++ b/tests/integration/psync2.tcl
@@ -280,7 +280,8 @@ start_server {} {
set sync_partial_err [status $R($master_id) sync_partial_err]
catch {
$R($slave_id) config rewrite
- $R($slave_id) debug restart
+ restart_server [expr {0-$slave_id}] true
+ set R($slave_id) [srv [expr {0-$slave_id}] client]
}
# note: just waiting for connected_slaves==4 has a race condition since
# we might do the check before the master realized that the slave disconnected
@@ -328,7 +329,8 @@ start_server {} {
catch {
$R($slave_id) config rewrite
- $R($slave_id) debug restart
+ restart_server [expr {0-$slave_id}] true
+ set R($slave_id) [srv [expr {0-$slave_id}] client]
}
# Reconfigure the slave correctly again, when it's back online.
diff --git a/tests/integration/rdb.tcl b/tests/integration/rdb.tcl
index 123e9c8b6..b176bf199 100644
--- a/tests/integration/rdb.tcl
+++ b/tests/integration/rdb.tcl
@@ -137,18 +137,8 @@ test {client freed during loading} {
# 100mb of rdb, 100k keys will load in more than 1 second
r debug populate 100000 key 1000
- catch {
- r debug restart
- }
+ restart_server 0 false
- set stdout [srv 0 stdout]
- while 1 {
- # check that the new server actually started and is ready for connections
- if {[exec grep -i "Server initialized" | wc -l < $stdout] > 1} {
- break
- }
- after 10
- }
# make sure it's still loading
assert_equal [s loading] 1
@@ -180,4 +170,4 @@ test {client freed during loading} {
# no need to keep waiting for loading to complete
exec kill [srv 0 pid]
}
-} \ No newline at end of file
+}
diff --git a/tests/integration/redis-cli.tcl b/tests/integration/redis-cli.tcl
index 5d1635950..016e4915c 100644
--- a/tests/integration/redis-cli.tcl
+++ b/tests/integration/redis-cli.tcl
@@ -1,14 +1,13 @@
source tests/support/cli.tcl
start_server {tags {"cli"}} {
- proc open_cli {} {
+ proc open_cli {{opts "-n 9"}} {
set ::env(TERM) dumb
- set cmdline [rediscli [srv port] "-n 9"]
+ set cmdline [rediscli [srv port] $opts]
set fd [open "|$cmdline" "r+"]
fconfigure $fd -buffering none
fconfigure $fd -blocking false
fconfigure $fd -translation binary
- assert_equal "redis> " [read_cli $fd]
set _ $fd
}
@@ -32,11 +31,14 @@ start_server {tags {"cli"}} {
}
# Helpers to run tests in interactive mode
+
+ proc format_output {output} {
+ set _ [string trimright [regsub -all "\r" $output ""] "\n"]
+ }
+
proc run_command {fd cmd} {
write_cli $fd $cmd
- set lines [split [read_cli $fd] "\n"]
- assert_equal "redis> " [lindex $lines end]
- join [lrange $lines 0 end-1] "\n"
+ set _ [format_output [read_cli $fd]]
}
proc test_interactive_cli {name code} {
@@ -58,7 +60,7 @@ start_server {tags {"cli"}} {
proc _run_cli {opts args} {
set cmd [rediscli [srv port] [list -n 9 {*}$args]]
- foreach {key value} $args {
+ foreach {key value} $opts {
if {$key eq "pipe"} {
set cmd "sh -c \"$value | $cmd\""
}
@@ -72,7 +74,7 @@ start_server {tags {"cli"}} {
fconfigure $fd -translation binary
set resp [read $fd 1048576]
close $fd
- set _ $resp
+ set _ [format_output $resp]
}
proc run_cli {args} {
@@ -80,11 +82,11 @@ start_server {tags {"cli"}} {
}
proc run_cli_with_input_pipe {cmd args} {
- _run_cli [list pipe $cmd] {*}$args
+ _run_cli [list pipe $cmd] -x {*}$args
}
proc run_cli_with_input_file {path args} {
- _run_cli [list path $path] {*}$args
+ _run_cli [list path $path] -x {*}$args
}
proc test_nontty_cli {name code} {
@@ -101,7 +103,7 @@ start_server {tags {"cli"}} {
test_interactive_cli "INFO response should be printed raw" {
set lines [split [run_command $fd info] "\n"]
foreach line $lines {
- assert [regexp {^[a-z0-9_]+:[a-z0-9_]+} $line]
+ assert [regexp {^$|^#|^[a-z0-9_]+:.+} $line]
}
}
@@ -121,7 +123,7 @@ start_server {tags {"cli"}} {
test_interactive_cli "Multi-bulk reply" {
r rpush list foo
r rpush list bar
- assert_equal "1. \"foo\"\n2. \"bar\"" [run_command $fd "lrange list 0 -1"]
+ assert_equal "1) \"foo\"\n2) \"bar\"" [run_command $fd "lrange list 0 -1"]
}
test_interactive_cli "Parsing quotes" {
@@ -144,35 +146,35 @@ start_server {tags {"cli"}} {
}
test_tty_cli "Status reply" {
- assert_equal "OK\n" [run_cli set key bar]
+ assert_equal "OK" [run_cli set key bar]
assert_equal "bar" [r get key]
}
test_tty_cli "Integer reply" {
r del counter
- assert_equal "(integer) 1\n" [run_cli incr counter]
+ assert_equal "(integer) 1" [run_cli incr counter]
}
test_tty_cli "Bulk reply" {
r set key "tab\tnewline\n"
- assert_equal "\"tab\\tnewline\\n\"\n" [run_cli get key]
+ assert_equal "\"tab\\tnewline\\n\"" [run_cli get key]
}
test_tty_cli "Multi-bulk reply" {
r del list
r rpush list foo
r rpush list bar
- assert_equal "1. \"foo\"\n2. \"bar\"\n" [run_cli lrange list 0 -1]
+ assert_equal "1) \"foo\"\n2) \"bar\"" [run_cli lrange list 0 -1]
}
test_tty_cli "Read last argument from pipe" {
- assert_equal "OK\n" [run_cli_with_input_pipe "echo foo" set key]
+ assert_equal "OK" [run_cli_with_input_pipe "echo foo" set key]
assert_equal "foo\n" [r get key]
}
test_tty_cli "Read last argument from file" {
set tmpfile [write_tmpfile "from file"]
- assert_equal "OK\n" [run_cli_with_input_file $tmpfile set key]
+ assert_equal "OK" [run_cli_with_input_file $tmpfile set key]
assert_equal "from file" [r get key]
}
@@ -188,7 +190,7 @@ start_server {tags {"cli"}} {
test_nontty_cli "Bulk reply" {
r set key "tab\tnewline\n"
- assert_equal "tab\tnewline\n" [run_cli get key]
+ assert_equal "tab\tnewline" [run_cli get key]
}
test_nontty_cli "Multi-bulk reply" {
@@ -208,4 +210,79 @@ start_server {tags {"cli"}} {
assert_equal "OK" [run_cli_with_input_file $tmpfile set key]
assert_equal "from file" [r get key]
}
+
+ proc test_redis_cli_rdb_dump {} {
+ r flushdb
+
+ set dir [lindex [r config get dir] 1]
+
+ assert_equal "OK" [r debug populate 100000 key 1000]
+ catch {run_cli --rdb "$dir/cli.rdb"} output
+ assert_match {*Transfer finished with success*} $output
+
+ file delete "$dir/dump.rdb"
+ file rename "$dir/cli.rdb" "$dir/dump.rdb"
+
+ assert_equal "OK" [r set should-not-exist 1]
+ assert_equal "OK" [r debug reload nosave]
+ assert_equal {} [r get should-not-exist]
+ }
+
+ test_nontty_cli "Dumping an RDB" {
+ # Disk-based master
+ assert_match "OK" [r config set repl-diskless-sync no]
+ test_redis_cli_rdb_dump
+
+ # Disk-less master
+ assert_match "OK" [r config set repl-diskless-sync yes]
+ assert_match "OK" [r config set repl-diskless-sync-delay 0]
+ test_redis_cli_rdb_dump
+ }
+
+ test_nontty_cli "Connecting as a replica" {
+ set fd [open_cli "--replica"]
+ wait_for_condition 50 500 {
+ [string match {*slave0:*state=online*} [r info]]
+ } else {
+ fail "redis-cli --replica did not connect"
+ }
+
+ for {set i 0} {$i < 100} {incr i} {
+ r set test-key test-value-$i
+ }
+ r client kill type slave
+ catch {
+ assert_match {*SET*key-a*} [read_cli $fd]
+ }
+
+ close_cli $fd
+ }
+
+ test_nontty_cli "Piping raw protocol" {
+ set fd [open_cli "--pipe"]
+ fconfigure $fd -blocking true
+
+ # Create a new deferring client and overwrite its fd
+ set client [redis [srv 0 "host"] [srv 0 "port"] 1 0]
+ set ::redis::fd($::redis::id) $fd
+ $client select 9
+
+ r del test-counter
+ for {set i 0} {$i < 10000} {incr i} {
+ $client incr test-counter
+ $client set large-key [string repeat "x" 20000]
+ }
+
+ for {set i 0} {$i < 1000} {incr i} {
+ $client set very-large-key [string repeat "x" 512000]
+ }
+
+ close $fd write
+ set output [read_cli $fd]
+
+ assert_equal {10000} [r get test-counter]
+ assert_match {*All data transferred*errors: 0*replies: 21001*} $output
+
+ close_cli $fd
+ }
}
diff --git a/tests/integration/replication.tcl b/tests/integration/replication.tcl
index 7c03c4bc6..d47ec4fe4 100644
--- a/tests/integration/replication.tcl
+++ b/tests/integration/replication.tcl
@@ -430,6 +430,7 @@ test {diskless loading short read} {
}
# Start the replication process...
+ set loglines [count_log_lines -1]
$master config set repl-diskless-sync-delay 0
$replica replicaof $master_host $master_port
@@ -439,7 +440,7 @@ test {diskless loading short read} {
for {set i 0} {$i < $attempts} {incr i} {
# wait for the replica to start reading the rdb
# using the log file since the replica only responds to INFO once in 2mb
- wait_for_log_message -1 "*Loading DB in memory*" 5 2000 1
+ wait_for_log_message -1 "*Loading DB in memory*" $loglines 2000 1
# add some additional random sleep so that we kill the master on a different place each time
after [expr {int(rand()*100)}]
@@ -448,7 +449,7 @@ test {diskless loading short read} {
set killed [$master client kill type replica]
if {[catch {
- set res [wait_for_log_message -1 "*Internal error in RDB*" 5 100 10]
+ set res [wait_for_log_message -1 "*Internal error in RDB*" $loglines 100 10]
if {$::verbose} {
puts $res
}
@@ -461,6 +462,7 @@ test {diskless loading short read} {
$master config set repl-backlog-size [expr {16384 + $i}]
}
# wait for loading to stop (fail)
+ set loglines [count_log_lines -1]
wait_for_condition 100 10 {
[s -1 loading] eq 0
} else {
@@ -535,6 +537,7 @@ start_server {tags {"repl"}} {
# start replication
# it's enough for just one replica to be slow, and have it's write handler enabled
# so that the whole rdb generation process is bound to that
+ set loglines [count_log_lines -1]
[lindex $replicas 0] config set repl-diskless-load swapdb
[lindex $replicas 0] config set key-load-delay 100
[lindex $replicas 0] replicaof $master_host $master_port
@@ -542,7 +545,7 @@ start_server {tags {"repl"}} {
# wait for the replicas to start reading the rdb
# using the log file since the replica only responds to INFO once in 2mb
- wait_for_log_message -1 "*Loading DB in memory*" 8 800 10
+ wait_for_log_message -1 "*Loading DB in memory*" $loglines 800 10
if {$measure_time} {
set master_statfile "/proc/$master_pid/stat"
@@ -558,6 +561,7 @@ start_server {tags {"repl"}} {
$master incr $all_drop
# disconnect replicas depending on the current test
+ set loglines [count_log_lines -2]
if {$all_drop == "all" || $all_drop == "fast"} {
exec kill [srv 0 pid]
set replicas_alive [lreplace $replicas_alive 1 1]
@@ -576,13 +580,13 @@ start_server {tags {"repl"}} {
# make sure we got what we were aiming for, by looking for the message in the log file
if {$all_drop == "all"} {
- wait_for_log_message -2 "*Diskless rdb transfer, last replica dropped, killing fork child*" 12 1 1
+ wait_for_log_message -2 "*Diskless rdb transfer, last replica dropped, killing fork child*" $loglines 1 1
}
if {$all_drop == "no"} {
- wait_for_log_message -2 "*Diskless rdb transfer, done reading from pipe, 2 replicas still up*" 12 1 1
+ wait_for_log_message -2 "*Diskless rdb transfer, done reading from pipe, 2 replicas still up*" $loglines 1 1
}
if {$all_drop == "slow" || $all_drop == "fast"} {
- wait_for_log_message -2 "*Diskless rdb transfer, done reading from pipe, 1 replicas still up*" 12 1 1
+ wait_for_log_message -2 "*Diskless rdb transfer, done reading from pipe, 1 replicas still up*" $loglines 1 1
}
# make sure we don't have a busy loop going thought epoll_wait
diff --git a/tests/support/server.tcl b/tests/support/server.tcl
index 146ebc72c..ea7d0b13c 100644
--- a/tests/support/server.tcl
+++ b/tests/support/server.tcl
@@ -17,7 +17,14 @@ proc check_valgrind_errors stderr {
set buf [read $fd]
close $fd
+ # look for stack trace and other errors, or the absense of a leak free summary
if {[regexp -- { at 0x} $buf] ||
+ [regexp -- {Warning} $buf] ||
+ [regexp -- {Invalid} $buf] ||
+ [regexp -- {Mismatched} $buf] ||
+ [regexp -- {uninitialized} $buf] ||
+ [regexp -- {has a fishy} $buf] ||
+ [regexp -- {overlap} $buf] ||
(![regexp -- {definitely lost: 0 bytes} $buf] &&
![regexp -- {no leaks are possible} $buf])} {
send_data_packet $::test_server_fd err "Valgrind error: $buf\n"
@@ -29,7 +36,13 @@ proc kill_server config {
if {$::external} return
# nevermind if its already dead
- if {![is_alive $config]} { return }
+ if {![is_alive $config]} {
+ # Check valgrind errors if needed
+ if {$::valgrind} {
+ check_valgrind_errors [dict get $config stderr]
+ }
+ return
+ }
set pid [dict get $config pid]
# check for leaks
@@ -153,6 +166,55 @@ proc create_server_config_file {filename config} {
close $fp
}
+proc spawn_server {config_file stdout stderr} {
+ if {$::valgrind} {
+ set pid [exec valgrind --track-origins=yes --trace-children=yes --suppressions=[pwd]/src/valgrind.sup --show-reachable=no --show-possibly-lost=no --leak-check=full src/redis-server $config_file >> $stdout 2>> $stderr &]
+ } elseif ($::stack_logging) {
+ set pid [exec /usr/bin/env MallocStackLogging=1 MallocLogFile=/tmp/malloc_log.txt src/redis-server $config_file >> $stdout 2>> $stderr &]
+ } else {
+ set pid [exec src/redis-server $config_file >> $stdout 2>> $stderr &]
+ }
+
+ if {$::wait_server} {
+ set msg "server started PID: $pid. press any key to continue..."
+ puts $msg
+ read stdin 1
+ }
+
+ # Tell the test server about this new instance.
+ send_data_packet $::test_server_fd server-spawned $pid
+ return $pid
+}
+
+# Wait for actual startup, return 1 if port is busy, 0 otherwise
+proc wait_server_started {config_file stdout pid} {
+ set checkperiod 100; # Milliseconds
+ set maxiter [expr {120*1000/$checkperiod}] ; # Wait up to 2 minutes.
+ set port_busy 0
+ while 1 {
+ if {[regexp -- " PID: $pid" [exec cat $stdout]]} {
+ break
+ }
+ after $checkperiod
+ incr maxiter -1
+ if {$maxiter == 0} {
+ start_server_error $config_file "No PID detected in log $stdout"
+ puts "--- LOG CONTENT ---"
+ puts [exec cat $stdout]
+ puts "-------------------"
+ break
+ }
+
+ # Check if the port is actually busy and the server failed
+ # for this reason.
+ if {[regexp {Could not create server TCP} [exec cat $stdout]]} {
+ set port_busy 1
+ break
+ }
+ }
+ return $port_busy
+}
+
proc start_server {options {code undefined}} {
# If we are running against an external server, we just push the
# host/port pair in the stack the first time
@@ -248,44 +310,10 @@ proc start_server {options {code undefined}} {
send_data_packet $::test_server_fd "server-spawning" "port $port"
- if {$::valgrind} {
- set pid [exec valgrind --track-origins=yes --suppressions=src/valgrind.sup --show-reachable=no --show-possibly-lost=no --leak-check=full src/redis-server $config_file > $stdout 2> $stderr &]
- } elseif ($::stack_logging) {
- set pid [exec /usr/bin/env MallocStackLogging=1 MallocLogFile=/tmp/malloc_log.txt src/redis-server $config_file > $stdout 2> $stderr &]
- } else {
- set pid [exec src/redis-server $config_file > $stdout 2> $stderr &]
- }
-
- # Tell the test server about this new instance.
- send_data_packet $::test_server_fd server-spawned $pid
+ set pid [spawn_server $config_file $stdout $stderr]
# check that the server actually started
- # ugly but tries to be as fast as possible...
- if {$::valgrind} {set retrynum 1000} else {set retrynum 100}
-
- # Wait for actual startup
- set checkperiod 100; # Milliseconds
- set maxiter [expr {120*1000/100}] ; # Wait up to 2 minutes.
- set port_busy 0
- while {![info exists _pid]} {
- regexp {PID:\s(\d+)} [exec cat $stdout] _ _pid
- after $checkperiod
- incr maxiter -1
- if {$maxiter == 0} {
- start_server_error $config_file "No PID detected in log $stdout"
- puts "--- LOG CONTENT ---"
- puts [exec cat $stdout]
- puts "-------------------"
- break
- }
-
- # Check if the port is actually busy and the server failed
- # for this reason.
- if {[regexp {Could not create server TCP} [exec cat $stdout]]} {
- set port_busy 1
- break
- }
- }
+ set port_busy [wait_server_started $config_file $stdout $pid]
# Sometimes we have to try a different port, even if we checked
# for availability. Other test clients may grab the port before we
@@ -302,6 +330,7 @@ proc start_server {options {code undefined}} {
continue; # Try again
}
+ if {$::valgrind} {set retrynum 1000} else {set retrynum 100}
if {$code ne "undefined"} {
set serverisup [server_is_up $::host $port $retrynum]
} else {
@@ -345,12 +374,6 @@ proc start_server {options {code undefined}} {
error_and_quit $config_file $line
}
- if {$::wait_server} {
- set msg "server started PID: [dict get $srv "pid"]. press any key to continue..."
- puts $msg
- read stdin 1
- }
-
while 1 {
# check that the server actually started and is ready for connections
if {[exec grep -i "Ready to accept" | wc -l < $stdout] > 0} {
@@ -370,6 +393,9 @@ proc start_server {options {code undefined}} {
if {[catch { uplevel 1 $code } error]} {
set backtrace $::errorInfo
+ # fetch srv back from the server list, in case it was restarted by restart_server (new PID)
+ set srv [lindex $::servers end]
+
# Kill the server without checking for leaks
dict set srv "skipleaks" 1
kill_server $srv
@@ -387,6 +413,9 @@ proc start_server {options {code undefined}} {
error $error $backtrace
}
+ # fetch srv back from the server list, in case it was restarted by restart_server (new PID)
+ set srv [lindex $::servers end]
+
# Don't do the leak check when no tests were run
if {$num_tests == $::num_tests} {
dict set srv "skipleaks" 1
@@ -402,3 +431,35 @@ proc start_server {options {code undefined}} {
set _ $srv
}
}
+
+proc restart_server {level wait_ready} {
+ set srv [lindex $::servers end+$level]
+ kill_server $srv
+
+ set stdout [dict get $srv "stdout"]
+ set stderr [dict get $srv "stderr"]
+ set config_file [dict get $srv "config_file"]
+
+ set prev_ready_count [exec grep -i "Ready to accept" | wc -l < $stdout]
+
+ set pid [spawn_server $config_file $stdout $stderr]
+
+ # check that the server actually started
+ wait_server_started $config_file $stdout $pid
+
+ # update the pid in the servers list
+ dict set srv "pid" $pid
+ # re-set $srv in the servers list
+ lset ::servers end+$level $srv
+
+ if {$wait_ready} {
+ while 1 {
+ # check that the server actually started and is ready for connections
+ if {[exec grep -i "Ready to accept" | wc -l < $stdout] > $prev_ready_count + 1} {
+ break
+ }
+ after 10
+ }
+ }
+ reconnect $level
+}
diff --git a/tests/support/util.tcl b/tests/support/util.tcl
index 8bec95374..fce3ffd18 100644
--- a/tests/support/util.tcl
+++ b/tests/support/util.tcl
@@ -99,11 +99,27 @@ proc wait_for_ofs_sync {r1 r2} {
}
}
-proc wait_for_log_message {srv_idx pattern last_lines maxtries delay} {
+# count current log lines in server's stdout
+proc count_log_lines {srv_idx} {
+ set _ [exec wc -l < [srv $srv_idx stdout]]
+}
+
+# verify pattern exists in server's sdtout after a certain line number
+proc verify_log_message {srv_idx pattern from_line} {
+ set lines_after [count_log_lines]
+ set lines [expr $lines_after - $from_line]
+ set result [exec tail -$lines < [srv $srv_idx stdout]]
+ if {![string match $pattern $result]} {
+ error "assertion:expected message not found in log file: $pattern"
+ }
+}
+
+# wait for pattern to be found in server's stdout after certain line number
+proc wait_for_log_message {srv_idx pattern from_line maxtries delay} {
set retry $maxtries
set stdout [srv $srv_idx stdout]
while {$retry} {
- set result [exec tail -$last_lines < $stdout]
+ set result [exec tail +$from_line < $stdout]
set result [split $result "\n"]
foreach line $result {
if {[string match $pattern $line]} {
@@ -114,7 +130,7 @@ proc wait_for_log_message {srv_idx pattern last_lines maxtries delay} {
after $delay
}
if {$retry == 0} {
- fail "log message of '$pattern' not found"
+ fail "log message of '$pattern' not found in $stdout after line: $from_line"
}
}
diff --git a/tests/test_helper.tcl b/tests/test_helper.tcl
index ef9bf7fdf..51c364601 100644
--- a/tests/test_helper.tcl
+++ b/tests/test_helper.tcl
@@ -35,6 +35,7 @@ set ::all_tests {
unit/quit
unit/aofrw
unit/acl
+ unit/latency-monitor
integration/block-repl
integration/replication
integration/replication-2
@@ -48,6 +49,7 @@ set ::all_tests {
integration/psync2
integration/psync2-reg
integration/psync2-pingoff
+ integration/redis-cli
unit/pubsub
unit/slowlog
unit/scripting
diff --git a/tests/unit/dump.tcl b/tests/unit/dump.tcl
index 062d803b5..a9def9206 100644
--- a/tests/unit/dump.tcl
+++ b/tests/unit/dump.tcl
@@ -36,7 +36,18 @@ start_server {tags {"dump"}} {
assert {$ttl >= 2900 && $ttl <= 3100}
r get foo
} {bar}
-
+
+ test {RESTORE with ABSTTL in the past} {
+ r set foo bar
+ set encoded [r dump foo]
+ set now [clock milliseconds]
+ r debug set-active-expire 0
+ r restore foo [expr $now-3000] $encoded absttl REPLACE
+ catch {r debug object foo} e
+ r debug set-active-expire 1
+ set e
+ } {ERR no such key}
+
test {RESTORE can set LRU} {
r set foo bar
set encoded [r dump foo]
diff --git a/tests/unit/introspection.tcl b/tests/unit/introspection.tcl
index b60ca0d48..d681e06d5 100644
--- a/tests/unit/introspection.tcl
+++ b/tests/unit/introspection.tcl
@@ -78,17 +78,8 @@ start_server {tags {"introspection"}} {
syslog-facility
databases
port
- io-threads
tls-port
- tls-prefer-server-ciphers
- tls-cert-file
- tls-key-file
- tls-dh-params-file
- tls-ca-cert-file
- tls-ca-cert-dir
- tls-protocols
- tls-ciphers
- tls-ciphersuites
+ io-threads
logfile
unixsocketperm
slaveof
@@ -100,6 +91,23 @@ start_server {tags {"introspection"}} {
bgsave_cpulist
}
+ if {!$::tls} {
+ append skip_configs {
+ tls-prefer-server-ciphers
+ tls-session-cache-timeout
+ tls-session-cache-size
+ tls-session-caching
+ tls-cert-file
+ tls-key-file
+ tls-dh-params-file
+ tls-ca-cert-file
+ tls-ca-cert-dir
+ tls-protocols
+ tls-ciphers
+ tls-ciphersuites
+ }
+ }
+
set configs {}
foreach {k v} [r config get *] {
if {[lsearch $skip_configs $k] != -1} {
diff --git a/tests/unit/moduleapi/testrdb.tcl b/tests/unit/moduleapi/testrdb.tcl
index a93b34b69..98641ae0a 100644
--- a/tests/unit/moduleapi/testrdb.tcl
+++ b/tests/unit/moduleapi/testrdb.tcl
@@ -67,6 +67,7 @@ tags "modules" {
}
# Start the replication process...
+ set loglines [count_log_lines -1]
$master config set repl-diskless-sync-delay 0
$replica replicaof $master_host $master_port
@@ -76,7 +77,7 @@ tags "modules" {
for {set i 0} {$i < $attempts} {incr i} {
# wait for the replica to start reading the rdb
# using the log file since the replica only responds to INFO once in 2mb
- wait_for_log_message -1 "*Loading DB in memory*" 5 2000 1
+ wait_for_log_message -1 "*Loading DB in memory*" $loglines 2000 1
# add some additional random sleep so that we kill the master on a different place each time
after [expr {int(rand()*100)}]
@@ -85,7 +86,7 @@ tags "modules" {
set killed [$master client kill type replica]
if {[catch {
- set res [wait_for_log_message -1 "*Internal error in RDB*" 5 100 10]
+ set res [wait_for_log_message -1 "*Internal error in RDB*" $loglines 100 10]
if {$::verbose} {
puts $res
}
@@ -98,6 +99,7 @@ tags "modules" {
$master config set repl-backlog-size [expr {16384 + $i}]
}
# wait for loading to stop (fail)
+ set loglines [count_log_lines -1]
wait_for_condition 100 10 {
[s -1 loading] eq 0
} else {
diff --git a/tests/unit/type/incr.tcl b/tests/unit/type/incr.tcl
index b7a135203..dbf45e455 100644
--- a/tests/unit/type/incr.tcl
+++ b/tests/unit/type/incr.tcl
@@ -130,15 +130,18 @@ start_server {tags {"incr"}} {
format $err
} {WRONGTYPE*}
- test {INCRBYFLOAT does not allow NaN or Infinity} {
- r set foo 0
- set err {}
- catch {r incrbyfloat foo +inf} err
- set err
- # p.s. no way I can force NaN to test it from the API because
- # there is no way to increment / decrement by infinity nor to
- # perform divisions.
- } {ERR*would produce*}
+ # On some platforms strtold("+inf") with valgrind returns a non-inf result
+ if {!$::valgrind} {
+ test {INCRBYFLOAT does not allow NaN or Infinity} {
+ r set foo 0
+ set err {}
+ catch {r incrbyfloat foo +inf} err
+ set err
+ # p.s. no way I can force NaN to test it from the API because
+ # there is no way to increment / decrement by infinity nor to
+ # perform divisions.
+ } {ERR*would produce*}
+ }
test {INCRBYFLOAT decrement} {
r set foo 1