diff options
author | Binbin <binloveplay1314@qq.com> | 2023-04-27 14:32:14 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-27 09:32:14 +0300 |
commit | d659c734569be4ed32a270bac2527ccf35418c43 (patch) | |
tree | ac24eb78d850a93a63adefefb5f0476d635df215 /tests | |
parent | 5ddc0af33e8d071d2883a12ceb10336fdd25f843 (diff) | |
download | redis-d659c734569be4ed32a270bac2527ccf35418c43.tar.gz |
Add missing reply schema and coverage tests (#12079)
The change in #12018 break the CI (fixed by #12083).
There are quite a few sentinel commands that are missing both test coverage and also schema.
PR added reply-schema to the following commands:
- sentinel debug
- sentinel info-cache
- sentinel pendding-scripts
- sentinel reset
- sentinel simulate-failure
Added some very basic tests for other sentinel commands, just so that they have some coverage.
- sentinel help
- sentinel masters
- sentinel myid
- sentinel sentinels
- sentinel slaves
These tests should be improved / replaced in a followup PR.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/sentinel/tests/00-base.tcl | 51 | ||||
-rw-r--r-- | tests/sentinel/tests/05-manual.tcl | 25 |
2 files changed, 76 insertions, 0 deletions
diff --git a/tests/sentinel/tests/00-base.tcl b/tests/sentinel/tests/00-base.tcl index 1b33ca7a3..b4d65751b 100644 --- a/tests/sentinel/tests/00-base.tcl +++ b/tests/sentinel/tests/00-base.tcl @@ -31,6 +31,50 @@ test "Sentinel command flag infrastructure works correctly" { } } +test "SENTINEL HELP output the sentinel subcommand help" { + assert_match "*SENTINEL <subcommand> *" [S 0 SENTINEL HELP] +} + +test "SENTINEL MYID return the sentinel instance ID" { + assert_equal 40 [string length [S 0 SENTINEL MYID]] + assert_equal [S 0 SENTINEL MYID] [S 0 SENTINEL MYID] +} + +test "SENTINEL INFO CACHE returns the cached info" { + set res [S 0 SENTINEL INFO-CACHE mymaster] + assert_morethan_equal [llength $res] 2 + assert_equal "mymaster" [lindex $res 0] + + set res [lindex $res 1] + assert_morethan_equal [llength $res] 2 + assert_morethan [lindex $res 0] 0 + assert_match "*# Server*" [lindex $res 1] +} + +test "SENTINEL PENDING-SCRIPTS returns the information about pending scripts" { + # may or may not have a value, so assert greater than or equal to 0. + assert_morethan_equal [llength [S 0 SENTINEL PENDING-SCRIPTS]] 0 +} + +test "SENTINEL MASTERS returns a list of monitored masters" { + assert_match "*mymaster*" [S 0 SENTINEL MASTERS] + assert_morethan_equal [llength [S 0 SENTINEL MASTERS]] 1 +} + +test "SENTINEL SENTINELS returns a list of sentinel instances" { + assert_morethan_equal [llength [S 0 SENTINEL SENTINELS mymaster]] 1 +} + +test "SENTINEL SLAVES returns a list of the monitored replicas" { + assert_morethan_equal [llength [S 0 SENTINEL SLAVES mymaster]] 1 +} + +test "SENTINEL SIMULATE-FAILURE HELP list supported flags" { + set res [S 0 SENTINEL SIMULATE-FAILURE HELP] + assert_morethan_equal [llength $res] 2 + assert_equal {crash-after-election crash-after-promotion} $res +} + test "Basic failover works if the master is down" { set old_port [RPort $master_id] set addr [S 0 SENTINEL GET-MASTER-ADDR-BY-NAME mymaster] @@ -149,3 +193,10 @@ test "Failover works if we configure for absolute agreement" { test "New master [join $addr {:}] role matches" { assert {[RI $master_id role] eq {master}} } + +test "SENTINEL RESET can resets the master" { + assert_equal 1 [S 0 SENTINEL RESET mymaster] + assert_equal 0 [llength [S 0 SENTINEL SENTINELS mymaster]] + assert_equal 0 [llength [S 0 SENTINEL SLAVES mymaster]] + assert_equal 0 [llength [S 0 SENTINEL REPLICAS mymaster]] +} diff --git a/tests/sentinel/tests/05-manual.tcl b/tests/sentinel/tests/05-manual.tcl index 72d80fdf8..7e050b0dc 100644 --- a/tests/sentinel/tests/05-manual.tcl +++ b/tests/sentinel/tests/05-manual.tcl @@ -61,3 +61,28 @@ test "The old master eventually gets reconfigured as a slave" { fail "Old master not reconfigured as slave of new master" } } + +foreach flag {crash-after-election crash-after-promotion} { + test "SENTINEL SIMULATE-FAILURE $flag works" { + assert_equal {OK} [S 0 SENTINEL SIMULATE-FAILURE $flag] + + # Trigger a failover, failover will trigger leader election, replica promotion + wait_for_condition 300 50 { + [catch {S 0 SENTINEL FAILOVER mymaster}] == 0 + } else { + catch {S 0 SENTINEL FAILOVER mymaster} reply + puts [S 0 SENTINEL REPLICAS mymaster] + fail "Sentinel manual failover did not work, got: $reply" + } + + # Wait for sentinel to exit (due to simulate-failure flags) + wait_for_condition 1000 50 { + [catch {S 0 PING}] == 1 + } else { + fail "Sentinel set $flag but did not exit" + } + assert_error {*couldn't open socket: connection refused*} {S 0 PING} + + restart_instance sentinel 0 + } +} |