futriix/tests/unit/cluster/announce-client-ip.tcl

164 lines
5.7 KiB
Tcl
Raw Normal View History

# Small cluster. No need for failovers.
start_cluster 2 2 {tags {external:skip cluster} overrides {cluster-replica-no-failover yes}} {
test "Set cluster announced IPv4 to invalid IP" {
catch {R 0 config set cluster-announce-client-ipv4 banana} e
assert_match "*Invalid IPv4 address*" $e
}
test "Set cluster announced IPv4 and check that it propagates" {
for {set j 0} {$j < [llength $::servers]} {incr j} {
set res [R $j config set cluster-announce-client-ipv4 "111.222.111.$j"]
}
# CLUSTER SLOTS
wait_for_condition 50 100 {
[are_cluster_announced_ips_propagated {111.222.111.*}]
} else {
fail "cluster-announce-client-ipv4 were not propagated"
}
# CLUSTER SHARDS
for {set j 0} {$j < [llength $::servers]} {incr j} {
foreach shard [R $j CLUSTER SHARDS] {
foreach node [dict get $shard "nodes"] {
set ip [dict get $node "ip"]
set endpoint [dict get $node "endpoint"]
assert_match "111.222.111*" $ip
assert_match "111.222.111*" $endpoint
}
}
}
# CLUSTER NODES
for {set j 0} {$j < [llength $::servers]} {incr j} {
set lines [split [R $j CLUSTER NODES] "\r\n"]
foreach l $lines {
set l [string trim $l]
if {$l eq {}} continue
assert_equal 1 [regexp {^[0-9a-f]+ 111\.222\.111\.[0-9]} $l]
}
}
# Redirects
catch {R 0 set foo foo} e
assert_match "MOVED * 111.222.111*:*" $e
# Now that everything is propagated, assert everyone agrees
wait_for_cluster_propagation
}
test "Clear announced client IPv4 and check that it propagates" {
for {set j 0} {$j < [llength $::servers]} {incr j} {
R $j config set cluster-announce-client-ipv4 ""
}
wait_for_condition 50 100 {
[are_cluster_announced_ips_propagated "127.0.0.1"] eq 1
} else {
fail "Cleared cluster-announce-client-ipv4 were not propagated"
}
# Redirect use the IP address
catch {R 0 set foo foo} e
assert_match "MOVED * 127.0.0.1:*" $e
# Now that everything is propagated, assert everyone agrees
wait_for_cluster_propagation
}
}
start_cluster 2 2 {tags {external:skip cluster ipv6} overrides {cluster-replica-no-failover yes bind {127.0.0.1 ::1}}} {
# Connecting to localhost as "::1" makes the clients use IPv6.
set clients {}
for {set j 0} {$j < [llength $::servers]} {incr j} {
set level [expr -1 * $j]
lappend clients [valkey ::1 [srv $level port] 0 $::tls]
}
test "Set cluster announced IPv6 to invalid IP" {
catch {R 0 config set cluster-announce-client-ipv6 banana} e
assert_match "*Invalid IPv6 address*" $e
}
test "Set cluster announced IPv6 and check that it propagates" {
for {set j 0} {$j < [llength $::servers]} {incr j} {
R $j config set cluster-announce-client-ipv6 "cafe:1234::$j"
}
# CLUSTER SLOTS
wait_for_condition 50 100 {
[are_cluster_announced_ips_propagated "cafe:1234::*" $clients] eq 1
} else {
fail "cluster-announce-client-ipv6 were not propagated"
}
# CLUSTER SHARDS
for {set j 0} {$j < [llength $::servers]} {incr j} {
foreach shard [[lindex $clients $j] CLUSTER SHARDS] {
foreach node [dict get $shard "nodes"] {
set ip [dict get $node "ip"]
set endpoint [dict get $node "endpoint"]
assert_match "cafe:1234::*" $ip
assert_match "cafe:1234::*" $endpoint
}
}
}
# CLUSTER NODES
for {set j 0} {$j < [llength $::servers]} {incr j} {
set lines [split [[lindex $clients $j] CLUSTER NODES] "\r\n"]
foreach l $lines {
set l [string trim $l]
if {$l eq {}} continue
assert_equal 1 [regexp {^[0-9a-f]+ cafe:1234::[0-9]} $l]
}
}
# Redirects
catch {[lindex $clients 0] set foo foo} e
assert_match "MOVED * cafe:1234::*:*" $e
# Now that everything is propagated, assert everyone agrees
wait_for_cluster_propagation
}
test "Clear announced client IPv6 and check that it propagates" {
for {set j 0} {$j < [llength $::servers]} {incr j} {
R $j config set cluster-announce-client-ipv6 ""
}
wait_for_condition 50 100 {
[are_cluster_announced_ips_propagated "127.0.0.1" $clients] eq 1
} else {
fail "Cleared cluster-announce-client-ipv6 were not propagated"
}
# Redirects
catch {[lindex $clients 0] set foo foo} e
assert_match "MOVED * 127.0.0.1:*" $e
# Now that everything is propagated, assert everyone agrees
wait_for_cluster_propagation
}
# Close clients
for {set j 0} {$j < [llength $::servers]} {incr j} {
[lindex $clients $j] close
}
}
start_cluster 1 0 {tags {external:skip cluster} overrides {cluster-replica-no-failover yes bind {127.0.0.1 ::1}}} {
test "Load cluster announced IPv4 config on server start" {
R 0 config set cluster-announce-client-ipv4 "1.1.1.1"
restart_server 0 true false
}
}
start_cluster 1 0 {tags {external:skip cluster ipv6} overrides {cluster-replica-no-failover yes bind {127.0.0.1 ::1}}} {
test "Load cluster announced IPv6 config on server start" {
R 0 config set cluster-announce-client-ipv6 "cafe:1234::0"
restart_server 0 true false
}
}