xref: /aosp_15_r20/external/tpm2-tss/script/int-log-compiler-ptpm.sh (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag#!/usr/bin/env bash
2*758e9fbaSOystein Eftevaag#;**********************************************************************;
3*758e9fbaSOystein Eftevaag# Copyright (c) 2017 - 2018, Intel Corporation
4*758e9fbaSOystein Eftevaag# Copyright (c) 2018 Fraunhofer SIT sponsored by Infineon Technologies AG
5*758e9fbaSOystein Eftevaag# All rights reserved.
6*758e9fbaSOystein Eftevaag# All rights reserved.
7*758e9fbaSOystein Eftevaag#
8*758e9fbaSOystein Eftevaag# Redistribution and use in source and binary forms, with or without
9*758e9fbaSOystein Eftevaag# modification, are permitted provided that the following conditions are met:
10*758e9fbaSOystein Eftevaag#
11*758e9fbaSOystein Eftevaag# 1. Redistributions of source code must retain the above copyright notice,
12*758e9fbaSOystein Eftevaag# this list of conditions and the following disclaimer.
13*758e9fbaSOystein Eftevaag#
14*758e9fbaSOystein Eftevaag# 2. Redistributions in binary form must reproduce the above copyright notice,
15*758e9fbaSOystein Eftevaag# this list of conditions and the following disclaimer in the documentation
16*758e9fbaSOystein Eftevaag# and/or other materials provided with the distribution.
17*758e9fbaSOystein Eftevaag#
18*758e9fbaSOystein Eftevaag# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*758e9fbaSOystein Eftevaag# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*758e9fbaSOystein Eftevaag# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*758e9fbaSOystein Eftevaag# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*758e9fbaSOystein Eftevaag# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*758e9fbaSOystein Eftevaag# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*758e9fbaSOystein Eftevaag# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*758e9fbaSOystein Eftevaag# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*758e9fbaSOystein Eftevaag# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*758e9fbaSOystein Eftevaag# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28*758e9fbaSOystein Eftevaag# THE POSSIBILITY OF SUCH DAMAGE.
29*758e9fbaSOystein Eftevaag#;**********************************************************************;
30*758e9fbaSOystein Eftevaagset -u
31*758e9fbaSOystein Eftevaag
32*758e9fbaSOystein Eftevaagusage_error ()
33*758e9fbaSOystein Eftevaag{
34*758e9fbaSOystein Eftevaag    echo "$0: $*" >&2
35*758e9fbaSOystein Eftevaag    print_usage >&2
36*758e9fbaSOystein Eftevaag    exit 2
37*758e9fbaSOystein Eftevaag}
38*758e9fbaSOystein Eftevaagprint_usage ()
39*758e9fbaSOystein Eftevaag{
40*758e9fbaSOystein Eftevaag    cat <<END
41*758e9fbaSOystein EftevaagUsage:
42*758e9fbaSOystein Eftevaag    int-log-compiler.sh --ptpm=DEVICE
43*758e9fbaSOystein Eftevaag                        TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
44*758e9fbaSOystein EftevaagThe '--simulator-bin' option is mandatory.
45*758e9fbaSOystein EftevaagEND
46*758e9fbaSOystein Eftevaag}
47*758e9fbaSOystein Eftevaagwhile test $# -gt 0; do
48*758e9fbaSOystein Eftevaag    case $1 in
49*758e9fbaSOystein Eftevaag    --help) print_usage; exit $?;;
50*758e9fbaSOystein Eftevaag    -d|--ptpm) PTPM=$2; shift;;
51*758e9fbaSOystein Eftevaag    -d=*|--ptpm=*) PTPM="${1#*=}";;
52*758e9fbaSOystein Eftevaag    --) shift; break;;
53*758e9fbaSOystein Eftevaag    -*) usage_error "invalid option: '$1'";;
54*758e9fbaSOystein Eftevaag     *) break;;
55*758e9fbaSOystein Eftevaag    esac
56*758e9fbaSOystein Eftevaag    shift
57*758e9fbaSOystein Eftevaagdone
58*758e9fbaSOystein Eftevaag
59*758e9fbaSOystein Eftevaag# Verify the running shell and OS environment is sufficient to run these tests.
60*758e9fbaSOystein Eftevaagsanity_test ()
61*758e9fbaSOystein Eftevaag{
62*758e9fbaSOystein Eftevaag    # Check special file
63*758e9fbaSOystein Eftevaag    if [ ! -e /dev/urandom ]; then
64*758e9fbaSOystein Eftevaag        echo  "Missing file /dev/urandom; exiting"
65*758e9fbaSOystein Eftevaag        exit 1
66*758e9fbaSOystein Eftevaag    fi
67*758e9fbaSOystein Eftevaag
68*758e9fbaSOystein Eftevaag    # Check ps
69*758e9fbaSOystein Eftevaag    PS_LINES=$(ps -e 2>/dev/null | wc -l)
70*758e9fbaSOystein Eftevaag    if [ "$PS_LINES" -eq 0 ] ; then
71*758e9fbaSOystein Eftevaag        echo "Command ps not listing processes; exiting"
72*758e9fbaSOystein Eftevaag        exit 1
73*758e9fbaSOystein Eftevaag    fi
74*758e9fbaSOystein Eftevaag}
75*758e9fbaSOystein Eftevaag
76*758e9fbaSOystein Eftevaagsanity_test
77*758e9fbaSOystein Eftevaag
78*758e9fbaSOystein Eftevaag# Once option processing is done, $@ should be the name of the test executable
79*758e9fbaSOystein Eftevaag# followed by all of the options passed to the test executable.
80*758e9fbaSOystein EftevaagTEST_BIN=$(realpath "$1")
81*758e9fbaSOystein EftevaagTEST_DIR=$(dirname "$1")
82*758e9fbaSOystein EftevaagTEST_NAME=$(basename "${TEST_BIN}")
83*758e9fbaSOystein Eftevaag
84*758e9fbaSOystein Eftevaagwhile true; do
85*758e9fbaSOystein Eftevaag
86*758e9fbaSOystein Eftevaagenv TPM20TEST_TCTI_NAME="device" \
87*758e9fbaSOystein Eftevaag    TPM20TEST_DEVICE_FILE=${PTPM} \
88*758e9fbaSOystein Eftevaag    G_MESSAGES_DEBUG=all ./test/helper/tpm_transientempty
89*758e9fbaSOystein Eftevaagif [ $? -ne 0 ]; then
90*758e9fbaSOystein Eftevaag    echo "TPM transient area not empty => skipping"
91*758e9fbaSOystein Eftevaag    ret=99
92*758e9fbaSOystein Eftevaag    break
93*758e9fbaSOystein Eftevaagfi
94*758e9fbaSOystein Eftevaag
95*758e9fbaSOystein EftevaagTPMSTATE_FILE1=${TEST_BIN}_state1
96*758e9fbaSOystein EftevaagTPMSTATE_FILE2=${TEST_BIN}_state2
97*758e9fbaSOystein Eftevaag
98*758e9fbaSOystein Eftevaagenv TPM20TEST_TCTI_NAME="device" \
99*758e9fbaSOystein Eftevaag    TPM20TEST_DEVICE_FILE=${PTPM} \
100*758e9fbaSOystein Eftevaag    TPM20TEST_TCTI="device:${PTPM}" \
101*758e9fbaSOystein Eftevaag    G_MESSAGES_DEBUG=all ./test/helper/tpm_dumpstate>$TPMSTATE_FILE1
102*758e9fbaSOystein Eftevaagif [ $? -ne 0 ]; then
103*758e9fbaSOystein Eftevaag    echo "Error during dumpstate"
104*758e9fbaSOystein Eftevaag    ret=99
105*758e9fbaSOystein Eftevaag    break
106*758e9fbaSOystein Eftevaagfi
107*758e9fbaSOystein Eftevaag
108*758e9fbaSOystein Eftevaagecho "Execute the test script"
109*758e9fbaSOystein Eftevaagenv TPM20TEST_TCTI_NAME="device" \
110*758e9fbaSOystein Eftevaag    TPM20TEST_DEVICE_FILE=${PTPM} \
111*758e9fbaSOystein Eftevaag    TPM20TEST_TCTI="device:${PTPM}" \
112*758e9fbaSOystein Eftevaag    G_MESSAGES_DEBUG=all $@
113*758e9fbaSOystein Eftevaagret=$?
114*758e9fbaSOystein Eftevaagecho "Script returned $ret"
115*758e9fbaSOystein Eftevaag
116*758e9fbaSOystein Eftevaagenv TPM20TEST_TCTI_NAME="device" \
117*758e9fbaSOystein Eftevaag    TPM20TEST_DEVICE_FILE=${PTPM} \
118*758e9fbaSOystein Eftevaag    TPM20TEST_TCTI="device:${PTPM}" \
119*758e9fbaSOystein Eftevaag    G_MESSAGES_DEBUG=all ./test/helper/tpm_dumpstate>$TPMSTATE_FILE2
120*758e9fbaSOystein Eftevaagif [ $? -ne 0 ]; then
121*758e9fbaSOystein Eftevaag    echo "Error during dumpstate"
122*758e9fbaSOystein Eftevaag    ret=99
123*758e9fbaSOystein Eftevaag    break
124*758e9fbaSOystein Eftevaagfi
125*758e9fbaSOystein Eftevaag
126*758e9fbaSOystein Eftevaagif [ "$(cat $TPMSTATE_FILE1)" != "$(cat $TPMSTATE_FILE2)" ]; then
127*758e9fbaSOystein Eftevaag    echo "TPM changed state during test"
128*758e9fbaSOystein Eftevaag    echo "State before ($TPMSTATE_FILE1):"
129*758e9fbaSOystein Eftevaag    cat $TPMSTATE_FILE1
130*758e9fbaSOystein Eftevaag    echo "State after ($TPMSTATE_FILE2):"
131*758e9fbaSOystein Eftevaag    cat $TPMSTATE_FILE2
132*758e9fbaSOystein Eftevaag    ret=1
133*758e9fbaSOystein Eftevaag    break
134*758e9fbaSOystein Eftevaagfi
135*758e9fbaSOystein Eftevaag
136*758e9fbaSOystein Eftevaagbreak
137*758e9fbaSOystein Eftevaagdone
138*758e9fbaSOystein Eftevaag
139*758e9fbaSOystein Eftevaagexit $ret
140