Files

73 lines
2.1 KiB
Tcl

proc log_file_matches {log pattern} {
set fp [open $log r]
set content [read $fp]
close $fp
string match $pattern $content
}
start_server {tags {"regression"}} {
set slave [srv 0 client]
set slave_host [srv 0 host]
set slave_port [srv 0 port]
set slave_log [srv 0 stdout]
start_server {} {
set master [srv 0 client]
set master_host [srv 0 host]
set master_port [srv 0 port]
# Set the AUTH password
$master config set requirepass mypwd
$slave config set masterauth mypwd
# Start the replication process...
$slave slaveof $master_host $master_port
test {Slave is able to sync with master when AUTH is on} {
wait_for_condition 50 100 {
[log_file_matches $slave_log "*Finished with success*"]
} else {
fail "Slave is not able to sync with master when AUTH is on"
}
}
}
}
start_server {tags {"regression"}} {
set A [srv 0 client]
set A_host [srv 0 host]
set A_port [srv 0 port]
set max_clients 5
set arg [format {overrides {maxclients %d requirepass foobar}} $max_clients]
start_server $arg {
set B [srv 0 client]
set B_host [srv 0 host]
set B_port [srv 0 port]
# Make server A a slave of server B
$A slaveof $B_host $B_port
test {Master should release the connection after an AUTH failure from a Slave} {
# Verify A changed role
wait_for_condition 50 100 {
[lindex [$A role] 0] eq {slave}
} else {
fail {"Can't turn the instance into a slave"}
}
# Wait for multiple connections from A to B
after 5000
# List all the clients connected to B
r auth foobar
set client_count 0
set client_list [r client list]
foreach item $client_list {
if ([string match "id=*" $item]) {
incr client_count
}
}
assert {$client_count < $max_clients}
}
}
}