#!/bin/bash

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

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

VTPM_NAME="vtpm-test-init"
SWTPM_DEV_NAME="/dev/${VTPM_NAME}"
TPM_PATH=$(mktemp -d)
STATE_FILE=$TPM_PATH/tpm-00.permall
VOLATILE_STATE_FILE=$TPM_PATH/tpm-00.volatilestate
PID_FILE=$TPM_PATH/swtpm.pid
SWTPM_CMD_UNIX_PATH=${TPM_PATH}/unix-cmd.sock
SWTPM_CTRL_UNIX_PATH=${TPM_PATH}/unix-ctrl.sock
SWTPM_INTERFACE=${SWTPM_INTERFACE:-cuse}

function cleanup()
{
	pid=${SWTPM_PID}
	if [ -n "$pid" ]; then
		kill_quiet -9 $pid
	fi
	rm -rf $TPM_PATH
}

trap "cleanup" EXIT

[ "${SWTPM_INTERFACE}" == cuse ] && source ${TESTDIR}/test_cuse
source ${TESTDIR}/common

rm -f $STATE_FILE $VOLATILE_STATE_FILE 2>/dev/null

if has_seccomp_support "${SWTPM_EXE}"; then
	SWTPM_TEST_SECCOMP_OPT="--seccomp action=none"
fi

run_swtpm ${SWTPM_INTERFACE} \
	--tpmstate dir=$TPM_PATH \
	--pid file=$PID_FILE

display_processes_by_name "$SWTPM"

kill_quiet -0 ${SWTPM_PID}
if [ $? -ne 0 ]; then
	echo "Error: ${SWTPM_INTERFACE} TPM did not start."
	exit 1
fi

if wait_for_file ${PID_FILE} 4; then
	echo "Error: ${SWTPM_INTERFACE} TPM did not write pidfile."
	exit 1
fi

PIDF="$(cat $PID_FILE)"
if [ "$PIDF" != "${SWTPM_PID}" ]; then
	echo "Error: ${SWTPM_INTERFACE} TPM wrote pid $PIDF, but found ${SWTPM_PID}."
	exit 1
fi

# Init the TPM
run_swtpm_ioctl ${SWTPM_INTERFACE} -i
if [ $? -ne 0 ]; then
	echo "Error: Could not initialize the ${SWTPM_INTERFACE} TPM."
	exit 1
fi

sleep 0.5

kill_quiet -0 ${SWTPM_PID} 2>/dev/null
if [ $? -ne 0 ]; then
	echo "Error: ${SWTPM_INTERFACE} TPM not running anymore after INIT."
	exit 1
fi

# Init the TPM again but make its state file inaccessible; this only
# works if the TPM runs as non-root
if [ "$(id -u)" != "0" ]; then
	chmod 000 "${STATE_FILE}"
	run_swtpm_ioctl ${SWTPM_INTERFACE} -i
	if [ $? -eq 0 ]; then
		echo "Error: Unexpected initialization success of the ${SWTPM_INTERFACE} TPM."
		exit 1
	fi

	sleep 0.5

	kill_quiet -0 ${SWTPM_PID} 2>/dev/null
	if [ $? -ne 0 ]; then
		echo "Error: ${SWTPM_INTERFACE} TPM not running anymore after failed INIT."
		exit 1
	fi
	chmod 644 "${STATE_FILE}"

	# Init the TPM again; now with state file accessible again
	run_swtpm_ioctl ${SWTPM_INTERFACE} -i
	if [ $? -ne 0 ]; then
		echo "Error: Could not initialize the ${SWTPM_INTERFACE} TPM."
		exit 1
	fi

	sleep 0.5

	kill_quiet -0 ${SWTPM_PID} 2>/dev/null
	if [ $? -ne 0 ]; then
		echo "Error: ${SWTPM_INTERFACE} TPM not running anymore after INIT."
		exit 1
	fi
fi

check_seccomp_profile "${SWTPM_EXE}" ${SWTPM_PID} 0
if [ $? -ne 0 ]; then
	exit 1
fi

# Shut down
run_swtpm_ioctl ${SWTPM_INTERFACE} -s
if [ $? -ne 0 ]; then
	echo "Error: Could not shut down the ${SWTPM_INTERFACE} TPM."
	exit 1
fi

if wait_process_gone ${SWTPM_PID} 4; then
	echo "Error: ${SWTPM_INTERFACE} TPM should not be running anymore."
	exit 1
fi

if [ ! -e $STATE_FILE ]; then
	echo "Error: TPM state file $STATE_FILE does not exist."
	exit 1
fi

echo "OK"

exit 0
