xref: /aosp_15_r20/external/mbedtls/docs/architecture/psa-migration/outcome-analysis.sh (revision 62c56f9862f102b96d72393aff6076c951fb8148)
1*62c56f98SSadaf Ebrahimi#!/bin/sh
2*62c56f98SSadaf Ebrahimi
3*62c56f98SSadaf Ebrahimi# This script runs tests before and after a PR and analyzes the results in
4*62c56f98SSadaf Ebrahimi# order to highlight any difference in the set of tests skipped.
5*62c56f98SSadaf Ebrahimi#
6*62c56f98SSadaf Ebrahimi# It can be used to check the first testing criterion mentioned in strategy.md,
7*62c56f98SSadaf Ebrahimi# end of section "Supporting builds with drivers without the software
8*62c56f98SSadaf Ebrahimi# implementation", namely: the sets of tests skipped in the default config and
9*62c56f98SSadaf Ebrahimi# the full config must be the same before and after the PR.
10*62c56f98SSadaf Ebrahimi#
11*62c56f98SSadaf Ebrahimi# USAGE:
12*62c56f98SSadaf Ebrahimi# - First, commit any uncommited changes. (Also, see warning below.)
13*62c56f98SSadaf Ebrahimi# - Then launch --> [SKIP_SSL_OPT=1] docs/architecture/psa-migration/outcome-analysis.sh
14*62c56f98SSadaf Ebrahimi#     - SKIP_SSL_OPT=1 can optionally be set to skip ssl-opt.sh tests
15*62c56f98SSadaf Ebrahimi#
16*62c56f98SSadaf Ebrahimi# WARNING: this script checks out a commit other than the head of the current
17*62c56f98SSadaf Ebrahimi# branch; it checks out the current branch again when running successfully,
18*62c56f98SSadaf Ebrahimi# but while the script is running, or if it terminates early in error, you
19*62c56f98SSadaf Ebrahimi# should be aware that you might be at a different commit than expected.
20*62c56f98SSadaf Ebrahimi#
21*62c56f98SSadaf Ebrahimi# NOTE: you can comment out parts that don't need to be re-done when
22*62c56f98SSadaf Ebrahimi# re-running this script (for example "get numbers before this PR").
23*62c56f98SSadaf Ebrahimi
24*62c56f98SSadaf Ebrahimiset -eu
25*62c56f98SSadaf Ebrahimi
26*62c56f98SSadaf Ebrahimi: ${SKIP_SSL_OPT:=0}
27*62c56f98SSadaf Ebrahimi
28*62c56f98SSadaf Ebrahimicleanup() {
29*62c56f98SSadaf Ebrahimi    make clean
30*62c56f98SSadaf Ebrahimi    git checkout -- include/mbedtls/mbedtls_config.h include/psa/crypto_config.h
31*62c56f98SSadaf Ebrahimi}
32*62c56f98SSadaf Ebrahimi
33*62c56f98SSadaf Ebrahimirecord() {
34*62c56f98SSadaf Ebrahimi    export MBEDTLS_TEST_OUTCOME_FILE="$PWD/outcome-$1.csv"
35*62c56f98SSadaf Ebrahimi    rm -f $MBEDTLS_TEST_OUTCOME_FILE
36*62c56f98SSadaf Ebrahimi
37*62c56f98SSadaf Ebrahimi    make check
38*62c56f98SSadaf Ebrahimi
39*62c56f98SSadaf Ebrahimi    if [ $SKIP_SSL_OPT -eq 0 ]; then
40*62c56f98SSadaf Ebrahimi        make -C programs ssl/ssl_server2 ssl/ssl_client2 \
41*62c56f98SSadaf Ebrahimi            test/udp_proxy test/query_compile_time_config
42*62c56f98SSadaf Ebrahimi        tests/ssl-opt.sh
43*62c56f98SSadaf Ebrahimi    fi
44*62c56f98SSadaf Ebrahimi}
45*62c56f98SSadaf Ebrahimi
46*62c56f98SSadaf Ebrahimi# save current HEAD.
47*62c56f98SSadaf Ebrahimi# Note: this can optionally be updated to
48*62c56f98SSadaf Ebrahimi#   HEAD=$(git branch --show-current)
49*62c56f98SSadaf Ebrahimi# when using a Git version above 2.22
50*62c56f98SSadaf EbrahimiHEAD=$(git rev-parse --abbrev-ref HEAD)
51*62c56f98SSadaf Ebrahimi
52*62c56f98SSadaf Ebrahimi# get the numbers before this PR for default and full
53*62c56f98SSadaf Ebrahimicleanup
54*62c56f98SSadaf Ebrahimigit checkout $(git merge-base HEAD development)
55*62c56f98SSadaf Ebrahimi
56*62c56f98SSadaf Ebrahimirecord "before-default"
57*62c56f98SSadaf Ebrahimi
58*62c56f98SSadaf Ebrahimicleanup
59*62c56f98SSadaf Ebrahimi
60*62c56f98SSadaf Ebrahimiscripts/config.py full
61*62c56f98SSadaf Ebrahimirecord "before-full"
62*62c56f98SSadaf Ebrahimi
63*62c56f98SSadaf Ebrahimi# get the numbers now for default and full
64*62c56f98SSadaf Ebrahimicleanup
65*62c56f98SSadaf Ebrahimigit checkout $HEAD
66*62c56f98SSadaf Ebrahimi
67*62c56f98SSadaf Ebrahimirecord "after-default"
68*62c56f98SSadaf Ebrahimi
69*62c56f98SSadaf Ebrahimicleanup
70*62c56f98SSadaf Ebrahimi
71*62c56f98SSadaf Ebrahimiscripts/config.py full
72*62c56f98SSadaf Ebrahimirecord "after-full"
73*62c56f98SSadaf Ebrahimi
74*62c56f98SSadaf Ebrahimicleanup
75*62c56f98SSadaf Ebrahimi
76*62c56f98SSadaf Ebrahimi# analysis
77*62c56f98SSadaf Ebrahimi
78*62c56f98SSadaf Ebrahimipopulate_suites () {
79*62c56f98SSadaf Ebrahimi    SUITES=''
80*62c56f98SSadaf Ebrahimi    make generated_files >/dev/null
81*62c56f98SSadaf Ebrahimi    data_files=$(cd tests/suites && echo *.data)
82*62c56f98SSadaf Ebrahimi    for data in $data_files; do
83*62c56f98SSadaf Ebrahimi        suite=${data%.data}
84*62c56f98SSadaf Ebrahimi        SUITES="$SUITES $suite"
85*62c56f98SSadaf Ebrahimi    done
86*62c56f98SSadaf Ebrahimi    make neat
87*62c56f98SSadaf Ebrahimi
88*62c56f98SSadaf Ebrahimi    if [ $SKIP_SSL_OPT -eq 0 ]; then
89*62c56f98SSadaf Ebrahimi        SUITES="$SUITES ssl-opt"
90*62c56f98SSadaf Ebrahimi        extra_files=$(cd tests/opt-testcases && echo *.sh)
91*62c56f98SSadaf Ebrahimi        for extra in $extra_files; do
92*62c56f98SSadaf Ebrahimi            suite=${extra%.sh}
93*62c56f98SSadaf Ebrahimi            SUITES="$SUITES $suite"
94*62c56f98SSadaf Ebrahimi        done
95*62c56f98SSadaf Ebrahimi    fi
96*62c56f98SSadaf Ebrahimi}
97*62c56f98SSadaf Ebrahimi
98*62c56f98SSadaf Ebrahimicompare_suite () {
99*62c56f98SSadaf Ebrahimi    ref="outcome-$1.csv"
100*62c56f98SSadaf Ebrahimi    new="outcome-$2.csv"
101*62c56f98SSadaf Ebrahimi    suite="$3"
102*62c56f98SSadaf Ebrahimi
103*62c56f98SSadaf Ebrahimi    pattern_suite=";$suite;"
104*62c56f98SSadaf Ebrahimi    total=$(grep -c "$pattern_suite" "$ref")
105*62c56f98SSadaf Ebrahimi    sed_cmd="s/^.*$pattern_suite\(.*\);SKIP.*/\1/p"
106*62c56f98SSadaf Ebrahimi    sed -n "$sed_cmd" "$ref" > skipped-ref
107*62c56f98SSadaf Ebrahimi    sed -n "$sed_cmd" "$new" > skipped-new
108*62c56f98SSadaf Ebrahimi    nb_ref=$(wc -l <skipped-ref)
109*62c56f98SSadaf Ebrahimi    nb_new=$(wc -l <skipped-new)
110*62c56f98SSadaf Ebrahimi
111*62c56f98SSadaf Ebrahimi    name=${suite#test_suite_}
112*62c56f98SSadaf Ebrahimi    printf "%40s: total %4d; skipped %4d -> %4d\n" \
113*62c56f98SSadaf Ebrahimi            $name       $total       $nb_ref $nb_new
114*62c56f98SSadaf Ebrahimi    if diff skipped-ref skipped-new | grep '^> '; then
115*62c56f98SSadaf Ebrahimi        ret=1
116*62c56f98SSadaf Ebrahimi    else
117*62c56f98SSadaf Ebrahimi        ret=0
118*62c56f98SSadaf Ebrahimi    fi
119*62c56f98SSadaf Ebrahimi    rm skipped-ref skipped-new
120*62c56f98SSadaf Ebrahimi    return $ret
121*62c56f98SSadaf Ebrahimi}
122*62c56f98SSadaf Ebrahimi
123*62c56f98SSadaf Ebrahimicompare_builds () {
124*62c56f98SSadaf Ebrahimi    printf "\n*** Comparing $1 -> $2 ***\n"
125*62c56f98SSadaf Ebrahimi    failed=''
126*62c56f98SSadaf Ebrahimi    for suite in $SUITES; do
127*62c56f98SSadaf Ebrahimi        if compare_suite "$1" "$2" "$suite"; then :; else
128*62c56f98SSadaf Ebrahimi            failed="$failed $suite"
129*62c56f98SSadaf Ebrahimi        fi
130*62c56f98SSadaf Ebrahimi    done
131*62c56f98SSadaf Ebrahimi    if [ -z "$failed" ]; then
132*62c56f98SSadaf Ebrahimi        printf "No coverage gap found.\n"
133*62c56f98SSadaf Ebrahimi    else
134*62c56f98SSadaf Ebrahimi        printf "Suites with less coverage:%s\n" "$failed"
135*62c56f98SSadaf Ebrahimi    fi
136*62c56f98SSadaf Ebrahimi}
137*62c56f98SSadaf Ebrahimi
138*62c56f98SSadaf Ebrahimipopulate_suites
139*62c56f98SSadaf Ebrahimicompare_builds before-default after-default
140*62c56f98SSadaf Ebrahimicompare_builds before-full after-full
141