kubectl/scripts/unit-test-image.sh

66 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Define usage function
usage() {
echo "Usage: $0 [-P optional image pull] kubectl_version"
exit 1
}
: "${REPO:=rancher/kubectl}"
PULL=false
# Parse options
while getopts "P" opt; do
case ${opt} in
P)
PULL=TRUE
;;
\? )
echo "Invalid option: $OPTARG" 1>&2
usage
;;
: )
echo "Invalid option: $OPTARG requires an argument" 1>&2
usage
;;
esac
done
shift $((OPTIND -1))
# Check if required argument is provided
if [ $# -eq 0 ]; then
echo "Missing required argument" 1>&2
usage
fi
VERSION="${1:-UNSET}"
IMAGE_NAME="$REPO:$VERSION"
echo The image to be tested is "$IMAGE_NAME"
if [ "$PULL" == "TRUE" ]; then
echo "Pulling image first..."
if ! docker image pull "$IMAGE_NAME"; then
echo "FAIL: Failed to pull image $IMAGE_NAME"
exit 1
fi
fi
echo "Testing run..."
OUT=$(docker run --rm "$IMAGE_NAME" version --client=true)
RUN_RES=$?
if [[ $RUN_RES -ne 0 ]]; then
echo "FAIL: Cannot find image for Expected version (${VERSION})."
exit 1
fi
# Clean up version for comparison by stripping any suffix
EXPECTED_VERSION=${VERSION%%-*}
if [[ $RUN_RES -eq 0 && $OUT =~ .*${EXPECTED_VERSION}.* ]]; then
echo "PASS: Expected version found in output."
exit 0
fi
echo "FAIL: Expected version (${EXPECTED_VERSION}) not found in output. Using image tag (${VERSION})"
echo "Output Found:"
echo "$OUT"
exit 1