diff --git a/tests/blobcache.bats b/tests/blobcache.bats index 56c872e8283..686379d522a 100644 --- a/tests/blobcache.bats +++ b/tests/blobcache.bats @@ -55,6 +55,41 @@ function _check_matches() { expect_output --from="$unmatched" "$5" "$6 should not match" } +# Integration test for https://github.com/containers/image/pull/1645 +@test "blobcache: blobs must be reused when pushing across registry" { + start_registry + run_buildah login --tls-verify=false --authfile ${TEST_SCRATCH_DIR}/test.auth --username testuser --password testpassword localhost:${REGISTRY_PORT} + outputdir=${TEST_SCRATCH_DIR}/outputdir + mkdir -p ${outputdir} + run podman run --rm --mount type=bind,src=${TEST_SCRATCH_DIR}/test.auth,target=/test.auth,Z --mount type=bind,src=${outputdir},target=/output,Z --net host quay.io/skopeo/stable copy --preserve-digests --authfile=/test.auth --tls-verify=false docker://registry.fedoraproject.org/fedora-minimal dir:/output + + run_buildah rmi --all -f + run_buildah pull dir:${outputdir} + run_buildah images -a --format '{{.ID}}' + cid=$output + run_buildah --log-level debug push --tls-verify=false --authfile ${TEST_SCRATCH_DIR}/test.auth $cid docker://localhost:${REGISTRY_PORT}/test + # must not contain "Skipping blob" since push must happen + assert "$output" !~ "Skipping blob" + + # Clear local image and c/image's blob-info-cache + run_buildah rmi --all -f + if is_rootless; + then + run rm $HOME/.local/share/containers/cache/blob-info-cache-v1.sqlite + assert "$status" -eq 0 "status of `run rm $HOME/.local/share/containers/cache/blob-info-cache-v1.sqlite` must be 0" + else + run rm /var/lib/containers/cache/blob-info-cache-v1.sqlite + assert "$status" -eq 0 "status of `run rm /var/lib/containers/cache/blob-info-cache-v1.sqlite` must be 0" + fi + + # In first push blob must be skipped after vendoring https://github.com/containers/image/pull/1645 + run_buildah pull dir:${outputdir} + run_buildah images -a --format '{{.ID}}' + cid=$output + run_buildah --log-level debug push --tls-verify=false --authfile ${TEST_SCRATCH_DIR}/test.auth $cid docker://localhost:${REGISTRY_PORT}/test + expect_output --substring "Skipping blob" +} + @test "blobcache-commit" { blobcachedir=${TEST_SCRATCH_DIR}/cache mkdir -p ${blobcachedir} diff --git a/tests/test_runner.sh b/tests/test_runner.sh index a93654b3721..74345566893 100755 --- a/tests/test_runner.sh +++ b/tests/test_runner.sh @@ -19,4 +19,4 @@ function execute() { TESTS=${@:-.} # Run the tests. -execute time bats --tap $TESTS +execute time bats --tap $TESTS --filter "\"across registry\""