File: internal-secret.tcl

package info (click to toggle)
redis 5%3A8.0.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 21,920 kB
  • sloc: ansic: 217,146; tcl: 51,883; sh: 4,625; perl: 4,214; cpp: 3,568; python: 3,165; makefile: 2,055; ruby: 639; javascript: 30; csh: 7
file content (71 lines) | stat: -rw-r--r-- 2,525 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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 10 10 {tags {external:skip cluster}} {
    test "Test internal secret sync" {
        wait_for_secret_sync 50 100 20
    }

    
    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 22
                if {$::verbose} {
                    puts {internal secret after join to bigger cluster:}
                    puts [r -1 debug internal_secret]
                }
            }
        }
    }
}