#!/usr/bin/env bash

if [ "${SWTPM_TEST_EXPENSIVE:-0}" -eq 0 ]; then
	exit 77
fi

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

function cleanup() {
	if [ -n "${SWTPM_PID}" ]; then
		kill -9 "${SWTPM_PID}"
	fi
	if [ -n "${SWTPM1_PID}" ]; then
		kill -9 "${SWTPM1_PID}"
	fi
	if [ -n "${WORKDIR}" ]; then
		rm -rf "${WORKDIR}"
	fi
	# clean up after (interrupted) test suite
	rm -f /tmp/.key-*-0 /tmp/.delegation-0 /tmp/.transdigest-*-0
}

trap "cleanup" EXIT

source "${TESTDIR}/common"
skip_test_no_tpm12 "${SWTPM_EXE}"

WORKDIR="$(mktemp -d)" || exit 1
TESTLOG=${WORKDIR}/test.log

# variables used by the TPM 1.2 test suite
TPM_SERVER_PORT=65440
TPM_SERVER_NAME=127.0.0.1
SLAVE_TPM_PORT=65442
SLAVE_TPM_SERVER=127.0.0.1

SWTPM_INTERFACE=socket+socket

# Start main TPM 1.2
SWTPM_SERVER_PORT=${TPM_SERVER_PORT}
SWTPM_SERVER_NAME=${TPM_SERVER_NAME}
SWTPM_CTRL_PORT=65441

mkdir -p "${WORKDIR}/tpm12.1"
SWTPM_SERVER_NO_DISCONNECT="1" run_swtpm "${SWTPM_INTERFACE}" \
	--tpmstate "dir=${WORKDIR}/tpm12.1" \
	--flags not-need-init
SWTPM1_PID=${SWTPM_PID}

# Start 2nd TPM 1.2
SWTPM_SERVER_PORT=${SLAVE_TPM_PORT}
SWTPM_SERVER_NAME=${SLAVE_TPM_SERVER}
SWTPM_CTRL_PORT=65443

mkdir -p "${WORKDIR}/tpm12.2"
SWTPM_SERVER_NO_DISCONNECT="1" run_swtpm "${SWTPM_INTERFACE}" \
	--tpmstate "dir=${WORKDIR}/tpm12.2" \
	--flags not-need-init

pushd "${WORKDIR}" &>/dev/null || exit 1

for ((i = 0; i < 3; i++)); do
	curl -sJOL https://sourceforge.net/projects/ibmswtpm/files/tpm4769tar.gz/download
	if [ $? -eq 0 ]; then
		break
	fi
	# wait 3..10 seconds for a retry
	sleep $((3 + (RANDOM & 7)))
done
hash=$(get_sha1_file tpm4769tar.gz)
if [ "$hash" != ca99a3ccd3e41cdd9983086a9b944023b6049bbc ]; then
	echo "Error: Downloaded file does not have expected hash."
	echo "Actual: $hash"
	exit 1
fi
tar -xzf tpm4769tar.gz

pushd libtpm &>/dev/null || exit 1

patch -p0 < "${TESTDIR}/patches/libtpm.patch"
if [ $? -ne 0 ]; then
	echo "Error: Patching failed."
	exit 1
fi

./autogen
LIBS="" CFLAGS="-g -O2 -DOPENSSL_SUPPRESS_DEPRECATED=1" ./configure
make -j "$(nproc)"

pushd utils &>/dev/null || exit 1

# variables used by TPM 1.2 tools and test suite
export TPM_SERVER_PORT=${TPM_SERVER_PORT} \
    TPM_SERVER_NAME=${TPM_SERVER_NAME} \
    SLAVE_TPM_PORT=${SLAVE_TPM_PORT} \
    SLAVE_TPM_SERVER=${SLAVE_TPM_SERVER} \
    PATH=$PWD:$PATH

if wait_for_serversocket ${TPM_SERVER_PORT} 127.0.0.1 2; then
	echo "Error: swtpm 1 did not open port ${TPM_SERVER_PORT}"
	exit 1
fi

if wait_for_serversocket ${SLAVE_TPM_PORT} 127.0.0.1 2; then
	echo "Error: swtpm 2 did not open port ${SLAVE_TPM_PORT}"
	exit 1
fi

tpmbios

ln -s makeidentity identity

# keep test 1 last due to ERRORs it creates since we do not
# restart the TPM
for tst in 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 23 25 26 1; do

    TPM_AUDITING=0
    TPM_TRANSPORT=0

    echo "Running test ${tst}"
    if [[ "${tst}" =~ ^(1)$ ]]; then
        $SWTPM_IOCTL --tcp :65441 -i
        tpmbios
    elif [[ "${tst}" = ^25$ ]]; then
        TPM_AUDITING=1
        TPM_TRANSPORT=1
    fi

    TPM_AUDITING=${TPM_AUDITING} TPM_TRANSPORT=${TPM_TRANSPORT} timeout 40 ./test_console.sh \
        --non-interactive "${tst}" >> "${TESTLOG}" </dev/null
    # Ignore all errors that occurred in test 1
    if [ $tst != "1" ] && grep -q "ERROR" "${TESTLOG}"; then
        echo "Error occurred!"
        cat "${TESTLOG}"
        exit 1
    fi
done

$SWTPM_IOCTL --tcp :65441 -s
wait_process_gone "${SWTPM1_PID}" 4

$SWTPM_IOCTL --tcp :65443 -s
wait_process_gone "${SWTPM_PID}" 4

popd &>/dev/null || exit 1
popd &>/dev/null || exit 1

echo "OK"

exit 0
