#!/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
	if curl -sJOL https://sourceforge.net/projects/ibmswtpm/files/tpm4769tar.gz/download; 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

if ! patch -p0 < "${TESTDIR}/patches/libtpm.patch"; 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
