#!/usr/bin/env bash

if ! [[ "$(uname -s)" =~ Linux ]]; then
	echo "This test currently only runs on Linux."
	exit 77
fi

if [ "$(id -u)" -ne 0 ]; then
	echo "Need to be root to run this test."
	exit 77
fi

STATEDIR="$(mktemp -d)" || exit 1
STATEIMG=$STATEDIR/tpm2.img
STATEFILE=""

trap "cleanup" SIGTERM EXIT
function cleanup()
{
	rm -rf $STATEDIR
	if [ -n "$STATEFILE" ]; then
		losetup -d $STATEFILE
	fi
}

if [ -z "$(type -P fallocate)" ]; then
	echo "This test requires the fallocate tool."
	exit 77
fi

if [ -z "$(fallocate --help 2>&1 | grep -E "\-\-posix")" ]; then
	echo "This test requires fallocate to support --posix."
	exit 77
fi

if [ -z "$(type -P losetup)" ]; then
	echo "This test requires the losetup tool."
	exit 77
fi

# allocate 4 MiB file
fallocate --posix -l $((4 * 1024 * 1024)) "$STATEIMG"
# and loop mount it
STATEFILE=$(losetup --show -f $STATEIMG)

export SWTPM_TEST_LINEAR_FILE=1
export TPM_COMMAND_PORT=65462
export STATEFILE

# don't exec so cleanup will remove the loop device
$(dirname $0)/test_tpm2_save_load_state_2
