summaryrefslogtreecommitdiff
path: root/tests/integration
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2015-10-15 11:23:13 +0200
committerantirez <antirez@gmail.com>2015-10-15 11:23:15 +0200
commit5f0fef5eb9d4ca2e4f5a21388b92d9443e495da9 (patch)
tree094c7ac5ee4180be410784f1024497f242a986dd /tests/integration
parented6228851cfc7731a4e84201a3b2d6c11d925438 (diff)
downloadredis-5f0fef5eb9d4ca2e4f5a21388b92d9443e495da9.tar.gz
Regression test for issue #2813.
Diffstat (limited to 'tests/integration')
-rw-r--r--tests/integration/replication.tcl53
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]