diff options
author | antirez <antirez@gmail.com> | 2015-10-15 11:23:13 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2015-10-15 11:23:15 +0200 |
commit | 5f0fef5eb9d4ca2e4f5a21388b92d9443e495da9 (patch) | |
tree | 094c7ac5ee4180be410784f1024497f242a986dd /tests | |
parent | ed6228851cfc7731a4e84201a3b2d6c11d925438 (diff) | |
download | redis-5f0fef5eb9d4ca2e4f5a21388b92d9443e495da9.tar.gz |
Regression test for issue #2813.
Diffstat (limited to 'tests')
-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] |