podman/test/minikube/helpers.bash

112 lines
3.2 KiB
Bash

# -*- bash -*-
load ../system/helpers.bash
KUBECONFIG="$HOME/.kube/config"
##################
# run_minikube # Local helper, with instrumentation for debugging failures
##################
function run_minikube() {
# Number as first argument = expected exit code; default 0
local expected_rc=0
case "$1" in
[0-9]) expected_rc=$1; shift;;
[1-9][0-9]) expected_rc=$1; shift;;
[12][0-9][0-9]) expected_rc=$1; shift;;
'?') expected_rc= ; shift;; # ignore exit code
esac
# stdout is only emitted upon error; this printf is to help in debugging
printf "\n%s %s %s %s\n" "$(timestamp)" "\$" "minikube" "$*"
run minikube "$@"
# without "quotes", multiple lines are glommed together into one
if [[ -n "$output" ]]; then
echo "$(timestamp) $output"
fi
if [[ "$status" -ne 0 ]]; then
echo -n "$(timestamp) [ rc=$status ";
if [[ -n "$expected_rc" ]]; then
if [[ "$status" -eq "$expected_rc" ]]; then
echo -n "(expected) ";
else
echo -n "(** EXPECTED $expected_rc **) ";
fi
fi
echo "]"
fi
if [[ -n "$expected_rc" ]]; then
if [[ "$status" -ne "$expected_rc" ]]; then
# Further debugging
echo "\$ minikube logs"
run minikube logs
echo "$output"
die "exit code is $status; expected $expected_rc"
fi
fi
}
function setup(){
# only set up the minikube cluster before the first test
if [[ "$BATS_TEST_NUMBER" -eq 1 ]]; then
run_minikube start
wait_for_default_sa
fi
basic_setup
}
function teardown(){
# only delete the minikube cluster if we are done with the last test
# the $DEBUG_MINIKUBE env can be set to preserve the cluster to debug if needed
if [[ "$BATS_TEST_NUMBER" -eq ${#BATS_TEST_NAMES[@]} ]] && [[ "$DEBUG_MINIKUBE" == "" ]]; then
run_minikube delete
fi
# Prevents nasty red warnings in log
run_podman rmi --ignore $(pause_image)
basic_teardown
}
function wait_for_default_sa(){
count=0
sa_ready=false
# timeout after 30 seconds
# if the default service account hasn't been created yet, there is something else wrong
while [[ $count -lt 30 ]] && [[ $sa_ready == false ]]
do
run_minikube kubectl get sa
if [[ "$output" != "No resources found in default namespace." ]]; then
sa_ready=true
fi
count=$((count + 1))
sleep 1
done
if [[ $sa_ready == false ]]; then
die "Timed out waiting for default service account to be created"
fi
}
function wait_for_pods_to_start(){
count=0
running=false
# timeout after 30 seconds
# if the pod hasn't started running after 30 seconds, there is something else wrong
while [[ $count -lt 30 ]] && [[ $running == false ]]
do
run_minikube kubectl get pods
assert "$status" -eq 0
if [[ "$output" =~ "Running" ]]; then
running=true
fi
count=$((count + 1))
sleep 1
done
if [[ $running == false ]]; then
die "Timed out waiting for pod to move to 'Running' state"
fi
}