Skip to content

Commit

Permalink
FIXME Various zstd:chunked test changes
Browse files Browse the repository at this point in the history
- Compare image configs, not IDs
- Try to actually handle additional store dependencies
- ??

Signed-off-by: Miloslav Trmač <[email protected]>
  • Loading branch information
mtrmac authored and edsantiago committed Oct 17, 2024
1 parent fce557e commit a1c21b1
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 27 deletions.
11 changes: 9 additions & 2 deletions test/system/010-images.bats
Original file line number Diff line number Diff line change
Expand Up @@ -384,10 +384,17 @@ EOF
is "${lines[-1]}" "$IMAGE true" "image from readwrite store"

CONTAINERS_STORAGE_CONF=$sconf run_podman images -a -n --format "{{.Id}}"
id=${lines[-1]}
local cd=$(image_config_digest $IMAGE) # Without $sconf, i.e. from the read-write store.

CONTAINERS_STORAGE_CONF=$sconf run_podman pull -q $IMAGE
is "$output" "$id" "pull -q $IMAGE, using storage.conf"
local cd2=$(CONTAINERS_STORAGE_CONF=$sconf image_config_digest $IMAGE)
assert "$cd2" = "$cd" "pull -q $IMAGE, using storage.conf"

# $IMAGE might now be reusing layers from the additional store;
# stopping to use the additional store can result in dangling layer references.
# Try to fix that up.
CONTAINERS_STORAGE_CONF=$sconf run_podman rmi $IMAGE
_prefetch $IMAGE

run_podman --root $imstore/root rmi --all
}
Expand Down
34 changes: 18 additions & 16 deletions test/system/120-load.bats
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,23 @@ function teardown() {
# Custom helpers for this test only. These just save us having to duplicate
# the same thing four times (two tests, each with -i and stdin).
#
# initialize, read image ID and name
get_iid_and_name() {
# initialize, read image ID, image config digest, and name
get_icd_and_name() {
run_podman images -a --format '{{.ID}} {{.Repository}}:{{.Tag}}'
read iid img_name <<<"$output"
icd=$(image_config_digest "$img_name")

archive=$PODMAN_TMPDIR/myimage-$(random_string 8).tar
}

# Simple verification of image ID and name
verify_iid_and_name() {
run_podman images -a --format '{{.ID}} {{.Repository}}:{{.Tag}}'
read new_iid new_img_name < <(echo "$output")
verify_icd_and_name() {
run_podman images -a --format '{{.Repository}}:{{.Tag}}'
read new_img_name < <(echo "$output")
new_icd=$(image_config_digest "$new_img_name")

# Verify
is "$new_iid" "$iid" "Image ID of loaded image == original"
is "$new_icd" "$icd" "Image config digest of loaded image == original"
is "$new_img_name" "$1" "Name & tag of restored image"
}

Expand Down Expand Up @@ -178,49 +180,49 @@ verify_iid_and_name() {

@test "podman load - by image ID" {
# FIXME: how to build a simple archive instead?
get_iid_and_name
get_icd_and_name

# Save image by ID, and remove it.
run_podman save $iid -o $archive
run_podman rmi $iid

# Load using -i; IID should be preserved, but name is not.
run_podman load -i $archive
verify_iid_and_name "<none>:<none>"
verify_icd_and_name "<none>:<none>"

# Same as above, using stdin
run_podman rmi $iid
run_podman load < $archive
verify_iid_and_name "<none>:<none>"
verify_icd_and_name "<none>:<none>"

# Same as above, using stdin but with `podman image load`
run_podman rmi $iid
run_podman image load < $archive
verify_iid_and_name "<none>:<none>"
verify_icd_and_name "<none>:<none>"
}

@test "podman load - by image name" {
get_iid_and_name
get_icd_and_name
run_podman save $img_name -o $archive
run_podman rmi $iid

# Load using -i; this time the image should be tagged.
run_podman load -i $archive
verify_iid_and_name $img_name
verify_icd_and_name $img_name
run_podman rmi $iid

# Also make sure that `image load` behaves the same.
run_podman image load -i $archive
verify_iid_and_name $img_name
verify_icd_and_name $img_name
run_podman rmi $iid

# Same as above, using stdin
run_podman load < $archive
verify_iid_and_name $img_name
verify_icd_and_name $img_name
}

@test "podman load - from URL" {
get_iid_and_name
get_icd_and_name
run_podman save $img_name -o $archive
run_podman rmi $iid

Expand All @@ -234,7 +236,7 @@ verify_iid_and_name() {
$IMAGE /bin/busybox-extras httpd -f -p 80

run_podman load -i $SERVER/image.tar
verify_iid_and_name $img_name
verify_icd_and_name $img_name

run_podman rm -f -t0 myweb
}
Expand Down
18 changes: 9 additions & 9 deletions test/system/150-login.bats
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,8 @@ EOF
}

function _push_search_test() {
# Preserve image ID for later comparison against push/pulled image
run_podman inspect --format '{{.Id}}' $IMAGE
iid=$output
# Look up image config digest for later comparison against push/pulled image
local icd=$(image_config_digest $IMAGE)

destname=ok-$(random_string 10 | tr A-Z a-z)-ok
# Use command-line credentials
Expand Down Expand Up @@ -188,8 +187,8 @@ function _push_search_test() {
localhost:${PODMAN_LOGIN_REGISTRY_PORT}/$destname

# Compare to original image
run_podman inspect --format '{{.Id}}' $destname
is "$output" "$iid" "Image ID of pulled image == original IID"
local icd2=$(image_config_digest localhost:${PODMAN_LOGIN_REGISTRY_PORT}/$destname)
assert "$icd2" = "$icd" "config digest of pulled image == original digest"

run_podman rmi $destname
}
Expand Down Expand Up @@ -345,12 +344,12 @@ function _test_skopeo_credential_sharing() {
$image1
run_podman rmi $image1

run_podman images $IMAGE --format {{.ID}}
local podman_image_id=$output
local podman_image_cd=$(image_config_digest $IMAGE)

run_podman pull -q --retry 4 --retry-delay "0s" --authfile=$authfile \
--tls-verify=false $image1
assert "${output:0:12}" = "$podman_image_id" "First pull (before stopping registry)"
local pulled_image_cd=$(image_config_digest $output)
assert "$pulled_image_cd" = "$podman_image_cd" "First pull (before stopping registry)"
run_podman rmi $image1

# This actually STOPs the registry, so the port is unbound...
Expand All @@ -360,7 +359,8 @@ function _test_skopeo_credential_sharing() {
run_podman 0+w pull -q --retry 4 --retry-delay "5s" --authfile=$authfile \
--tls-verify=false $image1
assert "$output" =~ "Failed, retrying in 5s.*Error: initializing.* connection refused"
assert "${lines[-1]:0:12}" = "$podman_image_id" "push should succeed via retry"
local pulled_image_cd2=$(image_config_digest "${lines[-1]:0:12}")
assert "$pulled_image_cd2" = "$podman_image_cd" "push should succeed via retry"
unpause_registry

run_podman rmi $image1
Expand Down
10 changes: 10 additions & 0 deletions test/system/helpers.bash
Original file line number Diff line number Diff line change
Expand Up @@ -847,6 +847,16 @@ function _ensure_container_running() {
die "Timed out waiting for container $1 to enter state running=$2"
}

# Return the config digest of an image.
# Historically, the image ID was a good indicator of “the same” image;
# with zstd:chunked, the same image might have different IDs depending on whether
# creating layers happened based on the TOC (and per-file operations) or the full layer tarball
function image_config_digest() {
run skopeo inspect --raw --config "$0"
local sha_output=$(printf "$output" | sha256sum)
echo "${sha_output%% *}"
}

###########################
# _add_label_if_missing # make sure skip messages include rootless/remote
###########################
Expand Down

0 comments on commit a1c21b1

Please sign in to comment.