From 8b76d55f2e8550cb473c87d7355c1f0e24a3afda Mon Sep 17 00:00:00 2001 From: antirez Date: Fri, 22 Jul 2016 16:39:22 +0200 Subject: [PATCH] Sentinel: new test unit 07 that tests master down conditions. --- tests/sentinel/tests/07-down-conditions.tcl | 68 +++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 tests/sentinel/tests/07-down-conditions.tcl diff --git a/tests/sentinel/tests/07-down-conditions.tcl b/tests/sentinel/tests/07-down-conditions.tcl new file mode 100644 index 000000000..a60656e59 --- /dev/null +++ b/tests/sentinel/tests/07-down-conditions.tcl @@ -0,0 +1,68 @@ +# Test conditions where an instance is considered to be down + +source "../tests/includes/init-tests.tcl" + +proc ensure_master_up {} { + wait_for_condition 1000 50 { + [dict get [S 4 sentinel master mymaster] flags] eq "master" + } else { + fail "Master flags are not just 'master'" + } +} + +proc ensure_master_down {} { + wait_for_condition 1000 50 { + [string match *down* \ + [dict get [S 4 sentinel master mymaster] flags]] + } else { + fail "Master is not flagged SDOWN" + } +} + +test "Crash the majority of Sentinels to prevent failovers for this unit" { + for {set id 0} {$id < $quorum} {incr id} { + kill_instance sentinel $id + } +} + +test "SDOWN is triggered by non-responding but not crashed instance" { + lassign [S 4 SENTINEL GET-MASTER-ADDR-BY-NAME mymaster] host port + ensure_master_up + exec ../../../src/redis-cli -h $host -p $port debug sleep 10 > /dev/null & + ensure_master_down + ensure_master_up +} + +test "SDOWN is triggered by crashed instance" { + lassign [S 4 SENTINEL GET-MASTER-ADDR-BY-NAME mymaster] host port + ensure_master_up + kill_instance redis 0 + ensure_master_down + restart_instance redis 0 + ensure_master_up +} + +test "SDOWN is triggered by masters advertising as slaves" { + ensure_master_up + R 0 slaveof 127.0.0.1 34567 + ensure_master_down + R 0 slaveof no one + ensure_master_up +} + +test "SDOWN is triggered by misconfigured instance repling with errors" { + ensure_master_up + set orig_dir [lindex [R 0 config get dir] 1] + set orig_save [lindex [R 0 config get save] 1] + # Set dir to / and filename to "tmp" to make sure it will fail. + R 0 config set dir / + R 0 config set dbfilename tmp + R 0 config set save "1000000 1000000" + R 0 bgsave + ensure_master_down + R 0 config set save $orig_save + R 0 config set dir $orig_dir + R 0 config set dbfilename dump.rdb + R 0 bgsave + ensure_master_up +}