148 lines
3.9 KiB
Bash
Executable File
148 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
. ./tests/utils/utils.sh
|
|
|
|
. /opt/.runner_env
|
|
|
|
function single_k8s_test() {
|
|
example="$1"
|
|
wait_time="$2"
|
|
shift
|
|
shift
|
|
asserts=("$@")
|
|
echo "Testing $example ..."
|
|
exec_k8s_example "$example"
|
|
if [ $? -ne 0 ] ; then
|
|
for pod in $(sudo kubectl get pods | cut -d ' ' -f 1 | grep -v NAME) ; do
|
|
sudo kubectl logs $pod
|
|
done
|
|
cd "/tmp/k8s"
|
|
sudo kubectl delete -f bunkerweb.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f rbac.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f k8s.yml > /dev/null 2>&1
|
|
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
|
|
for pod in $(sudo kubectl get pods | cut -d ' ' -f 1 | grep -v NAME) ; do
|
|
sudo kubectl logs $pod
|
|
done
|
|
cd "/tmp/k8s"
|
|
sudo kubectl delete -f bunkerweb.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f rbac.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f k8s.yml > /dev/null 2>&1
|
|
cd "/tmp/tests/$example"
|
|
for yml in $(ls *.yml) ; do
|
|
sudo kubectl delete -f "$yml"
|
|
done
|
|
echo "$example failed (curl) ..."
|
|
exit 1
|
|
fi
|
|
done
|
|
current_dir="$(pwd)"
|
|
cd "/tmp/tests/$example"
|
|
for yml in $(ls *.yml) ; do
|
|
sudo kubectl delete -f "$yml"
|
|
done
|
|
cd "$current_dir"
|
|
echo "$example success !"
|
|
}
|
|
|
|
echo "Running k8s tests ..."
|
|
|
|
# Start k8s
|
|
if [ ! -d "/tmp/k8s" ] ; then
|
|
mkdir /tmp/k8s
|
|
fi
|
|
rm -rf /tmp/k8s/*
|
|
cp -r ./integrations/kubernetes/* /tmp/k8s
|
|
cp ./tests/utils/k8s.yml /tmp/k8s
|
|
sed -i 's@bunkerity/bunkerweb:.*$@10.20.1.1:5000/bw-tests:latest@g' /tmp/k8s/bunkerweb.yml
|
|
sed -i 's@bunkerity/bunkerweb-autoconf:.*$@10.20.1.1:5000/bw-autoconf-tests:latest@g' /tmp/k8s/bunkerweb.yml
|
|
sed -i 's@ifNotPresent@Always@g' /tmp/k8s/bunkerweb.yml
|
|
current_dir="$(pwd)"
|
|
cd "/tmp/k8s"
|
|
|
|
# delete old objects
|
|
sudo kubectl delete -f bunkerweb.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f rbac.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f k8s.yml > /dev/null 2>&1
|
|
current_wait=0
|
|
while [ 1 ] ; do
|
|
if [ $current_wait -gt 30 ] ; then
|
|
echo "can't remove old k8s objects"
|
|
exit 1
|
|
fi
|
|
if [ "$(sudo kubectl get pods | grep "bunkerweb")" = "" ] ; then
|
|
break
|
|
fi
|
|
current_wait=$((current_wait+1))
|
|
sleep 1
|
|
done
|
|
|
|
# start the controller and instances
|
|
sudo kubectl apply -f k8s.yml
|
|
if [ $? -ne 0 ] ; then
|
|
echo "k8s failed (deploy k8s.yml)"
|
|
exit 1
|
|
fi
|
|
sudo kubectl apply -f rbac.yml
|
|
if [ $? -ne 0 ] ; then
|
|
sudo kubectl delete -f k8s.yml
|
|
echo "k8s failed (deploy rbac.yml)"
|
|
exit 1
|
|
fi
|
|
sudo kubectl apply -f bunkerweb.yml
|
|
if [ $? -ne 0 ] ; then
|
|
sudo kubectl delete -f rbac.yml
|
|
sudo kubectl delete -f k8s.yml
|
|
echo "k8s failed (deploy bunkerweb.yml)"
|
|
exit 1
|
|
fi
|
|
current_wait=0
|
|
healthy="no"
|
|
while [ $current_wait -lt 30 ] ; do
|
|
check="$(sudo kubectl get pods | grep bunkerweb | grep -v Running)"
|
|
if [ "$check" = "" ] ; then
|
|
healthy="yes"
|
|
break
|
|
fi
|
|
current_wait=$((current_wait+1))
|
|
sleep 1
|
|
done
|
|
if [ "$healthy" = "no" ] ; then
|
|
sudo kubectl get pods
|
|
sudo kubectl delete -f bunkerweb.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f rbac.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f k8s.yml > /dev/null 2>&1
|
|
echo "k8s failed (not healthy)"
|
|
exit 1
|
|
fi
|
|
cd "$current_dir"
|
|
sleep 60
|
|
|
|
# reverse
|
|
single_k8s_test "kubernetes-ingress" "120" "https://$TEST_DOMAIN1 hello" "https://$TEST_DOMAIN2 hello" "https://$TEST_DOMAIN3 hello"
|
|
|
|
# configs
|
|
single_k8s_test "kubernetes-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/k8s"
|
|
sudo kubectl delete -f bunkerweb.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f rbac.yml > /dev/null 2>&1
|
|
sudo kubectl delete -f k8s.yml > /dev/null 2>&1
|
|
cd "$current_dir"
|
|
|
|
exit 0
|