| #!/usr/bin/env bash |
| |
| # For the license, see the LICENSE file in the root directory. |
| |
| ROOT=${abs_top_builddir:-$(dirname "$0")/..} |
| TESTDIR=${abs_top_testdir:-$(dirname "$0")} |
| SRCDIR=${abs_top_srcdir:-$(dirname "$0")/..} |
| |
| source "${TESTDIR}/common" |
| skip_test_no_tpm12 "${SWTPM_EXE}" |
| |
| SWTPM_SETUP_CONF=$SRCDIR/samples/swtpm_setup.conf |
| |
| state_save_dir="$(mktemp -d)" || exit 1 |
| state_save=${state_save_dir}/swtpm-test.state.save |
| |
| trap "cleanup" SIGTERM EXIT |
| |
| function cleanup() |
| { |
| rm -rf "${workdir}" "${state_save_dir}" |
| } |
| |
| # Test 1: no dummy file, create new state |
| |
| workdir="$(mktemp -d)" || exit 1 |
| statefile="${workdir}/swtpm-test.state" |
| |
| if ! $SWTPM_SETUP \ |
| --not-overwrite \ |
| --tpm-state "file://${statefile}" \ |
| --config "${SWTPM_SETUP_CONF}" \ |
| --logfile "${workdir}/logfile" \ |
| --tpm "${SWTPM_EXE} socket ${SWTPM_TEST_SECCOMP_OPT}"; |
| then |
| echo "Test 1 failed: Error: Could not run $SWTPM_SETUP." |
| echo "Setup Logfile:" |
| cat "${workdir}/logfile" |
| exit 1 |
| fi |
| |
| echo "Test 1 passed" |
| |
| # copy out and reuse the valid state from test 1 as dummy, as file backend will |
| # not detect files without at least a valid header - but append some garbage at |
| # the end to distinguish it from newly created states |
| cp "${statefile}" "${state_save}" |
| echo "GARBAGE" >> "${state_save}" |
| |
| rm -rf "${workdir}" |
| |
| # Test 2: --overwrite with dummy state file |
| |
| workdir="$(mktemp -d)" || exit 1 |
| statefile="${workdir}/swtpm-test.state" |
| cp "${state_save}" "${statefile}" |
| |
| if ! $SWTPM_SETUP \ |
| --overwrite \ |
| --tpm-state "file://${statefile}" \ |
| --config "${SWTPM_SETUP_CONF}" \ |
| --logfile "${workdir}/logfile" \ |
| --tpm "${SWTPM_EXE} socket ${SWTPM_TEST_SECCOMP_OPT}"; |
| then |
| echo "Test 2 failed: Error: Could not run $SWTPM_SETUP." |
| echo "Setup Logfile:" |
| cat "${workdir}/logfile" |
| exit 1 |
| fi |
| |
| if cmp -s "${statefile}" "${state_save}"; then |
| echo "Test 2 failed: Error: The state file was not overwritten." |
| echo "Setup Logfile:" |
| cat "${workdir}/logfile" |
| exit 1 |
| fi |
| |
| echo "Test 2 passed" |
| rm -rf "${workdir}" |
| |
| # Test 3: neither "--overwrite" nor "--not-overwrite" with dummy state file |
| |
| workdir="$(mktemp -d)" || exit 1 |
| statefile="${workdir}/swtpm-test.state" |
| cp "${state_save}" "${statefile}" |
| |
| $SWTPM_SETUP \ |
| --tpm-state "file://${statefile}" \ |
| --config "${SWTPM_SETUP_CONF}" \ |
| --logfile "${workdir}/logfile" \ |
| --tpm "${SWTPM_EXE} socket ${SWTPM_TEST_SECCOMP_OPT}" |
| |
| if [ $? -ne 1 ]; then |
| echo "Test 3 failed: Error: $SWTPM_SETUP did not exit with exit code 1." |
| echo "Setup Logfile:" |
| cat "${workdir}/logfile" |
| exit 1 |
| fi |
| |
| if ! cmp -s "${statefile}" "${state_save}"; then |
| echo "Test 3 failed: Error: The state file was unexpectedly overwritten." |
| echo "Setup Logfile:" |
| cat "${workdir}/logfile" |
| exit 1 |
| fi |
| |
| echo "Test 3 passed" |
| |
| cleanup |
| exit 0 |