verify: additional validation of e2e.test --list-images output

If the command failed in the <( ... ) expression, the return code was ignored
and the script continued with potentially no output. Not likely, but it's still
better to invoke the command where pipefail will catch a non-zero exit
code. For example, broken test registration could cause this.

There should be no log output, but if there is, failing explicitly is better
than ignoring it (on stderr) or treating it like an image (on stdout). Found
when experimenting with the logging configuration of e2e.test, currently there
is no such unwanted log output.
This commit is contained in:
Patrick Ohly
2025-06-24 10:15:20 +02:00
parent 73627dd663
commit 49ebabb54e

View File

@@ -22,6 +22,7 @@ KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
cd "${KUBE_ROOT}"
source hack/lib/init.sh
ret=0
# NOTE: Please do NOT add any to this list!!
#
@@ -34,10 +35,28 @@ kube::util::read-array PERMITTED_IMAGES < <(sed '/^#/d' ./test/images/.permitted
echo "Getting e2e image list ..."
make WHAT=test/e2e/e2e.test
e2e_test="$(kube::util::find-binary e2e.test)"
kube::util::read-array IMAGES < <("${e2e_test}" --list-images | sed -E 's/^(.+):[^:]+$/\1/' | LC_ALL=C sort -u)
# validate "e2e.test --list-images":
# - no unexpected output (whether it's on stderr or stdout)
# - zero exit code (indirectly ensures that tests are set up properly)
output=$("${e2e_test}" --list-images 2>&1) || ret=$?
if [[ $ret -ne 0 ]]; then
>&2 echo "FAIL: '${e2e_test} --list-images' failed:"
>&2 echo "${output}"
exit 1
fi
unexpected_output=$(echo "${output}" | grep -v -E '^([[:alnum:]/.-]+):[^:]+$' || true)
if [[ -n "${unexpected_output}" ]]; then
>&2 echo "FAIL: '${e2e_test} --list-images' printed unexpected output:"
>&2 echo "${unexpected_output}"
exit 1
fi
# extract image names without the version
kube::util::read-array IMAGES < <(echo "${output}" | sed -E 's/^([[:alnum:]/.-]+):[^:]+$/\1/' | LC_ALL=C sort -u)
# diff versus known permitted images
ret=0
>&2 echo "Diffing e2e image list ..."
# diff context is irrelevant here because of sorting.
# Instead we want to know about old images (no longer in use, need to be removed)