| #!/usr/bin/env bash |
| #;**********************************************************************; |
| # SPDX-License-Identifier: BSD-2-Clause |
| # |
| # Copyright (c) 2017 - 2020, Intel Corporation |
| # Copyright (c) 2018 - 2020, Fraunhofer SIT sponsored by Infineon Technologies AG |
| # |
| # All rights reserved. |
| #;**********************************************************************; |
| |
| # source the int-log-compiler-common sript |
| . ${srcdir}/script/int-log-compiler-common.sh |
| |
| sanity_test |
| |
| # start simulator if needed |
| if [[ ${INTEGRATION_TCTI} == "mssim" || ${INTEGRATION_TCTI} == "swtpm" ]]; then |
| echo "Trying to start simulator ${INTEGRATION_TCTI}" |
| try_simulator_start |
| fi |
| |
| TPM20TEST_SOCKET_PORT="${SIM_PORT_DATA}" |
| TPM20TEST_TCTI="${INTEGRATION_TCTI}:host=${TPM20TEST_SOCKET_ADDRESS},port=${TPM20TEST_SOCKET_PORT}" |
| |
| while true; do |
| |
| # Some debug prints |
| echo "TPM20TEST_TCTI_NAME=${TPM20TEST_TCTI_NAME}" |
| echo "TPM20TEST_DEVICE_FILE=${TPM20TEST_DEVICE_FILE}" |
| echo "TPM20TEST_SOCKET_ADDRESS=${TPM20TEST_SOCKET_ADDRESS}" |
| echo "TPM20TEST_SOCKET_PORT=${TPM20TEST_SOCKET_PORT}" |
| echo "TPM20TEST_TCTI=${TPM20TEST_TCTI}" |
| |
| if [ "${TPM20TEST_TCTI_NAME}" != "device" ]; then |
| env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \ |
| TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \ |
| TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \ |
| TPM20TEST_TCTI="${TPM20TEST_TCTI}" \ |
| G_MESSAGES_DEBUG=all ./test/helper/tpm_startup |
| if [ $? -ne 0 ]; then |
| echo "TPM_StartUp failed" |
| ret=99 |
| break |
| fi |
| else |
| env TPM20TEST_TCTI_NAME=${TPM20TEST_TCTI_NAME} \ |
| TPM20TEST_DEVICE_FILE=${TPM20TEST_DEVICE_FILE} \ |
| G_MESSAGES_DEBUG=all ./test/helper/tpm_transientempty |
| if [ $? -ne 0 ]; then |
| echo "TPM transient area not empty => skipping" |
| ret=99 |
| break |
| fi |
| fi |
| |
| TPMSTATE_FILE1=${TEST_BIN}_state1 |
| TPMSTATE_FILE2=${TEST_BIN}_state2 |
| |
| env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \ |
| TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \ |
| TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \ |
| TPM20TEST_TCTI="${TPM20TEST_TCTI}" \ |
| TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \ |
| G_MESSAGES_DEBUG=all ./test/helper/tpm_dumpstate>${TPMSTATE_FILE1} |
| if [ $? -ne 0 ]; then |
| echo "Error during dumpstate" |
| ret=99 |
| break |
| fi |
| |
| echo "Execute the test script" |
| env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \ |
| TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \ |
| TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \ |
| TPM20TEST_TCTI="${TPM20TEST_TCTI}" \ |
| TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \ |
| G_MESSAGES_DEBUG=all ${@: -1} |
| ret=$? |
| echo "Script returned $ret" |
| |
| #We check the state before a reboot to see if transients and NV were chagned. |
| env TPM20TEST_TCTI_NAME="${TPM20TEST_TCTI_NAME}" \ |
| TPM20TEST_SOCKET_ADDRESS="${TPM20TEST_SOCKET_ADDRESS}" \ |
| TPM20TEST_SOCKET_PORT="${TPM20TEST_SOCKET_PORT}" \ |
| TPM20TEST_TCTI="${TPM20TEST_TCTI}" \ |
| TPM20TEST_DEVICE_FILE="${TPM20TEST_DEVICE_FILE}" \ |
| G_MESSAGES_DEBUG=all ./test/helper/tpm_dumpstate>${TPMSTATE_FILE2} |
| if [ $? -ne 0 ]; then |
| echo "Error during dumpstate" |
| ret=99 |
| break |
| fi |
| |
| if [ "$(cat ${TPMSTATE_FILE1})" != "$(cat ${TPMSTATE_FILE2})" ]; then |
| echo "TPM changed state during test" |
| echo "State before ($TPMSTATE_FILE1):" |
| cat ${TPMSTATE_FILE1} |
| echo "State after ($TPMSTATE_FILE2):" |
| cat ${TPMSTATE_FILE2} |
| ret=1 |
| break |
| fi |
| |
| break |
| done |
| |
| # This sleep is sadly necessary: If we kill the tabrmd w/o sleeping for a |
| # second after the test finishes the simulator will die too. Bug in the |
| # simulator? |
| sleep 1 |
| # teardown |
| daemon_stop ${SIM_PID_FILE} |
| rm -rf ${SIM_TMP_DIR} ${SIM_PID_FILE} |
| exit $ret |