mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-08-31 16:36:38 +00:00
various manual fixes. Related to: #10951 Signed-off-by: Lukáš Doktor <ldoktor@redhat.com>
96 lines
2.8 KiB
Bash
Executable File
96 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2020 Red Hat, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
# Run a smoke test.
|
|
#
|
|
|
|
script_dir=$(dirname "$0")
|
|
# shellcheck disable=SC1091 # import based on variable
|
|
source "${script_dir}/lib.sh"
|
|
|
|
pod='http-server'
|
|
|
|
# Create a pod.
|
|
#
|
|
info "Creating the ${pod} pod"
|
|
[[ -z "${KATA_RUNTIME}" ]] && die "Please set the KATA_RUNTIME first"
|
|
envsubst < "${script_dir}/smoke/${pod}.yaml.in" | \
|
|
oc apply -f - || \
|
|
die "failed to create ${pod} pod"
|
|
|
|
# Check it eventually goes to 'running'
|
|
#
|
|
wait_time=600
|
|
sleep_time=5
|
|
cmd="oc get pod/${pod} -o jsonpath='{.status.containerStatuses[0].state}' | \
|
|
grep running > /dev/null"
|
|
info "Wait until the pod gets running"
|
|
waitForProcess "${wait_time}" "${sleep_time}" "${cmd}" || timed_out=$?
|
|
if [[ -n "${timed_out}" ]]; then
|
|
oc describe "pod/${pod}"
|
|
oc delete "pod/${pod}"
|
|
die "${pod} not running"
|
|
fi
|
|
info "${pod} is running"
|
|
|
|
# Add a file with the hello message
|
|
#
|
|
hello_file=/tmp/hello
|
|
hello_msg='Hello World'
|
|
oc exec "${pod}" -- sh -c "echo ${hello_msg} > ${hello_file}"
|
|
|
|
info "Creating the service and route"
|
|
if oc apply -f "${script_dir}/smoke/service.yaml"; then
|
|
# Likely on OCP, use service
|
|
is_ocp=1
|
|
host=$(oc get route/http-server-route -o jsonpath="{.spec.host}")
|
|
port=80
|
|
else
|
|
# Likely on plain kubernetes, test using another container
|
|
is_ocp=0
|
|
info "Failed to create service, likely not on OCP, trying via NodePort"
|
|
oc apply -f "${script_dir}/smoke/service_kubernetes.yaml"
|
|
# For some reason kcli's cluster lists external IP as internal IP, try both
|
|
host=$(oc get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="ExternalIP")].address}')
|
|
[[ -z "${host}" ]] && host=$(oc get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
|
|
port=$(oc get service/http-server-service -o jsonpath='{.spec.ports[0].nodePort}')
|
|
fi
|
|
|
|
info "Wait for the HTTP server to respond"
|
|
tempfile=$(mktemp)
|
|
check_cmd="curl -vvv '${host}:${port}${hello_file}' 2>&1 | tee -a '${tempfile}' | grep -q '${hello_msg}'"
|
|
if waitForProcess 60 1 "${check_cmd}"; then
|
|
test_status=0
|
|
info "HTTP server is working"
|
|
else
|
|
test_status=1
|
|
echo "::error:: HTTP server not working"
|
|
echo "::group::Output of the \"curl -vvv '${host}:${port}${hello_file}'\""
|
|
cat "${tempfile}"
|
|
echo "::endgroup::"
|
|
echo "::group::Describe kube-system namespace"
|
|
oc describe -n kube-system all
|
|
echo "::endgroup::"
|
|
echo "::group::Descibe current namespace"
|
|
oc describe all
|
|
echo "::endgroup::"
|
|
info "HTTP server is unreachable"
|
|
fi
|
|
rm -f "${tempfile}"
|
|
|
|
# Delete the resources.
|
|
#
|
|
info "Deleting the service/route"
|
|
if [[ "${is_ocp}" -eq 0 ]]; then
|
|
oc delete -f "${script_dir}/smoke/service_kubernetes.yaml"
|
|
else
|
|
oc delete -f "${script_dir}/smoke/service.yaml"
|
|
fi
|
|
info "Deleting the ${pod} pod"
|
|
oc delete "pod/${pod}" || test_status=$?
|
|
|
|
exit "${test_status}"
|