mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
95 lines
2.4 KiB
Bash
Executable File
95 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# http://redsymbol.net/articles/unofficial-bash-strict-mode/
|
|
set -euo pipefail
|
|
IFS=$'\n\t'
|
|
|
|
source ./scripts/test_lib.sh
|
|
source ./scripts/build_lib.sh
|
|
|
|
function startContainer {
|
|
# run docker in the background
|
|
docker run -d --rm --name "${RUN_NAME}" "${IMAGE}"
|
|
|
|
# wait for etcd daemon to bootstrap
|
|
sleep 5
|
|
}
|
|
|
|
function runVersionCheck {
|
|
Out=$(docker run --rm "${IMAGE}" "${@}")
|
|
foundVersion=$(echo "$Out" | head -1 | rev | cut -d" " -f 1 | rev )
|
|
if [[ "${foundVersion}" != "${VERSION}" ]]; then
|
|
echo "error: Invalid Version. Got $foundVersion, expected $VERSION. Error: $Out"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Can't proceed without docker
|
|
if ! command -v docker >/dev/null; then
|
|
log_error "cannot find docker"
|
|
exit 1
|
|
fi
|
|
|
|
# You can't run darwin binaries in linux containers
|
|
if [[ $(go env GOOS) == "darwin" ]]; then
|
|
echo "Please use linux machine for release builds."
|
|
exit 1
|
|
fi
|
|
|
|
# Pick defaults based on release workflow
|
|
ARCH=$(go env GOARCH)
|
|
REPOSITARY=${REPOSITARY:-"gcr.io/etcd-development/etcd"}
|
|
if [ -n "$VERSION" ]; then
|
|
# Expected Format: v3.6.99-amd64
|
|
TAG=v"${VERSION}"-"${ARCH}"
|
|
else
|
|
echo "Terminating test, VERSION not supplied"
|
|
exit 1
|
|
fi
|
|
IMAGE=${IMAGE:-"${REPOSITARY}:${TAG}"}
|
|
|
|
# ETCD related values
|
|
RUN_NAME="test_etcd"
|
|
KEY="foo"
|
|
VALUE="bar"
|
|
|
|
if [[ "$(docker images -q "${IMAGE}" 2> /dev/null)" == "" ]]; then
|
|
echo "${IMAGE} not present locally"
|
|
exit 1
|
|
fi
|
|
|
|
# Version check
|
|
runVersionCheck "/usr/local/bin/etcd" "--version"
|
|
runVersionCheck "/usr/local/bin/etcdctl" "version"
|
|
runVersionCheck "/usr/local/bin/etcdutl" "version"
|
|
|
|
startContainer
|
|
# stop container
|
|
trap 'docker stop "${RUN_NAME}"' EXIT
|
|
|
|
|
|
# Put/Get check
|
|
PUT=$(docker exec "${RUN_NAME}" /usr/local/bin/etcdctl put "${KEY}" "${VALUE}")
|
|
if [ "${PUT}" != "OK" ]; then
|
|
echo "Problem with Putting in etcd"
|
|
exit 1
|
|
fi
|
|
|
|
GET=$(docker exec "${RUN_NAME}" /usr/local/bin/etcdctl get "$KEY" --print-value-only)
|
|
if [ "${GET}" != "${VALUE}" ]; then
|
|
echo "Problem with getting foo bar in etcd. Got ${GET}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Succesfully tested etcd local image ${TAG}"
|
|
|
|
for TARGET_ARCH in "amd64" "arm64" "ppc64le" "s390x"; do
|
|
ARCH_TAG=v"${VERSION}"-"${TARGET_ARCH}"
|
|
IMG_ARCH=$(docker inspect --format '{{.Architecture}}' "${REPOSITARY}:${ARCH_TAG}")
|
|
if [ "${IMG_ARCH}" != "$TARGET_ARCH" ];then
|
|
echo "Incorrect docker image architecture"
|
|
exit 1
|
|
fi
|
|
echo "Correct Architecture ${ARCH_TAG}"
|
|
done
|