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