summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2014-05-19 15:26:17 +0200
committerantirez <antirez@gmail.com>2014-05-20 17:45:50 +0200
commit440ee603b75103d99ae39ef3208104c831a38845 (patch)
tree923e6951aa91db090f409e4f958dbcd6f477e2cd
parenta7fd2eb5945e64a2898e0fede6075d379194e71a (diff)
downloadredis-440ee603b75103d99ae39ef3208104c831a38845.tar.gz
Cluster test: better failure detection test and framework improvements.
-rw-r--r--tests/cluster/cluster.tcl33
-rw-r--r--tests/cluster/tests/01-faildet.tcl19
2 files changed, 43 insertions, 9 deletions
diff --git a/tests/cluster/cluster.tcl b/tests/cluster/cluster.tcl
index a7d71ab47..46b4a6303 100644
--- a/tests/cluster/cluster.tcl
+++ b/tests/cluster/cluster.tcl
@@ -73,3 +73,36 @@ proc assert_cluster_state {state} {
}
}
}
+
+# Search the first node starting from ID $first that is not
+# already configured as a slave.
+proc cluster_find_available_slave {first} {
+ foreach_redis_id id {
+ if {$id < $first} continue
+ if {[instance_is_killed redis $id]} continue
+ set me [get_myself $id]
+ if {[dict get $me slaveof] eq {-}} {return $id}
+ }
+ fail "No available slaves"
+}
+
+# Add 'slaves' slaves to a cluster composed of 'masters' masters.
+# It assumes that masters are allocated sequentially from instance ID 0
+# to N-1.
+proc cluster_allocate_slaves {masters slaves} {
+ for {set j 0} {$j < $slaves} {incr j} {
+ set master_id [expr {$j % $masters}]
+ set slave_id [cluster_find_available_slave $masters]
+ set master_myself [get_myself $master_id]
+ R $slave_id cluster replicate [dict get $master_myself id]
+ }
+}
+
+# Create a cluster composed of the specified number of masters and slaves.
+proc create_cluster {masters slaves} {
+ cluster_allocate_slots $masters
+ if {$slaves} {
+ cluster_allocate_slaves $masters $slaves
+ }
+ assert_cluster_state ok
+}
diff --git a/tests/cluster/tests/01-faildet.tcl b/tests/cluster/tests/01-faildet.tcl
index 883548caf..a31f7eb67 100644
--- a/tests/cluster/tests/01-faildet.tcl
+++ b/tests/cluster/tests/01-faildet.tcl
@@ -2,16 +2,8 @@
source "../tests/includes/init-tests.tcl"
-proc create_cluster {masters slaves} {
- cluster_allocate_slots $masters
- if {$slaves} {
- cluster_allocate_slaves $masters $slaves
- }
- assert_cluster_state ok
-}
-
test "Create a 5 nodes cluster" {
- create_cluster 5 0
+ create_cluster 5 5
}
test "Killing one master node" {
@@ -29,3 +21,12 @@ test "Restarting master node" {
test "Cluster should be up again" {
assert_cluster_state ok
}
+
+test "Killing two slave nodes" {
+ kill_instance redis 5
+ kill_instance redis 6
+}
+
+test "Cluster should be still up" {
+ assert_cluster_state ok
+}