2023-11-02 19:23:41 +01:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
help () {
|
|
|
|
cat <<EOF
|
|
|
|
Usage: $0 [OPTION] [PLATFORM]...
|
|
|
|
Run all the metatests whose platform matches any of the given PLATFORM.
|
|
|
|
A PLATFORM can contain shell wildcards.
|
|
|
|
|
2023-11-10 15:36:15 +01:00
|
|
|
Expected output: a lot of scary-looking error messages, since each
|
|
|
|
metatest is expected to report a failure. The final line should be
|
|
|
|
"Ran N metatests, all good."
|
|
|
|
|
|
|
|
If something goes wrong: the final line should be
|
|
|
|
"Ran N metatests, X unexpected successes". Look for "Unexpected success"
|
|
|
|
in the logs above.
|
|
|
|
|
2023-11-02 19:23:41 +01:00
|
|
|
-l List the available metatests, don't run them.
|
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
# Copyright The Mbed TLS Contributors
|
|
|
|
# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
|
|
|
|
|
|
|
|
set -e -u
|
|
|
|
|
|
|
|
if [ -d programs ]; then
|
|
|
|
METATEST_PROGRAM=programs/test/metatest
|
|
|
|
elif [ -d ../programs ]; then
|
|
|
|
METATEST_PROGRAM=../programs/test/metatest
|
|
|
|
elif [ -d ../../programs ]; then
|
|
|
|
METATEST_PROGRAM=../../programs/test/metatest
|
|
|
|
else
|
|
|
|
echo >&2 "$0: FATAL: programs/test/metatest not found"
|
|
|
|
exit 120
|
|
|
|
fi
|
|
|
|
|
|
|
|
LIST_ONLY=
|
|
|
|
while getopts hl OPTLET; do
|
|
|
|
case $OPTLET in
|
|
|
|
h) help; exit;;
|
|
|
|
l) LIST_ONLY=1;;
|
|
|
|
\?) help >&2; exit 120;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
shift $((OPTIND - 1))
|
|
|
|
|
|
|
|
list_matches () {
|
|
|
|
while read name platform junk; do
|
2023-11-15 16:56:26 +01:00
|
|
|
for pattern in "$@"; do
|
2023-11-02 19:23:41 +01:00
|
|
|
case $platform in
|
|
|
|
$pattern) echo "$name"; break;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
count=0
|
|
|
|
errors=0
|
|
|
|
run_metatest () {
|
|
|
|
ret=0
|
|
|
|
"$METATEST_PROGRAM" "$1" || ret=$?
|
|
|
|
if [ $ret -eq 0 ]; then
|
|
|
|
echo >&2 "$0: Unexpected success: $1"
|
|
|
|
errors=$((errors + 1))
|
|
|
|
fi
|
|
|
|
count=$((count + 1))
|
|
|
|
}
|
|
|
|
|
|
|
|
# Don't pipe the output of metatest so that if it fails, this script exits
|
|
|
|
# immediately with a failure status.
|
|
|
|
full_list=$("$METATEST_PROGRAM" list)
|
|
|
|
matching_list=$(printf '%s\n' "$full_list" | list_matches "$@")
|
|
|
|
|
|
|
|
if [ -n "$LIST_ONLY" ]; then
|
|
|
|
printf '%s\n' $matching_list
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
|
|
|
for name in $matching_list; do
|
|
|
|
run_metatest "$name"
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ $errors -eq 0 ]; then
|
|
|
|
echo "Ran $count metatests, all good."
|
|
|
|
exit 0
|
|
|
|
else
|
|
|
|
echo "Ran $count metatests, $errors unexpected successes."
|
|
|
|
exit 1
|
|
|
|
fi
|