tpm2-tss-engine/test/sh_log_compiler.sh
wangyoukang 0260ffe813 add upstream initial src code
Signed-off-by: wangyoukang <wangyoukang@xfusion.com>
2023-05-17 10:13:46 +08:00

84 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
export LANG=C
export OPENSSL_ENGINES="${OPENSSL_ENGINES:=$PWD/.libs}"
export LD_LIBRARY_PATH="$OPENSSL_ENGINES:${LD_LIBRARY_PATH-}"
export PATH="$PWD:$PATH"
if [ -z "$2" ]; then
# no device passed
test_script="$(realpath "$1")"
else
test_script="$(realpath "$2")"
INTEGRATION_DEVICE=$1
fi
echo "Creating tpm2tss symlink"
ln -fs libtpm2tss.so .libs/tpm2tss.so
tmp_dir="$(mktemp --directory)"
echo "Switching to temporary directory $tmp_dir"
cd "$tmp_dir"
if [ -z "$INTEGRATION_DEVICE" ]; then
# No device is passed so the TPM simulator will be used.
for simulator in 'swtpm' 'tpm_server'; do
simulator_binary="$(command -v "$simulator")" && break
done
if [ -z "$simulator_binary" ]; then
echo 'ERROR: No TPM simulator was found on PATH'
exit 99
fi
for attempt in $(seq 9 -1 0); do
simulator_port="$(shuf --input-range 1024-65534 --head-count 1)"
echo "Starting simulator on port $simulator_port"
case "$simulator_binary" in
*swtpm) "$simulator_binary" socket --tpm2 --server port="$simulator_port" \
--ctrl type=tcp,port="$(( simulator_port + 1 ))" \
--flags not-need-init --tpmstate dir="$tmp_dir" \
--seccomp "action=none" &;;
*tpm_server) "$simulator_binary" -port "$simulator_port" &;;
esac
simulator_pid="$!"
sleep 1
if ( ss --listening --tcp --ipv4 --processes | grep "$simulator_pid" | grep --quiet "$simulator_port" &&
ss --listening --tcp --ipv4 --processes | grep "$simulator_pid" | grep --quiet "$(( simulator_port + 1 ))" )
then
echo "Simulator with PID $simulator_pid started successfully"
break
else
echo "Failed to start simulator, the port might be in use"
kill "$simulator_pid"
if [ "$attempt" -eq 0 ]; then
echo 'ERROR: Reached maximum number of tries to start simulator, giving up'
exit 99
fi
fi
done
case "$simulator_binary" in
*swtpm) export TPM2TSSENGINE_TCTI="swtpm:port=$simulator_port";;
*tpm_server) export TPM2TSSENGINE_TCTI="mssim:port=$simulator_port";;
esac
export TPM2TOOLS_TCTI="$TPM2TSSENGINE_TCTI"
tpm2_startup --clear
else
# A physical TPM will be used for the integration test.
echo "Running the test with $INTEGRATION_DEVICE"
export TPM2TSSENGINE_TCTI="libtss2-tcti-device.so:$INTEGRATION_DEVICE"
export TPM2TOOLS_TCTI="$TPM2TSSENGINE_TCTI"
fi
echo "Starting $test_script"
"$test_script"
test_status="$?"
kill "$simulator_pid"
rm -rf "$tmp_dir"
exit "$test_status"