f3b7065bd8
The image's canonical reference is a name with a digest of the image's manifest, so in imageService.ImageStatus() and imageService.ListImages(), divide the image's name list into tagged and digested values, and if we have names, add canonical versions. In Server.ContainerStatus(), return the image name as it was given to us as the image, and the image digested reference as the image reference. In Server.ListImages(), be sure to only return tagged names in the RepoTags field. In Server.ImageStatus(), also return canonical references in the RepoDigests field. In Server.PullImage(), be sure that we consistently return the same image reference for an image, whether we ended up pulling it or not. Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
275 lines
6.1 KiB
Bash
275 lines
6.1 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
load helpers
|
|
|
|
IMAGE=kubernetes/pause
|
|
SIGNED_IMAGE=registry.access.redhat.com/rhel7-atomic:latest
|
|
UNSIGNED_IMAGE=docker.io/library/hello-world:latest
|
|
|
|
function teardown() {
|
|
cleanup_test
|
|
}
|
|
|
|
@test "run container in pod with image ID" {
|
|
start_crio
|
|
run crictl runs "$TESTDATA"/sandbox_config.json
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
pod_id="$output"
|
|
sed -e "s/%VALUE%/$REDIS_IMAGEID/g" "$TESTDATA"/container_config_by_imageid.json > "$TESTDIR"/ctr_by_imageid.json
|
|
run crictl create "$pod_id" "$TESTDIR"/ctr_by_imageid.json "$TESTDATA"/sandbox_config.json
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
cleanup_ctrs
|
|
cleanup_pods
|
|
stop_crio
|
|
}
|
|
|
|
@test "container status when created by image ID" {
|
|
start_crio
|
|
|
|
run crictl runs "$TESTDATA"/sandbox_config.json
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
pod_id="$output"
|
|
|
|
sed -e "s/%VALUE%/$REDIS_IMAGEID/g" "$TESTDATA"/container_config_by_imageid.json > "$TESTDIR"/ctr_by_imageid.json
|
|
|
|
run crictl create "$pod_id" "$TESTDIR"/ctr_by_imageid.json "$TESTDATA"/sandbox_config.json
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
ctr_id="$output"
|
|
|
|
run crictl inspect "$ctr_id" --output yaml
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" =~ "image: docker.io/library/redis:alpine" ]]
|
|
[[ "$output" =~ "imageRef: $REDIS_IMAGEREF" ]]
|
|
|
|
cleanup_ctrs
|
|
cleanup_pods
|
|
stop_crio
|
|
}
|
|
|
|
@test "container status when created by image tagged reference" {
|
|
start_crio
|
|
|
|
run crictl runs "$TESTDATA"/sandbox_config.json
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
pod_id="$output"
|
|
|
|
sed -e "s/%VALUE%/redis:alpine/g" "$TESTDATA"/container_config_by_imageid.json > "$TESTDIR"/ctr_by_imagetag.json
|
|
|
|
run crictl create "$pod_id" "$TESTDIR"/ctr_by_imagetag.json "$TESTDATA"/sandbox_config.json
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
ctr_id="$output"
|
|
|
|
run crictl inspect "$ctr_id" --output yaml
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" =~ "image: docker.io/library/redis:alpine" ]]
|
|
[[ "$output" =~ "imageRef: $REDIS_IMAGEREF" ]]
|
|
|
|
cleanup_ctrs
|
|
cleanup_pods
|
|
stop_crio
|
|
}
|
|
|
|
@test "container status when created by image canonical reference" {
|
|
start_crio
|
|
|
|
run crictl runs "$TESTDATA"/sandbox_config.json
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
pod_id="$output"
|
|
|
|
sed -e "s|%VALUE%|$REDIS_IMAGEREF|g" "$TESTDATA"/container_config_by_imageid.json > "$TESTDIR"/ctr_by_imageref.json
|
|
|
|
run crictl create "$pod_id" "$TESTDIR"/ctr_by_imageref.json "$TESTDATA"/sandbox_config.json
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
ctr_id="$output"
|
|
|
|
run crictl inspect "$ctr_id" --output yaml
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" =~ "image: docker.io/library/redis:alpine" ]]
|
|
[[ "$output" =~ "imageRef: $REDIS_IMAGEREF" ]]
|
|
|
|
cleanup_ctrs
|
|
cleanup_pods
|
|
stop_crio
|
|
}
|
|
|
|
@test "image pull and list" {
|
|
start_crio "" "" --no-pause-image
|
|
run crictl pull "$IMAGE"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
|
|
run crictl inspecti "$IMAGE"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
[[ "$output" =~ "$IMAGE" ]]
|
|
|
|
cleanup_images
|
|
stop_crio
|
|
}
|
|
|
|
@test "image pull with signature" {
|
|
start_crio "" "" --no-pause-image
|
|
run crictl pull "$SIGNED_IMAGE"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
cleanup_images
|
|
stop_crio
|
|
}
|
|
|
|
@test "image pull without signature" {
|
|
start_crio "" "" --no-pause-image
|
|
run crictl image pull "$UNSIGNED_IMAGE"
|
|
echo "$output"
|
|
[ "$status" -ne 0 ]
|
|
cleanup_images
|
|
stop_crio
|
|
}
|
|
|
|
@test "image pull and list by tag and ID" {
|
|
start_crio "" "" --no-pause-image
|
|
run crictl pull "$IMAGE:go"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
|
|
run crictl images --quiet "$IMAGE:go"
|
|
[ "$status" -eq 0 ]
|
|
echo "$output"
|
|
[ "$output" != "" ]
|
|
imageid="$output"
|
|
|
|
run crictl images --quiet @"$imageid"
|
|
[ "$status" -eq 0 ]
|
|
echo "$output"
|
|
[ "$output" != "" ]
|
|
|
|
run crictl images --quiet "$imageid"
|
|
[ "$status" -eq 0 ]
|
|
echo "$output"
|
|
[ "$output" != "" ]
|
|
|
|
cleanup_images
|
|
stop_crio
|
|
}
|
|
|
|
@test "image pull and list by digest and ID" {
|
|
start_crio "" "" --no-pause-image
|
|
run crictl pull nginx@sha256:33eb1ed1e802d4f71e52421f56af028cdf12bb3bfff5affeaf5bf0e328ffa1bc
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
|
|
run crictl images --quiet nginx@sha256:33eb1ed1e802d4f71e52421f56af028cdf12bb3bfff5affeaf5bf0e328ffa1bc
|
|
[ "$status" -eq 0 ]
|
|
echo "$output"
|
|
[ "$output" != "" ]
|
|
imageid="$output"
|
|
|
|
run crictl images --quiet nginx@33eb1ed1e802d4f71e52421f56af028cdf12bb3bfff5affeaf5bf0e328ffa1bc
|
|
[ "$status" -eq 0 ]
|
|
echo "$output"
|
|
[ "$output" != "" ]
|
|
imageid="$output"
|
|
|
|
run crictl images --quiet @"$imageid"
|
|
[ "$status" -eq 0 ]
|
|
echo "$output"
|
|
[ "$output" != "" ]
|
|
|
|
run crictl images --quiet "$imageid"
|
|
[ "$status" -eq 0 ]
|
|
echo "$output"
|
|
[ "$output" != "" ]
|
|
|
|
cleanup_images
|
|
stop_crio
|
|
}
|
|
|
|
@test "image list with filter" {
|
|
start_crio "" "" --no-pause-image
|
|
run crictl pull "$IMAGE"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
run crictl images --quiet "$IMAGE"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
printf '%s\n' "$output" | while IFS= read -r id; do
|
|
run crictl rmi "$id"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
done
|
|
run crictl images --quiet
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
printf '%s\n' "$output" | while IFS= read -r id; do
|
|
echo "$id"
|
|
status=1
|
|
done
|
|
cleanup_images
|
|
stop_crio
|
|
}
|
|
|
|
@test "image list/remove" {
|
|
start_crio "" "" --no-pause-image
|
|
run crictl pull "$IMAGE"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
run crictl images --quiet
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" != "" ]
|
|
printf '%s\n' "$output" | while IFS= read -r id; do
|
|
run crictl rmi "$id"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
done
|
|
run crictl images --quiet
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" = "" ]
|
|
printf '%s\n' "$output" | while IFS= read -r id; do
|
|
echo "$id"
|
|
status=1
|
|
done
|
|
cleanup_images
|
|
stop_crio
|
|
}
|
|
|
|
@test "image status/remove" {
|
|
start_crio "" "" --no-pause-image
|
|
run crictl pull "$IMAGE"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
run crictl images --quiet
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" != "" ]
|
|
printf '%s\n' "$output" | while IFS= read -r id; do
|
|
run crictl inspecti "$id"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" != "" ]
|
|
run crictl rmi "$id"
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
done
|
|
run crictl images --quiet
|
|
echo "$output"
|
|
[ "$status" -eq 0 ]
|
|
[ "$output" = "" ]
|
|
printf '%s\n' "$output" | while IFS= read -r id; do
|
|
echo "$id"
|
|
status=1
|
|
done
|
|
cleanup_images
|
|
stop_crio
|
|
}
|