File: run-metatests.sh

package info (click to toggle)
mbedtls 3.6.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 50,424 kB
  • sloc: ansic: 164,526; sh: 25,295; python: 14,825; makefile: 2,761; perl: 1,043; tcl: 4
file content (89 lines) | stat: -rwxr-xr-x 2,090 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/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