1# Check the basic monitoring and failover capabilities. 2 3source "../tests/includes/init-tests.tcl" 4 5test "Create a 5 nodes cluster" { 6 create_cluster 5 5 7} 8 9test "Cluster is up" { 10 assert_cluster_state ok 11} 12 13test "Cluster is writable" { 14 cluster_write_test 0 15} 16 17test "Instance #5 is a slave" { 18 assert {[RI 5 role] eq {slave}} 19} 20 21test "Instance #5 synced with the master" { 22 wait_for_condition 1000 50 { 23 [RI 5 master_link_status] eq {up} 24 } else { 25 fail "Instance #5 master link status is not up" 26 } 27} 28 29set current_epoch [CI 1 cluster_current_epoch] 30 31test "Killing one master node" { 32 kill_instance redis 0 33} 34 35test "Wait for failover" { 36 wait_for_condition 1000 50 { 37 [CI 1 cluster_current_epoch] > $current_epoch 38 } else { 39 fail "No failover detected" 40 } 41} 42 43test "Cluster should eventually be up again" { 44 assert_cluster_state ok 45} 46 47test "Cluster is writable" { 48 cluster_write_test 1 49} 50 51test "Instance #5 is now a master" { 52 assert {[RI 5 role] eq {master}} 53} 54 55test "Restarting the previously killed master node" { 56 restart_instance redis 0 57} 58 59test "Instance #0 gets converted into a slave" { 60 wait_for_condition 1000 50 { 61 [RI 0 role] eq {slave} 62 } else { 63 fail "Old master was not converted into slave" 64 } 65} 66