| #!/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. |
| |
| 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. |
| |
| -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 |
| for pattern in "$@"; do |
| 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 |