blob: a3f9f7ced063714274ca6b5231c25f12a506ceb3 [file] [log] [blame]
Manuel Pégourié-Gonnardfb2ed582022-07-21 11:04:52 +02001#!/bin/sh
2
Manuel Pégourié-Gonnardfca4dc62022-07-26 10:10:07 +02003# This script runs tests in various revisions and configurations and analyses
4# the results in order to highlight any difference in the set of tests skipped
5# in the test suites of interest.
6#
7# It can be used to ensure the testing criteria mentioned in strategy.md,
8# end of section "Supporting builds with drivers without the software
9# implementation" are met, namely:
10#
11# - the sets of tests skipped in the default config and the full config must be
12# the same before and after the PR that implements step 3;
13# - the set of tests skipped in the driver-only build is the same as in an
14# equivalent software-based configuration, or the difference is small enough,
15# justified, and a github issue is created to track it.
16#
17# WARNING: this script checks out a commit other than the head of the current
Manuel Pégourié-Gonnard68429fc2022-07-27 20:37:12 +020018# branch; it checks out the current branch again when running successfully,
Manuel Pégourié-Gonnardfca4dc62022-07-26 10:10:07 +020019# but while the script is running, or if it terminates early in error, you
Manuel Pégourié-Gonnard68429fc2022-07-27 20:37:12 +020020# should be aware that you might be at a different commit than expected.
Manuel Pégourié-Gonnardfca4dc62022-07-26 10:10:07 +020021#
22# NOTE: This is only an example/template script, you should make a copy and
23# edit it to suit your needs. The part that needs editing is at the top.
Manuel Pégourié-Gonnardfb2ed582022-07-21 11:04:52 +020024#
25# Also, you can comment out parts that don't need to be re-done when
26# re-running this script (for example "get numbers before this PR").
27
28# ----- BEGIN edit this -----
Manuel Pégourié-Gonnardfca4dc62022-07-26 10:10:07 +020029# The component in all.sh that builds and tests with drivers.
Manuel Pégourié-Gonnardfb2ed582022-07-21 11:04:52 +020030DRIVER_COMPONENT=test_psa_crypto_config_accel_hash_use_psa
Manuel Pégourié-Gonnardfca4dc62022-07-26 10:10:07 +020031# A similar configuration to that of the component, except without drivers,
32# for comparison.
Manuel Pégourié-Gonnardfb2ed582022-07-21 11:04:52 +020033reference_config () {
34 scripts/config.py set MBEDTLS_USE_PSA_CRYPTO
35 scripts/config.py unset MBEDTLS_PKCS1_V21
36 scripts/config.py unset MBEDTLS_X509_RSASSA_PSS_SUPPORT
37 scripts/config.py unset MBEDTLS_PKCS5_C
Manuel Pégourié-Gonnardfb2ed582022-07-21 11:04:52 +020038 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC
39}
Manuel Pégourié-Gonnardfca4dc62022-07-26 10:10:07 +020040# Space-separated list of test suites of interest.
Manuel Pégourié-Gonnardfb2ed582022-07-21 11:04:52 +020041SUITES="rsa pkcs1_v15 pk pkparse pkwrite"
42# ----- END edit this -----
43
44set -eu
45
46cleanup() {
47 make clean
48 git checkout -- include/mbedtls/mbedtls_config.h include/psa/crypto_config.h
49}
50
51record() {
52 export MBEDTLS_TEST_OUTCOME_FILE="$PWD/outcome-$1.csv"
53 rm -f $MBEDTLS_TEST_OUTCOME_FILE
54 make check
55}
56
57# save current HEAD
58HEAD=$(git branch --show-current)
59
60# get the numbers before this PR for default and full
61cleanup
62git checkout $(git merge-base HEAD development)
63record "before-default"
64
65cleanup
66scripts/config.py full
67record "before-full"
68
69# get the numbers now for default and full
70cleanup
71git checkout $HEAD
72record "after-default"
73
74cleanup
75scripts/config.py full
76record "after-full"
77
78# get the numbers now for driver-only and reference
79cleanup
80reference_config
81record "reference"
82
83cleanup
84export MBEDTLS_TEST_OUTCOME_FILE="$PWD/outcome-drivers.csv"
85tests/scripts/all.sh -k test_psa_crypto_config_accel_hash_use_psa
86
87# analysis
88
89compare_suite () {
90 ref="outcome-$1.csv"
91 new="outcome-$2.csv"
92 suite="$3"
93
94 pattern_suite=";test_suite_$suite;"
95 total=$(grep -c "$pattern_suite" "$ref")
96 sed_cmd="s/^.*$pattern_suite\(.*\);SKIP.*/\1/p"
97 sed -n "$sed_cmd" "$ref" > skipped-ref
98 sed -n "$sed_cmd" "$new" > skipped-new
99 nb_ref=$(wc -l <skipped-ref)
100 nb_new=$(wc -l <skipped-new)
101
102 printf "%12s: total %3d; skipped %3d -> %3d\n" \
103 $suite $total $nb_ref $nb_new
104 diff skipped-ref skipped-new | grep '^> ' || true
105 rm skipped-ref skipped-new
106}
107
108compare_builds () {
109 printf "\n*** Comparing $1 -> $2 ***\n"
110 for suite in $SUITES; do
111 compare_suite "$1" "$2" "$suite"
112 done
113}
114
115compare_builds before-default after-default
116compare_builds before-full after-full
117compare_builds reference drivers
118