84 lines
2.7 KiB
Bash
Executable File
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"
|