#!/usr/bin/env bash

# For the license, see the LICENSE file in the root directory.

if [ "$(uname -s)" != "Linux" ]; then
	# Due to netstat
	echo "This test only runs only Linux."
	exit 77
fi

ROOT=${abs_top_builddir:-$(dirname "$0")/..}
TESTDIR=${abs_top_testdir:=$(dirname "$0")}

# need SWTPM to be set
source ${TESTDIR}/common
skip_test_no_tpm12 "${SWTPM_EXE}"

TPMDIR="$(mktemp -d)" || exit 1
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: ${SWTPM_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)" || exit 1

$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 8; 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"
cleanup

# Test 4: --tpmstate backend-uri=dir:// parameter test
TPMDIR="$(mktemp -d)" || exit 1
PID_FILE=$TPMDIR/${SWTPM}.pid
FILEMODE=641

$SWTPM_EXE socket \
	-p $PORT \
	--tpmstate backend-uri=dir://$TPMDIR,mode=$FILEMODE \
	--pid file=$PID_FILE \
	--flags not-need-init \
	${SWTPM_TEST_SECCOMP_OPT} &
PID=$!

if wait_port_open $PORT $PID 4; then
	echo "Test 4 failed: TPM did not open port $PORT"
	exit 1
fi

kill_quiet -0 $PID
if [ $? -ne 0 ]; then
	echo "Test 4 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 4 failed: ${SWTPM_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

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 4 failed: TPM process did not terminate on SIGTERM"
	exit 1
fi

echo "Test 4 passed"
cleanup

exit 0
