diff options
author | antirez <antirez@gmail.com> | 2015-10-15 11:23:13 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2015-10-15 11:25:19 +0200 |
commit | cbf6614c1af560ed3219e08f38cefc164afb6fbc (patch) | |
tree | edb92020d8d503e7d78da596b0fb0f5674665f0a | |
parent | 7cb8481053cae4b41b71c6ac6ea2b2b5af360ba2 (diff) | |
download | redis-cbf6614c1af560ed3219e08f38cefc164afb6fbc.tar.gz |
Regression test for issue #2813.
-rw-r--r-- | tests/integration/replication.tcl | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tests/integration/replication.tcl b/tests/integration/replication.tcl index bb907eba8..e811cf0ee 100644 --- a/tests/integration/replication.tcl +++ b/tests/integration/replication.tcl @@ -1,3 +1,56 @@ +proc log_file_matches {log pattern} { + set fp [open $log r] + set content [read $fp] + close $fp + string match $pattern $content +} + +start_server {tags {"repl"}} { + set slave [srv 0 client] + set slave_host [srv 0 host] + set slave_port [srv 0 port] + set slave_log [srv 0 stdout] + start_server {} { + set master [srv 0 client] + set master_host [srv 0 host] + set master_port [srv 0 port] + + # Configure the master in order to hang waiting for the BGSAVE + # operation, so that the slave remains in the handshake state. + $master config set repl-diskless-sync yes + $master config set repl-diskless-sync-delay 1000 + + # Use a short replication timeout on the slave, so that if there + # are no bugs the timeout is triggered in a reasonable amount + # of time. + $slave config set repl-timeout 5 + + # Start the replication process... + $slave slaveof $master_host $master_port + + test {Slave enters handshake} { + wait_for_condition 50 1000 { + [string match *handshake* [$slave role]] + } else { + fail "Slave does not enter handshake state" + } + } + + # But make the master unable to send + # the periodic newlines to refresh the connection. The slave + # should detect the timeout. + $master debug sleep 10 + + test {Slave is able to detect timeout during handshake} { + wait_for_condition 50 1000 { + [log_file_matches $slave_log "*Timeout connecting to the MASTER*"] + } else { + fail "Slave is not able to detect timeout" + } + } + } +} + start_server {tags {"repl"}} { set A [srv 0 client] set A_host [srv 0 host] |