213 lines
6.5 KiB
Bash
Executable File
213 lines
6.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright 2025 The Kubernetes Authors All rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# The script expects the following env variables:
|
|
# OS: The operating system
|
|
# ARCH: The architecture
|
|
# DRIVER: the driver to use for the test
|
|
# CONTAINER_RUNTIME: the container runtime to use for the test
|
|
# EXTRA_START_ARGS: additional flags to pass into minikube start
|
|
# EXTRA_TEST_ARGS: additional flags to pass into go test
|
|
# JOB_NAME: the name of the logfile and check name to update on github
|
|
# PULL_NUMBER: the PR number, if applicable
|
|
|
|
function print_test_info() {
|
|
echo ">> Starting at $(date)"
|
|
echo ""
|
|
echo "user: $(whoami)"
|
|
echo "arch: ${OS_ARCH}"
|
|
echo "pr: ${PULL_NUMBER}"
|
|
echo "driver: ${DRIVER}"
|
|
echo "runtime: ${CONTAINER_RUNTIME}"
|
|
echo "job: ${JOB_NAME}"
|
|
echo "test home: ${TEST_HOME}"
|
|
echo "kernel: $(uname -v)"
|
|
echo "uptime: $(uptime)"
|
|
# Setting KUBECONFIG prevents the version check from erroring out due to permission issues
|
|
echo "kubectl: $(env KUBECONFIG=${TEST_HOME} kubectl version --client)"
|
|
echo "docker: $(docker version --format '{{ .Client.Version }}')"
|
|
echo "podman: $(sudo podman version --format '{{.Version}}' || true)"
|
|
echo "go: $(go version || true)"
|
|
|
|
case "${DRIVER}" in
|
|
kvm2)
|
|
echo "virsh: $(virsh --version)"
|
|
;;
|
|
virtualbox)
|
|
echo "vbox: $(vboxmanage --version)"
|
|
;;
|
|
vfkit)
|
|
echo "vfkit: $(vfkit --version)"
|
|
;;
|
|
krunkit)
|
|
echo "krunkit: $(krunkit --version)"
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
}
|
|
|
|
function install_dependencies() {
|
|
# We need pstree for the restart cronjobs
|
|
if [ "$(uname)" != "Darwin" ]; then
|
|
sudo apt-get -y install lsof psmisc dnsutils
|
|
else
|
|
brew install pstree coreutils pidof
|
|
ln -s /usr/local/bin/gtimeout /usr/local/bin/timeout || true
|
|
fi
|
|
# install golang if not present
|
|
sudo hack/prow/installer/check_install_golang.sh /usr/local 1.24.5 || true
|
|
# install gotestsum if not present
|
|
GOROOT="/usr/local/go" hack/prow/installer/check_install_gotestsum.sh || true
|
|
# install gopogh
|
|
hack/prow/installer/check_install_gopogh.sh || true
|
|
|
|
# install jq
|
|
if ! type "jq" >/dev/null; then
|
|
echo ">> Installing jq"
|
|
if [ "${ARCH}" == "arm64" && "${OS}" == "linux" ]; then
|
|
sudo apt-get install jq -y
|
|
elif [ "${ARCH}" == "arm64" ]; then
|
|
echo "Unable to install 'jq' automatically for arm64 on Darwin, please install 'jq' manually."
|
|
exit 5
|
|
elif [ "${OS}" != "darwin" ]; then
|
|
curl -LO https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 && sudo install jq-linux64 /usr/local/bin/jq
|
|
else
|
|
curl -LO https://github.com/stedolan/jq/releases/download/jq-1.6/jq-osx-amd64 && sudo install jq-osx-amd64 /usr/local/bin/jq
|
|
fi
|
|
fi
|
|
|
|
}
|
|
|
|
function docker_setup() {
|
|
|
|
# clean all docker artifacts up
|
|
docker system prune -a --volumes -f || true
|
|
docker system df || true
|
|
docker rm -f -v $(docker ps -aq) >/dev/null 2>&1 || true
|
|
|
|
# read only token, never expires
|
|
#todo: do we need this token
|
|
# docker login -u minikubebot -p "$DOCKERHUB_READONLY_TOKEN"
|
|
}
|
|
|
|
function gvisor_image_build() {
|
|
# Build the gvisor image so that we can integration test changes to pkg/gvisor
|
|
chmod +x testdata/gvisor-addon
|
|
# skipping gvisor mac because ofg https://github.com/kubernetes/minikube/issues/5137
|
|
if [ "$(uname)" != "Darwin" ]; then
|
|
# Should match GVISOR_IMAGE_VERSION in Makefile
|
|
docker build -t gcr.io/k8s-minikube/gvisor-addon:2 -f testdata/gvisor-addon-Dockerfile ./testdata
|
|
fi
|
|
}
|
|
|
|
function run_gopogh() {
|
|
# todo: currently we do not save to gopogh db
|
|
echo "Not saving to DB"
|
|
gopogh -in "${JSON_OUT}" -out_html "${HTML_OUT}" -out_summary "${SUMMARY_OUT}" -name "${JOB_NAME}" -pr "${PULL_NUMBER}" -repo github.com/kubernetes/minikube/ -details "${COMMIT}:$(date +%Y-%m-%d)"
|
|
|
|
}
|
|
|
|
# this is where the script starts
|
|
readonly OS_ARCH="${OS}-${ARCH}"
|
|
readonly TEST_ROOT="${HOME}/minikube-integration"
|
|
readonly TEST_HOME="${TEST_ROOT}/${MINIKUBE_LOCATION}-$$"
|
|
|
|
export GOPATH="$HOME/go"
|
|
export KUBECONFIG="${TEST_HOME}/kubeconfig"
|
|
export PATH=$PATH:"/usr/local/bin/:/usr/local/go/bin/:$GOPATH/bin"
|
|
export MINIKUBE_SUPPRESS_DOCKER_PERFORMANCE=true
|
|
|
|
readonly TIMEOUT=120m
|
|
|
|
cp -r test/integration/testdata .
|
|
|
|
# Add the out/ directory to the PATH, for using new drivers.
|
|
export PATH="$(pwd)/out/":$PATH
|
|
mkdir -p "${TEST_ROOT}"
|
|
mkdir -p "${TEST_HOME}"
|
|
export MINIKUBE_HOME="${TEST_HOME}/.minikube"
|
|
export MINIKUBE_BIN="out/minikube-${OS_ARCH}"
|
|
export E2E_BIN="out/e2e-${OS_ARCH}"
|
|
|
|
install_dependencies
|
|
docker_setup
|
|
|
|
|
|
if [ "$CONTAINER_RUNTIME" == "containerd" ]; then
|
|
cp out/gvisor-addon testdata/
|
|
gvisor_image_build
|
|
fi
|
|
|
|
print_test_info
|
|
|
|
readonly TEST_OUT="${TEST_HOME}/testout.txt"
|
|
readonly JSON_OUT="${TEST_HOME}/test.json"
|
|
readonly JUNIT_OUT="${TEST_HOME}/junit-unit.xml"
|
|
readonly HTML_OUT="${TEST_HOME}/test.html"
|
|
readonly SUMMARY_OUT="${TEST_HOME}/test_summary.json"
|
|
|
|
touch "${TEST_OUT}"
|
|
touch "${JSON_OUT}"
|
|
touch "${JUNIT_OUT}"
|
|
touch "${HTML_OUT}"
|
|
touch "${SUMMARY_OUT}"
|
|
|
|
e2e_start_time="$(date -u +%s)"
|
|
echo ""
|
|
echo ">> Starting ${E2E_BIN} at $(date)"
|
|
set -x
|
|
|
|
EXTRA_START_ARGS="${EXTRA_START_ARGS} --container-runtime=${CONTAINER_RUNTIME}"
|
|
echo $PATH
|
|
gotestsum --jsonfile "${JSON_OUT}" --junitfile="${JUNIT_OUT}" -f standard-verbose --raw-command -- \
|
|
go tool test2json -t \
|
|
${E2E_BIN} \
|
|
-minikube-start-args="--driver=${DRIVER} ${EXTRA_START_ARGS}" \
|
|
-test.timeout=${TIMEOUT} -test.v \
|
|
${EXTRA_TEST_ARGS} \
|
|
-binary="${MINIKUBE_BIN}" 2>&1 |
|
|
tee "${TEST_OUT}"
|
|
|
|
result=${PIPESTATUS[0]} # capture the exit code of the first cmd in pipe.
|
|
set +x
|
|
echo ">> ${E2E_BIN} exited with ${result} at $(date)"
|
|
echo ""
|
|
|
|
# calculate the time took to finish running e2e binary test.
|
|
e2e_end_time="$(date -u +%s)"
|
|
elapsed=$(($e2e_end_time - $e2e_start_time))
|
|
min=$(($elapsed / 60))
|
|
sec=$(tail -c 3 <<<$((${elapsed}00 / 60)))
|
|
elapsed=$min.$sec
|
|
|
|
#todo: currently we skip gopogh upload , we shall add it back
|
|
run_gopogh
|
|
|
|
# according to prow's requirement, upload the test report to $ARTIFACTS
|
|
cp ${TEST_OUT} .
|
|
cp ${JSON_OUT} .
|
|
cp ${JUNIT_OUT} .
|
|
cp ${HTML_OUT} .
|
|
cp ${SUMMARY_OUT} .
|
|
if [[ $result -eq 0 ]]; then
|
|
echo "minikube: SUCCESS"
|
|
else
|
|
echo "minikube: FAIL"
|
|
fi
|
|
|
|
exit "$result"
|