summaryrefslogtreecommitdiff
path: root/examples/redis-unstable/tests/unit/cluster/internal-secret.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'examples/redis-unstable/tests/unit/cluster/internal-secret.tcl')
-rw-r--r--examples/redis-unstable/tests/unit/cluster/internal-secret.tcl71
1 files changed, 71 insertions, 0 deletions
diff --git a/examples/redis-unstable/tests/unit/cluster/internal-secret.tcl b/examples/redis-unstable/tests/unit/cluster/internal-secret.tcl
new file mode 100644
index 0000000..f310b74
--- /dev/null
+++ b/examples/redis-unstable/tests/unit/cluster/internal-secret.tcl
@@ -0,0 +1,71 @@
+proc num_unique_secrets {num_nodes} {
+ set secrets [list]
+ for {set i 0} {$i < $num_nodes} {incr i} {
+ lappend secrets [R $i debug internal_secret]
+ }
+ set num_secrets [llength [lsort -unique $secrets]]
+ return $num_secrets
+}
+
+proc wait_for_secret_sync {maxtries delay num_nodes} {
+ wait_for_condition $maxtries $delay {
+ [num_unique_secrets $num_nodes] eq 1
+ } else {
+ fail "Failed waiting for secrets to sync"
+ }
+}
+
+start_cluster 3 3 {tags {external:skip cluster}} {
+ test "Test internal secret sync" {
+ wait_for_secret_sync 50 100 6
+ }
+
+
+ set first_shard_host [srv 0 host]
+ set first_shard_port [srv 0 port]
+
+ if {$::verbose} {
+ puts {cluster internal secret:}
+ puts [R 1 debug internal_secret]
+ }
+
+ test "Join a node to the cluster and make sure it gets the same secret" {
+ start_server {tags {"external:skip"} overrides {cluster-enabled {yes}}} {
+ r cluster meet $first_shard_host $first_shard_port
+ wait_for_condition 50 100 {
+ [r debug internal_secret] eq [R 1 debug internal_secret]
+ } else {
+ puts [r debug internal_secret]
+ puts [R 1 debug internal_secret]
+ fail "Secrets not match"
+ }
+ }
+ }
+
+ test "Join another cluster, make sure clusters sync on the internal secret" {
+ start_server {tags {"external:skip"} overrides {cluster-enabled {yes}}} {
+ set new_shard_host [srv 0 host]
+ set new_shard_port [srv 0 port]
+ start_server {tags {"external:skip"} overrides {cluster-enabled {yes}}} {
+ r cluster meet $new_shard_host $new_shard_port
+ wait_for_condition 50 100 {
+ [r debug internal_secret] eq [r -1 debug internal_secret]
+ } else {
+ puts [r debug internal_secret]
+ puts [r -1 debug internal_secret]
+ fail "Secrets not match"
+ }
+ if {$::verbose} {
+ puts {new cluster internal secret:}
+ puts [r -1 debug internal_secret]
+ }
+ r cluster meet $first_shard_host $first_shard_port
+ wait_for_secret_sync 50 100 8
+ if {$::verbose} {
+ puts {internal secret after join to bigger cluster:}
+ puts [r -1 debug internal_secret]
+ }
+ }
+ }
+ }
+}