87 lines
3.1 KiB
Tcl
87 lines
3.1 KiB
Tcl
start_server {tags {"active-repl"} overrides {active-replica yes}} {
|
|
set slave [srv 0 client]
|
|
set slave_host [srv 0 host]
|
|
set slave_port [srv 0 port]
|
|
set slave_log [srv 0 stdout]
|
|
set slave_pid [s process_id]
|
|
start_server {overrides {active-replica yes}} {
|
|
set master [srv 0 client]
|
|
set master_host [srv 0 host]
|
|
set master_port [srv 0 port]
|
|
|
|
# Use a short replication timeout on the slave, so that if there
|
|
# are no bugs the timeout is triggered in a reasonable amount
|
|
# of time.
|
|
$slave config set repl-timeout 5
|
|
|
|
# Start the replication process...
|
|
$slave slaveof $master_host $master_port
|
|
$master slaveof $slave_host $slave_port
|
|
|
|
test {Active replicas report the correct role} {
|
|
wait_for_condition 50 100 {
|
|
[string match *active-replica* [$slave role]]
|
|
} else {
|
|
fail "Replica0 does not report the correct role"
|
|
}
|
|
wait_for_condition 50 100 {
|
|
[string match *active-replica* [$master role]]
|
|
} else {
|
|
fail "Replica1 does not report the correct role"
|
|
}
|
|
}
|
|
|
|
test {Active replicas propogate} {
|
|
$master set testkey foo
|
|
wait_for_condition 50 500 {
|
|
[string match *foo* [$slave get testkey]]
|
|
} else {
|
|
fail "replication failed to propogate"
|
|
}
|
|
|
|
$slave set testkey bar
|
|
wait_for_condition 50 500 {
|
|
[string match bar [$master get testkey]]
|
|
} else {
|
|
fail "replication failed to propogate in the other direction"
|
|
}
|
|
}
|
|
|
|
test {Active replicas WAIT} {
|
|
# Test that wait succeeds since replicas should be syncronized
|
|
$master set testkey foo
|
|
$slave set testkey2 test
|
|
assert_equal {1} [$master wait 1 1000] { "value should propogate
|
|
within 1 second" }
|
|
assert_equal {1} [$slave wait 1 1000] { "value should propogate
|
|
within 1 second" }
|
|
|
|
# Now setup a situation where wait should fail
|
|
exec kill -SIGSTOP $slave_pid
|
|
$master set testkey fee
|
|
assert_equal {0} [$master wait 1 1000] { "slave shouldn't be
|
|
synchronized since its stopped" }
|
|
}
|
|
# Resume the replica we paused in the prior test
|
|
exec kill -SIGCONT $slave_pid
|
|
|
|
test {Active replica expire propogates} {
|
|
$master set testkey1 foo
|
|
wait_for_condition 50 1000 {
|
|
[string match *foo* [$slave get testkey1]]
|
|
} else {
|
|
fail "Replication failed to propogate"
|
|
}
|
|
$master pexpire testkey1 200
|
|
after 1000
|
|
assert_equal {0} [$master del testkey1] {"master expired"}
|
|
assert_equal {0} [$slave del testkey1] {"slave expired"}
|
|
|
|
$slave set testkey1 foo px 200
|
|
after 1000
|
|
assert_equal {0} [$master del testkey1]
|
|
assert_equal {0} [$slave del testkey1]
|
|
}
|
|
}
|
|
}
|