blob: 1b23acf633c2236270186da5d455152d6a5f3dc2 [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
18# branch; it checks out the current branch again when running sucessfully,
19# but while the script is running, or if it terminates early in error, you
20# should be aware that yu might be at a different commit than expected.
21#
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
38 scripts/config.py unset MBEDTLS_PKCS12_C
39 scripts/config.py unset MBEDTLS_ECDSA_DETERMINISTIC
40}
Manuel Pégourié-Gonnardfca4dc62022-07-26 10:10:07 +020041# Space-separated list of test suites of interest.
Manuel Pégourié-Gonnardfb2ed582022-07-21 11:04:52 +020042SUITES="rsa pkcs1_v15 pk pkparse pkwrite"
43# ----- END edit this -----
44
45set -eu
46
47cleanup() {
48 make clean
49 git checkout -- include/mbedtls/mbedtls_config.h include/psa/crypto_config.h
50}
51
52record() {
53 export MBEDTLS_TEST_OUTCOME_FILE="$PWD/outcome-$1.csv"
54 rm -f $MBEDTLS_TEST_OUTCOME_FILE
55 make check
56}
57
58# save current HEAD
59HEAD=$(git branch --show-current)
60
61# get the numbers before this PR for default and full
62cleanup
63git checkout $(git merge-base HEAD development)
64record "before-default"
65
66cleanup
67scripts/config.py full
68record "before-full"
69
70# get the numbers now for default and full
71cleanup
72git checkout $HEAD
73record "after-default"
74
75cleanup
76scripts/config.py full
77record "after-full"
78
79# get the numbers now for driver-only and reference
80cleanup
81reference_config
82record "reference"
83
84cleanup
85export MBEDTLS_TEST_OUTCOME_FILE="$PWD/outcome-drivers.csv"
86tests/scripts/all.sh -k test_psa_crypto_config_accel_hash_use_psa
87
88# analysis
89
90compare_suite () {
91 ref="outcome-$1.csv"
92 new="outcome-$2.csv"
93 suite="$3"
94
95 pattern_suite=";test_suite_$suite;"
96 total=$(grep -c "$pattern_suite" "$ref")
97 sed_cmd="s/^.*$pattern_suite\(.*\);SKIP.*/\1/p"
98 sed -n "$sed_cmd" "$ref" > skipped-ref
99 sed -n "$sed_cmd" "$new" > skipped-new
100 nb_ref=$(wc -l <skipped-ref)
101 nb_new=$(wc -l <skipped-new)
102
103 printf "%12s: total %3d; skipped %3d -> %3d\n" \
104 $suite $total $nb_ref $nb_new
105 diff skipped-ref skipped-new | grep '^> ' || true
106 rm skipped-ref skipped-new
107}
108
109compare_builds () {
110 printf "\n*** Comparing $1 -> $2 ***\n"
111 for suite in $SUITES; do
112 compare_suite "$1" "$2" "$suite"
113 done
114}
115
116compare_builds before-default after-default
117compare_builds before-full after-full
118compare_builds reference drivers
119