mirror of
https://github.com/stefanberger/swtpm.git
synced 2026-01-09 22:25:34 +00:00
The Ubuntu (PPA) build system executes the build on an environment that has problems with seccomp profiles. It does not allow us to run the test suite with swtpm applying its seccomp profile since it fails with a 'bad system call' error. To work around this we introduce the env. variable SWTPM_TEST_SECCOMP_OPT that we can set to "--seccomp action=none" to avoid having swtpm apply it seccomp profile. Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
172 lines
3.3 KiB
Bash
Executable File
172 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# For the license, see the LICENSE file in the root directory.
|
|
|
|
ROOT=${abs_top_builddir:-$(dirname "$0")/..}
|
|
TESTDIR=${abs_top_testdir:=$(dirname "$0")}
|
|
|
|
# need SWTPM to be set
|
|
source ${TESTDIR}/common
|
|
|
|
TPMDIR=`mktemp -d`
|
|
PID_FILE=$TPMDIR/${SWTPM}.pid
|
|
LOG_FILE=$TPMDIR/${SWTPM}.log
|
|
|
|
source ${TESTDIR}/test_common
|
|
|
|
trap "cleanup" SIGTERM EXIT
|
|
|
|
function cleanup()
|
|
{
|
|
rm -rf $TPMDIR
|
|
if [ -n "$PID" ]; then
|
|
kill_quiet -SIGTERM $PID 2>/dev/null
|
|
fi
|
|
}
|
|
|
|
PORT=11234
|
|
|
|
export TCSD_TCP_DEVICE_HOSTNAME=localhost
|
|
export TCSD_TCP_DEVICE_PORT=$PORT
|
|
export TCSD_USE_TCP_DEVICE=1
|
|
|
|
# Test 1: test port and directory command line parameters; use log level 20
|
|
FILEMODE=641
|
|
exec 100<>$LOG_FILE
|
|
|
|
$SWTPM_EXE socket \
|
|
-p $PORT \
|
|
--tpmstate dir=$TPMDIR,mode=$FILEMODE \
|
|
--pid file=$PID_FILE \
|
|
--log fd=100,level=20 \
|
|
--flags not-need-init \
|
|
${SWTPM_TEST_SECCOMP_OPT} &
|
|
PID=$!
|
|
exec 100>&-
|
|
|
|
if wait_port_open $PORT $PID 4; then
|
|
echo "Test 1 failed: TPM did not open port $PORT"
|
|
exit 1
|
|
fi
|
|
|
|
kill_quiet -0 $PID
|
|
if [ $? -ne 0 ]; then
|
|
echo "Test 1 failed: TPM process not running"
|
|
exit 1
|
|
fi
|
|
|
|
if wait_for_file $PID_FILE 3; then
|
|
echo "Error: ${SWTPM_INTERFACE} TPM did not write pidfile."
|
|
exit 1
|
|
fi
|
|
|
|
validate_pidfile $PID $PID_FILE
|
|
|
|
${SWTPM_BIOS} &>/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
echo "Test 1 failed: tpm_bios did not work"
|
|
exit 1
|
|
fi
|
|
|
|
filemode=$(get_filemode ${TPMDIR}/tpm-00.permall)
|
|
if [ "$filemode" != "$FILEMODE" ]; then
|
|
echo "Filemode bits are wrong"
|
|
echo "Expected: $FILEMODE"
|
|
echo "Actual : $filemode"
|
|
exit 1
|
|
fi
|
|
|
|
check_logfile_patterns_level_20 $LOG_FILE
|
|
rm -f $LOG_FILE
|
|
|
|
kill_quiet -SIGTERM $PID &>/dev/null
|
|
wait_process_gone $PID 2
|
|
|
|
exec 20<&1-; exec 21<&2-
|
|
kill_quiet -0 $PID &>/dev/null
|
|
RES=$?
|
|
exec 1<&20-; exec 2<&21-
|
|
|
|
if [ $RES -eq 0 ]; then
|
|
kill_quiet -SIGKILL $PID
|
|
echo "Test 1 failed: TPM process did not terminate on SIGTERM"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Test 1 passed"
|
|
cleanup
|
|
|
|
# Test 2: test port, directory and terminate command line parameters (-t)
|
|
# that causes the swtpm process to exit upon connection close
|
|
TPMDIR=`mktemp -d`
|
|
|
|
$SWTPM_EXE socket \
|
|
--flags not-need-init \
|
|
-p $PORT \
|
|
--tpmstate dir=$TPMDIR \
|
|
-t \
|
|
${SWTPM_TEST_SECCOMP_OPT} &>/dev/null &
|
|
PID=$!
|
|
|
|
if wait_port_open $PORT $PID 4; then
|
|
echo "Test 1 failed: TPM did not open port $PORT"
|
|
exit
|
|
fi
|
|
|
|
exec 20<&1-; exec 21<&2-
|
|
kill_quiet -0 $PID
|
|
RES=$?
|
|
exec 1<&20-; exec 2<&21-
|
|
|
|
if [ $RES -ne 0 ]; then
|
|
echo "Test 2 failed: TPM process not running"
|
|
exit 1
|
|
fi
|
|
|
|
exec 100<>/dev/tcp/localhost/$PORT
|
|
if [ $? -ne 0 ]; then
|
|
echo "Test 2 failed: Could not connect to TPM"
|
|
exit 1
|
|
fi
|
|
|
|
exec 100>&-
|
|
|
|
if wait_port_closed $PORT $PID 4; then
|
|
echo "Test 2 failed: TPM did not close port"
|
|
exit 1
|
|
fi
|
|
|
|
if wait_process_gone $PID 4; then
|
|
echo "Test 2 failed: TPM process did not shut down"
|
|
exit 1
|
|
fi
|
|
|
|
exec 20<&1-; exec 21<&2-
|
|
kill_quiet -0 $PID
|
|
RES=$?
|
|
exec 1<&20-; exec 2<&21-
|
|
|
|
if [ $RES -eq 0 ]; then
|
|
kill_quiet -SIGKILL $PID
|
|
echo "Test 2 failed: TPM process did not terminate on connection loss"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Test 2 passed"
|
|
|
|
# Test 3: test --fd= and --ctrl type=unxio,clientfd=
|
|
# The python script execs swtpm with client sockets
|
|
exec 20<&1-; exec 21<&2-
|
|
LOG=$(PID_FILE=$TPMDIR/swtpm.pid SWTPM_EXE=$SWTPM_EXE TPMDIR=$TPMDIR exec $TESTDIR/test_clientfds.py)
|
|
RES=$?
|
|
exec 1<&20-; exec 2<&21-
|
|
|
|
if [ $RES -ne 0 ]; then
|
|
echo "Test 3 failed: $LOG"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Test 3 passed"
|
|
|
|
exit 0
|