#!/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