ci-automation/vendor-testing/equinix_metal.sh: Use test framework

The test framework from the AWS PR allows us to align the logic which
also addresses some bugs we had here.
Port the Equinix Metal test over to the new framework (and also use
different test basenames per architecture while at it which could
otherwise result in clashes).
This commit is contained in:
Kai Lueke 2022-05-11 11:39:30 +09:00
parent 7182b171f1
commit 9fe14ffe34

View File

@ -7,7 +7,7 @@ set -euo pipefail
# Test execution script for the Equinix Metal vendor image. # Test execution script for the Equinix Metal vendor image.
# This script is supposed to run in the mantle container. # This script is supposed to run in the mantle container.
# This script requires "pxe" Jenkins job. # This script requires the PXE images to be built.
source ci-automation/vendor_test.sh source ci-automation/vendor_test.sh
@ -25,14 +25,14 @@ timeout=6h
BASE_URL="http://${BUILDCACHE_SERVER}/images/${CIA_ARCH}/${CIA_VERNUM}" BASE_URL="http://${BUILDCACHE_SERVER}/images/${CIA_ARCH}/${CIA_VERNUM}"
run_equinix_metal_kola_test() { run_kola_tests() {
local instance_type="${1}" local instance_type="${1}"; shift
local instance_tapfile="${2}" local instance_tapfile="${1}"; shift
timeout --signal=SIGQUIT "${timeout}" \ timeout --signal=SIGQUIT "${timeout}" \
kola run \ kola run \
--board="${CIA_ARCH}-usr" \ --board="${CIA_ARCH}-usr" \
--basename="ci-${CIA_VERNUM/+/-}" \ --basename="ci-${CIA_VERNUM/+/-}-${CIA_ARCH}" \
--platform=equinixmetal \ --platform=equinixmetal \
--tapfile="${instance_tapfile}" \ --tapfile="${instance_tapfile}" \
--parallel="${EQUINIXMETAL_PARALLEL}" \ --parallel="${EQUINIXMETAL_PARALLEL}" \
@ -47,59 +47,19 @@ run_equinix_metal_kola_test() {
--gce-json-key=<(set +x; echo "${GCP_JSON_KEY}" | base64 --decode) \ --gce-json-key=<(set +x; echo "${GCP_JSON_KEY}" | base64 --decode) \
--equinixmetal-api-key="${EQUINIXMETAL_KEY}" \ --equinixmetal-api-key="${EQUINIXMETAL_KEY}" \
"${@}" "${@}"
# compare the tested instance with the default instance type.
if [[ "${instance_type}" != "${EQUINIXMETAL_INSTANCE_TYPE}" ]]; then
sed --in-place "s/cl\.internet/${instance_type}\.cl\.internet/" "${instance_tapfile}"
fi
} }
cl_internet_included="$(kola list --platform=equinixmetal --filter "${@}" | { grep cl.internet || : ; } )" query_kola_tests() {
shift; # ignore the instance type
kola list --platform=equinixmetal --filter "${@}"
}
# in case of rerun, we need to convert <instance-type>.cl.internet run_kola_tests_on_instances \
# to regular cl.internet tests on the correct instance type. "${EQUINIXMETAL_INSTANCE_TYPE}" \
instance_types=() "${CIA_TAPFILE}" \
for t in "${@}"; do "${CIA_FIRST_RUN}" \
if [[ "${t}" =~ ".cl.internet" ]]; then "${MORE_INSTANCE_TYPES[@]}" \
instance_types+=( "${t/\.cl\.internet/}" ) '--' \
# cl_internet needs to run. 'cl.internet' \
cl_internet_included="yes" '--' \
fi "${@}"
done
# Remove any <instance-type>.cl.internet in ${@}
set -o noglob
set -- $(echo "$*" | sed 's/[^[:space:]]*\.cl\.internet//g')
set +o noglob
# empty array is seen as unbound variable.
set +u
[[ "${#instance_types}" -gt 0 ]] && MORE_INSTANCE_TYPES=( "${instance_types[@]}" )
set -u
run_more_tests=0
[[ -n "${cl_internet_included}" ]] && [[ "${#MORE_INSTANCE_TYPES[@]}" -gt 0 ]] && run_more_tests=1
if [[ "${run_more_tests}" -eq 1 ]]; then
for instance_type in "${MORE_INSTANCE_TYPES[@]}"; do
(
OUTPUT=$(set +x; run_equinix_metal_kola_test "${instance_type}" "validate_${instance_type}.tap" 'cl.internet' 2>&1 || :)
echo "=== START ${instance_type} ==="
echo "${OUTPUT}" | sed "s/^/${instance_type}: /g"
echo "=== END ${instance_type} ==="
) &
done
fi
# Skip regular run if only <instance-type>.cl.internet were to be tested
ARGS="$*"
if [[ -n "${ARGS// }" ]]; then
set -x
run_equinix_metal_kola_test "${EQUINIXMETAL_INSTANCE_TYPE}" "${CIA_TAPFILE}" "${@}"
set +x
fi
if [[ "${run_more_tests}" -eq 1 ]]; then
wait
cat validate_*.tap >>"${CIA_TAPFILE}"
fi