Merge pull request #582 from chanwit/test-zk-discovery

integration: test for ZooKeeper discovery
This commit is contained in:
Andrea Luzzardi 2015-04-09 20:11:30 -07:00
commit b250a3a5cf
5 changed files with 87 additions and 9 deletions

View File

@ -9,7 +9,7 @@ function teardown() {
@test "docker info should return the number of nodes" {
start_docker 3
start_manager
swarm_manage
run docker_swarm info
[ "$status" -eq 0 ]
[[ "${lines[3]}" == *"Nodes: 3" ]]
@ -17,7 +17,7 @@ function teardown() {
@test "docker ps -n 3 should return the 3 last containers, including non running one" {
start_docker 1
start_manager
swarm_manage
run docker_swarm run -d busybox sleep 42
run docker_swarm run -d busybox false
run docker_swarm ps -n 3
@ -34,7 +34,7 @@ function teardown() {
@test "docker ps -l should return the last container, including non running one" {
start_docker 1
start_manager
swarm_manage
run docker_swarm run -d busybox sleep 42
sleep 1 #sleep so the 2 containers don't start at the same second
run docker_swarm run -d busybox true

View File

@ -9,7 +9,7 @@ function teardown() {
@test "node constraint" {
start_docker 2
start_manager
swarm_manage
run docker_swarm run --name c1 -e constraint:node==node-0 -d busybox:latest sh
[ "$status" -eq 0 ]
@ -34,7 +34,7 @@ function teardown() {
@test "label constraints" {
start_docker 1 --label foo=a
start_docker 1 --label foo=b
start_manager
swarm_manage
run docker_swarm run --name c1 -e constraint:foo==a -d busybox:latest sh
[ "$status" -eq 0 ]

View File

@ -37,17 +37,60 @@ function wait_until_reachable() {
}
# Start the swarm manager in background.
function start_manager() {
${SWARM_ROOT}/swarm manage -H $SWARM_HOST "$@" `join , ${HOSTS[@]}` &
function swarm_manage() {
local discovery
if [ $# -ge 0 ]; then
discovery=`join , ${HOSTS[@]}`
else
discovery="$@"
fi
${SWARM_ROOT}/swarm manage -H $SWARM_HOST $discovery &
SWARM_PID=$!
wait_until_reachable $SWARM_HOST
}
# Start swarm join for every engine with the discovery as parameter
function swarm_join() {
local i=0
for h in ${HOSTS[@]}; do
echo "Swarm join #${i}: $h $@"
${SWARM_ROOT}/swarm join --addr=$h "$@" &
SWARM_JOIN_PID[$i]=$!
((++i))
done
wait_until_swarm_joined $i
}
# Wait until a swarm instance joins the cluster.
# Parameter $1 is number of nodes to check.
function wait_until_swarm_joined {
local attempts=0
local max_attempts=10
until [ $attempts -ge $max_attempts ]; do
run docker -H $SWARM_HOST info
if [[ "${lines[3]}" == *"Nodes: $1"* ]]; then
break
fi
echo "Checking if joined successfully for the $((++attempts)) time" >&2
sleep 1
done
[[ $attempts -lt $max_attempts ]]
}
# Stops the manager.
function stop_manager() {
function swarm_manage_cleanup() {
kill $SWARM_PID
}
# Clean up Swarm join processes
function swarm_join_cleanup() {
for pid in ${SWARM_JOIN_PID[@]}; do
kill $pid
done
}
# Run the docker CLI against swarm.
function docker_swarm() {
docker -H $SWARM_HOST "$@"

View File

@ -3,7 +3,7 @@
load helpers
@test "test that create doesn't accept any arugments" {
run swarm create derpderpderp
run swarm create derpderpderp
[ "$status" -ne 0 ]
}

View File

@ -0,0 +1,35 @@
#!/usr/bin/env bats
load helpers
# Address on which Zookeeper will listen (random port between 7000 and 8000).
ZK_HOST=127.0.0.1:$(( ( RANDOM % 1000 ) + 7000 ))
# Container name for integration test
ZK_CONTAINER_NAME=swarm_integration_zk
function start_zk() {
docker run --name $ZK_CONTAINER_NAME -p $ZK_HOST:2181 -d jplock/zookeeper
}
function stop_zk() {
docker rm -f -v $ZK_CONTAINER_NAME > /dev/null
}
function teardown() {
swarm_join_cleanup
swarm_manage_cleanup
stop_docker
stop_zk
}
@test "zk discovery should be working correctly" {
start_zk
start_docker 1
swarm_manage zk://${ZK_HOST}/test
swarm_join zk://${ZK_HOST}/test
run docker_swarm info
[[ "${lines[3]}" == *"Nodes: 1"* ]]
}