From 92cd7b25f29db3f04791c09505a00c1bad2f1bd6 Mon Sep 17 00:00:00 2001 From: Ed Santiago Date: Mon, 6 Nov 2023 05:58:48 -0700 Subject: [PATCH] systests: add a last-minute check for db backend This will only fail if someone ever adds a system test that runs podman with "--db-backend boltdb", which nobody should ever do, but this is a cheap way to make sure it never happens. See #20563 Signed-off-by: Ed Santiago --- test/system/005-info.bats | 8 ++++++-- test/system/999-final.bats | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 test/system/999-final.bats diff --git a/test/system/005-info.bats b/test/system/005-info.bats index a6edfd2e30..68f434f353 100644 --- a/test/system/005-info.bats +++ b/test/system/005-info.bats @@ -96,6 +96,11 @@ host.slirp4netns.executable | $expr_path } @test "podman info - confirm desired database" { + # Always run this and preserve its value. We will check again in 999-*.bats + run_podman info --format '{{.Host.DatabaseBackend}}' + db_backend="$output" + echo "$db_backend" > $BATS_SUITE_TMPDIR/db-backend + if [[ -z "$CI_DESIRED_DATABASE" ]]; then # When running in Cirrus, CI_DESIRED_DATABASE *must* be defined # in .cirrus.yml so we can double-check that all CI VMs are @@ -109,8 +114,7 @@ host.slirp4netns.executable | $expr_path skip "CI_DESIRED_DATABASE is unset--OK, because we're not in Cirrus" fi - run_podman info --format '{{.Host.DatabaseBackend}}' - is "$output" "$CI_DESIRED_DATABASE" "CI_DESIRED_DATABASE (from .cirrus.yml)" + is "$db_backend" "$CI_DESIRED_DATABASE" "CI_DESIRED_DATABASE (from .cirrus.yml)" } diff --git a/test/system/999-final.bats b/test/system/999-final.bats new file mode 100644 index 0000000000..4946a6d1eb --- /dev/null +++ b/test/system/999-final.bats @@ -0,0 +1,30 @@ +#!/usr/bin/env bats +# +# Final set of tests to run. +# + +load helpers + +# Confirm that we're still using the same database we started with. +# +# This should never fail! If it does, it means that some test somewhere +# has run podman with --db-backend, which is known to wreak havoc. +# +# See https://github.com/containers/podman/issues/20563 +@test "podman database backend has not changed" { + # File is always written in 005-info.bats. It must always exist + # by the time we get here... + db_backend_file=$BATS_SUITE_TMPDIR/db-backend + + if [[ ! -e "$db_backend_file" ]]; then + # ...except in a manual run like "hack/bats 999" + if [[ $BATS_SUITE_TEST_NUMBER -le 5 ]]; then + skip "$db_backend_file missing, but this is a short manual bats run, so, ok" + fi + + die "Internal error: $db_backend_file does not exist! (check 005-*.bats)" + fi + + run_podman info --format '{{.Host.DatabaseBackend}}' + assert "$output" = "$(<$db_backend_file)" ".Host.DatabaseBackend has changed!" +}