Files
weave/test/320_claim_3_test.sh
T
Bryan Boreham d2c78d3196 Tell 'timeout' to use signal 9, so command dies immediately
We were seeing flakes in test 320, seemingly because the 'docker run'
command would sometimes send a delete request for the container it had
started, before dying.

We need the container to carry on running so we can check it does get
attached when the cluster reaches quorum. Sending signal 9 means the
command dies immediately and does not get a chance to delete the
container.
2019-11-01 16:39:34 +00:00

80 lines
2.4 KiB
Bash
Executable File

#! /bin/bash
. "$(dirname "$0")/config.sh"
UNIVERSE=10.2.0.0/16
C1=10.2.128.1
C4=10.2.128.4
delete_persistence() {
for host in "$@" ; do
docker_on $host rm -v weavedb >/dev/null
docker_on $host rm weave >/dev/null
done
}
start_suite "Claiming addresses"
weave_on $HOST1 launch --ipalloc-range $UNIVERSE $HOST2
weave_on $HOST2 launch --ipalloc-range $UNIVERSE $HOST1
start_container $HOST1 $C1/12 --name=c1
start_container $HOST2 --name=c2
assert_raises "exec_on $HOST2 c2 $PING $C1"
stop_weave_on $HOST1
stop_weave_on $HOST2
# Delete persistence data so they form a blank ring
delete_persistence $HOST1 $HOST2
# Start hosts in reverse order so c1's address has to be claimed from host2
weave_on $HOST2 launch --ipalloc-range $UNIVERSE
weave_on $HOST1 launch --ipalloc-range $UNIVERSE $HOST2
# Start another container on host2, so if it hasn't relinquished c1's
# address it would give that out as the first available.
start_container $HOST2 --name=c3
C3=$(container_ip $HOST2 c3)
assert_raises "[ $C3 != $C1 ]"
sleep 1 # give routers some time to fully establish connectivity
assert_raises "exec_on $HOST1 c1 $PING $C3"
stop_weave_on $HOST1
stop_weave_on $HOST2
delete_persistence $HOST1 $HOST2
# Now make host1 attempt to claim from host2, when host2 is stopped
# the point being to check whether host1 will hang trying to talk to host2
weave_on $HOST2 launch --ipalloc-range $UNIVERSE
weave_on $HOST2 prime
# Introduce host3 to remember the IPAM CRDT when we stop host2
weave_on $HOST3 launch --ipalloc-range $UNIVERSE $HOST2
weave_on $HOST3 prime
stop_weave_on $HOST2
weave_on $HOST1 launch --ipalloc-range $UNIVERSE $HOST3
stop_weave_on $HOST1
stop_weave_on $HOST3
# Delete persistence data on host1, so that host1 would try to establish a ring.
delete_persistence $HOST1
weave_on $HOST1 launch --ipalloc-range $UNIVERSE $HOST2
# Start another container on host1. The starting should block, because host1 is
# not able to establish the ring due to host2 being offline.
CMD="proxy_start_container $HOST1 --name c4 -e WEAVE_CIDR=$C4/12"
assert_raises "timeout --signal=9 5 cat <( $CMD )" 137
# However, allocation for an external subnet should not block.
assert_raises "proxy_start_container $HOST1 -e WEAVE_CIDR=10.3.0.1/12"
# Launch host2, so that host1 can establish the ring.
weave_on $HOST2 launch --ipalloc-range $UNIVERSE $HOST1
wait_for_attached $HOST1 c4
assert_raises "[ $(container_ip $HOST1 c4) == $C4 ]"
end_suite