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.
80 lines
2.4 KiB
Bash
Executable File
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
|