From e660855796a40ad417d13cbe081bd62e56a1c6f5 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Mon, 19 Apr 2021 11:00:20 -0600 Subject: [PATCH] tests: Test without a cache directory by default Several tests generate summaries and then expect to use the generated summary immediately. However, this can cause intermittent test failures when they inadvertantly get a cached summary file. This typically happens when the test is run on a filesystem that doesn't support user extended attributes. In that case, the caching code can only use the last modified time, which only has 1 second granularity. If tests don't carefully manage the summary modification times or the repo cache then they are likely subject to races in some test environments. This introduces an environment variable `OSTREE_SKIP_CACHE` that prevents the repo from using a cache directory. This is enabled by default in tests and disabled for tests that are a explicitly trying to test the caching behavior. Fixes: #2313 Fixes: #2351 --- src/libostree/ostree-repo.c | 2 +- tests/libtest.sh | 5 +++++ tests/test-pull-summary-caching.sh | 3 +++ tests/test-pull-summary-sigs.sh | 3 +++ tests/test-signed-pull-summary.sh | 3 +++ 5 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index b2347b47..76b02482 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -3291,7 +3291,7 @@ ostree_repo_open (OstreeRepo *self, if (!glnx_opendirat (self->repo_dir_fd, "tmp", TRUE, &self->tmp_dir_fd, error)) return FALSE; - if (self->writable) + if (self->writable && getenv ("OSTREE_SKIP_CACHE") == NULL) { if (!glnx_shutil_mkdir_p_at (self->tmp_dir_fd, _OSTREE_CACHE_DIR, DEFAULT_DIRECTORY_MODE, cancellable, error)) return FALSE; diff --git a/tests/libtest.sh b/tests/libtest.sh index 2e9a99df..40f362be 100755 --- a/tests/libtest.sh +++ b/tests/libtest.sh @@ -86,6 +86,11 @@ unset TAR_OPTIONS # easily clean up. export OSTREE_SYSROOT_DEBUG=mutable-deployments +# By default, don't use a cache directory since it makes the tests racy. +# Tests that are explicitly testing the cache operation should unset +# this. +export OSTREE_SKIP_CACHE=1 + export TEST_GPG_KEYID_1="7FCA23D8472CDAFA" export TEST_GPG_KEYFPR_1="5E65DE75AB1C501862D476347FCA23D8472CDAFA" export TEST_GPG_KEYID_2="D8228CFECA950D41" diff --git a/tests/test-pull-summary-caching.sh b/tests/test-pull-summary-caching.sh index 9671199a..37c2aed6 100755 --- a/tests/test-pull-summary-caching.sh +++ b/tests/test-pull-summary-caching.sh @@ -31,6 +31,9 @@ if ! has_gpgme; then exit 0 fi +# Ensure repo caching is in use. +unset OSTREE_SKIP_CACHE + COMMIT_SIGN="--gpg-homedir=${TEST_GPG_KEYHOME} --gpg-sign=${TEST_GPG_KEYID_1}" echo "1..1" diff --git a/tests/test-pull-summary-sigs.sh b/tests/test-pull-summary-sigs.sh index 3819cbf3..04a8e488 100755 --- a/tests/test-pull-summary-sigs.sh +++ b/tests/test-pull-summary-sigs.sh @@ -23,6 +23,9 @@ set -euo pipefail . $(dirname $0)/libtest.sh +# Ensure repo caching is in use. +unset OSTREE_SKIP_CACHE + COMMIT_SIGN="" if has_gpgme; then COMMIT_SIGN="--gpg-homedir=${TEST_GPG_KEYHOME} --gpg-sign=${TEST_GPG_KEYID_1}" diff --git a/tests/test-signed-pull-summary.sh b/tests/test-signed-pull-summary.sh index e953f2ea..3d468693 100755 --- a/tests/test-signed-pull-summary.sh +++ b/tests/test-signed-pull-summary.sh @@ -27,6 +27,9 @@ set -euo pipefail echo "1..14" +# Ensure repo caching is in use. +unset OSTREE_SKIP_CACHE + # This is explicitly opt in for testing export OSTREE_DUMMY_SIGN_ENABLED=1