bunkerweb/tests/swarm.sh
2022-06-03 17:24:14 +02:00

126 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
. ./tests/utils/utils.sh
. /opt/.runner_env
function single_swarm_test() {
example="$1"
wait_time="$2"
shift
shift
asserts=("$@")
echo "Testing $example ..."
exec_swarm_example "$example"
if [ $? -ne 0 ] ; then
docker service logs bunkerweb_mybunker
docker service logs bunkerweb_myautoconf
docker stack rm bunkerweb > /dev/null 2>&1
for config in $(docker config ls --format "{{ .ID }}") ; do
docker config rm $config
done
echo "$example failed (exec) ..."
exit 1
fi
for assert in "${asserts[@]}" ; do
url="$(echo "$assert" | cut -d ' ' -f 1)"
str="$(echo "$assert" | cut -d ' ' -f 2)"
if [ "$(echo "$example" | grep websocket)" = "" ] ; then
curl_assert "$url" "$str" "$wait_time"
else
curl_assert "$url" "$str" "$wait_time" "ws"
fi
ret=$?
if [ $ret -ne 0 ] ; then
docker service logs bunkerweb_mybunker
docker service logs bunkerweb_myautoconf
for service in $(docker stack services --format "{{ .Name }}" "$example") ; do
docker service logs "$service"
done
docker config ls
docker stack rm bunkerweb > /dev/null 2>&1
docker stack rm "$example" > /dev/null 2>&1
docker network rm services_net autoconf_net > /dev/null 2>&1
for config in $(docker config ls --format "{{ .ID }}") ; do
docker config rm $config
done
echo "$example failed (curl) ..."
exit 1
fi
done
docker stack rm "$example"
for config in $(docker config ls --format "{{ .ID }}") ; do
docker config rm $config
done
echo "$example success !"
}
echo "Running swarm tests ..."
# Start swarm
if [ ! -d "/tmp/swarm" ] ; then
mkdir /tmp/swarm
fi
rm -rf /tmp/swarm/*
cp -r ./integrations/swarm/* /tmp/swarm
sed -i 's@bunkerity/bunkerweb:.*$@10.20.1.1:5000/bw-tests:latest@g' /tmp/swarm/stack.yml
sed -i 's@bunkerity/bunkerweb-autoconf:.*$@10.20.1.1:5000/bw-autoconf-tests:latest@g' /tmp/swarm/stack.yml
current_dir="$(pwd)"
cd "/tmp/swarm"
echo "starting swarm stack ..."
docker stack rm bunkerweb > /dev/null 2>&1
current_wait=0
while [ 1 ] ; do
if [ $current_wait -gt 30 ] ; then
echo "can't remove old swarm stack"
exit 1
fi
if [ "$(docker stack ls | grep bunkerweb)" = "" ] ; then
break
fi
current_wait=$((current_wait+1))
sleep 1
done
docker network rm services_net autoconf_net > /dev/null 2>&1
ret="$(docker stack deploy -c stack.yml bunkerweb 2>&1)"
if [ $? -ne 0 ] ; then
echo "$ret"
echo "swarm failed (deploy)"
exit 1
fi
current_wait=0
healthy="no"
while [ $current_wait -lt 30 ] ; do
check="$(docker stack ps --no-trunc --format "{{ .CurrentState }}" bunkerweb | grep -v "Running" 2>&1)"
if [ "$check" = "" ] ; then
healthy="yes"
break
fi
current_wait=$((current_wait+1))
sleep 1
done
if [ "$healthy" = "no" ] ; then
echo "$ret"
docker service logs bunkerweb_mybunker
docker service logs bunkerweb_myautoconf
docker stack rm bunkerweb > /dev/null 2>&1
echo "swarm failed (not healthy)"
exit 1
fi
cd "$current_dir"
sleep 60
# reverse
single_swarm_test "swarm-reverse-proxy" "120" "https://$TEST_DOMAIN1 hello" "https://$TEST_DOMAIN2 hello" "https://$TEST_DOMAIN3 hello"
# configs
single_swarm_test "swarm-configs" "120" "https://$TEST_DOMAIN1/app1 app1" "https://$TEST_DOMAIN2/app2 app2" "https://$TEST_DOMAIN3/app3 app3" "https://$TEST_DOMAIN1/hello hello" "https://$TEST_DOMAIN2/hello hello" "https://$TEST_DOMAIN3/hello hello"
# cleanup
current_dir="$(pwd)"
cd "/tmp/swarm"
docker stack rm bunkerweb > /dev/null 2>&1
cd "$current_dir"
exit 0