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