mirror of
https://github.com/containers/podman.git
synced 2025-08-06 03:19:52 +08:00
System tests: safe container/image/volume/etc names
Many system tests use hardcoded names for containers, images, and everything. This has worked because system tests run serially. It will not work if we ever run in parallel. Create a new safename() helper, and use it as follows: myctr=c_$(safename) myvol1=v1_$(safename) ... Find current instances of hardcoded names, and replace with safe ones. Whether or not we ever end up parallelizing system tests, this is simply good practice. There are far too many instances to fix in one (reviewable) PR. This is commit 1 of N. Signed-off-by: Ed Santiago <santiago@redhat.com>
This commit is contained in:
@ -62,31 +62,33 @@ Labels.created_at | 20[0-9-]\\\+T[0-9:]\\\+Z
|
||||
# podman history is persistent: it permanently alters our base image.
|
||||
# Create a dummy image here so we leave our setup as we found it.
|
||||
# Multiple --name options confirm command-line override (last one wins)
|
||||
run_podman run --name ignore-me --name my-container $IMAGE true
|
||||
run_podman commit my-container my-test-image
|
||||
cname=c_$(safename)
|
||||
iname=i_$(safename)
|
||||
run_podman run --name ignore-me --name $cname $IMAGE true
|
||||
run_podman commit $cname $iname
|
||||
|
||||
run_podman images my-test-image --format '{{ .History }}'
|
||||
is "$output" "localhost/my-test-image:latest" "image history with initial name"
|
||||
run_podman images $iname --format '{{ .History }}'
|
||||
is "$output" "localhost/$iname:latest" "image history with initial name"
|
||||
|
||||
# Generate two randomish tags; 'tr' because they must be all lower-case
|
||||
rand_name1="test-image-history-$(random_string 10 | tr A-Z a-z)"
|
||||
rand_name2="test-image-history-$(random_string 10 | tr A-Z a-z)"
|
||||
# Generate two randomish tags
|
||||
rand_name1="test-image-history-1-$(safename)"
|
||||
rand_name2="test-image-history-2-$(safename)"
|
||||
|
||||
# Tag once, rmi, and make sure the tag name appears in history
|
||||
run_podman tag my-test-image $rand_name1
|
||||
run_podman tag $iname $rand_name1
|
||||
run_podman rmi $rand_name1
|
||||
run_podman images my-test-image --format '{{ .History }}'
|
||||
is "$output" "localhost/my-test-image:latest, localhost/${rand_name1}:latest" "image history after one tag"
|
||||
run_podman images $iname --format '{{ .History }}'
|
||||
is "$output" "localhost/$iname:latest, localhost/${rand_name1}:latest" "image history after one tag"
|
||||
|
||||
# Repeat with second tag. Now both tags should be in history
|
||||
run_podman tag my-test-image $rand_name2
|
||||
run_podman tag $iname $rand_name2
|
||||
run_podman rmi $rand_name2
|
||||
run_podman images my-test-image --format '{{ .History }}'
|
||||
is "$output" "localhost/my-test-image:latest, localhost/${rand_name2}:latest, localhost/${rand_name1}:latest" \
|
||||
run_podman images $iname --format '{{ .History }}'
|
||||
is "$output" "localhost/$iname:latest, localhost/${rand_name2}:latest, localhost/${rand_name1}:latest" \
|
||||
"image history after two tags"
|
||||
|
||||
run_podman rmi my-test-image
|
||||
run_podman rm my-container
|
||||
run_podman rmi $iname
|
||||
run_podman rm $cname
|
||||
}
|
||||
|
||||
@test "podman images - filter" {
|
||||
@ -102,26 +104,28 @@ Labels.created_at | 20[0-9-]\\\+T[0-9:]\\\+Z
|
||||
|
||||
# Create a dummy container, then commit that as an image. We will
|
||||
# now be able to use before/after/since queries
|
||||
run_podman run --name mytinycontainer $IMAGE true
|
||||
run_podman commit -q mytinycontainer mynewimage
|
||||
cname=c_$(safename)
|
||||
iname=i_$(safename)
|
||||
run_podman run --name $cname $IMAGE true
|
||||
run_podman commit -q $cname $iname
|
||||
new_iid=$output
|
||||
|
||||
# (refactor common options for legibility)
|
||||
opts='--noheading --no-trunc --format={{.ID}}--{{.Repository}}:{{.Tag}}'
|
||||
|
||||
run_podman images ${opts} --filter=after=$iid
|
||||
is "$output" "sha256:$new_iid--localhost/mynewimage:latest" "filter: after"
|
||||
is "$output" "sha256:$new_iid--localhost/$iname:latest" "filter: after"
|
||||
|
||||
# Same thing, with 'since' instead of 'after'
|
||||
run_podman images ${opts} --filter=since=$iid
|
||||
is "$output" "sha256:$new_iid--localhost/mynewimage:latest" "filter: since"
|
||||
is "$output" "sha256:$new_iid--localhost/$iname:latest" "filter: since"
|
||||
|
||||
run_podman images ${opts} --filter=before=mynewimage
|
||||
run_podman images ${opts} --filter=before=$iname
|
||||
is "$output" "sha256:$iid--$IMAGE" "filter: before"
|
||||
|
||||
# Clean up
|
||||
run_podman rmi mynewimage
|
||||
run_podman rm mytinycontainer
|
||||
run_podman rmi $iname
|
||||
run_podman rm $cname
|
||||
}
|
||||
|
||||
# Regression test for https://github.com/containers/podman/issues/7651
|
||||
@ -238,7 +242,7 @@ Labels.created_at | 20[0-9-]\\\+T[0-9:]\\\+Z
|
||||
}
|
||||
|
||||
@test "podman images - rmi -af removes all containers and pods" {
|
||||
pname=$(random_string)
|
||||
pname=p_$(safename)
|
||||
run_podman create --pod new:$pname $IMAGE
|
||||
|
||||
run_podman inspect --format '{{.ID}}' $IMAGE
|
||||
@ -274,7 +278,7 @@ Deleted: $pauseID" "infra images gets removed as well"
|
||||
}
|
||||
|
||||
@test "podman images - rmi -f can remove infra images" {
|
||||
pname=$(random_string)
|
||||
pname=p_$(safename)
|
||||
run_podman create --pod new:$pname $IMAGE
|
||||
|
||||
pauseImage=$(pause_image)
|
||||
@ -299,8 +303,7 @@ Deleted: $pauseID"
|
||||
}
|
||||
|
||||
@test "podman rmi --ignore" {
|
||||
random_image_name=$(random_string)
|
||||
random_image_name=${random_image_name,,} # name must be lowercase
|
||||
random_image_name=i_$(safename)
|
||||
run_podman 1 rmi $random_image_name
|
||||
is "$output" "Error: $random_image_name: image not known.*"
|
||||
run_podman rmi --ignore $random_image_name
|
||||
@ -313,8 +316,7 @@ Deleted: $pauseID"
|
||||
run_podman image rm --force bogus
|
||||
is "$output" "" "Should print no output"
|
||||
|
||||
random_image_name=$(random_string)
|
||||
random_image_name=${random_image_name,,} # name must be lowercase
|
||||
random_image_name=i_$(safename)
|
||||
run_podman image tag $IMAGE $random_image_name
|
||||
run_podman image rm --force bogus $random_image_name
|
||||
assert "$output" = "Untagged: localhost/$random_image_name:latest" "removed image"
|
||||
@ -324,24 +326,26 @@ Deleted: $pauseID"
|
||||
}
|
||||
|
||||
@test "podman images - commit docker with comment" {
|
||||
run_podman run --name my-container -d $IMAGE top
|
||||
run_podman 125 commit -m comment my-container my-test-image
|
||||
cname=c_$(safename)
|
||||
iname=i_$(safename)
|
||||
run_podman run --name $cname -d $IMAGE top
|
||||
run_podman 125 commit -m comment $cname $iname
|
||||
assert "$output" == "Error: messages are only compatible with the docker image format (-f docker)" "podman should fail unless docker format"
|
||||
|
||||
# Without -q: verbose output, but only on podman-local, not remote
|
||||
run_podman commit my-container --format docker -m comment my-test-image1
|
||||
run_podman commit $cname --format docker -m comment ${iname}_2
|
||||
if ! is_remote; then
|
||||
assert "$output" =~ "Getting image.*Writing manif" \
|
||||
"Without -q, verbose output"
|
||||
fi
|
||||
|
||||
# With -q, both local and remote: only an image ID
|
||||
run_podman commit -q my-container --format docker -m comment my-test-image2
|
||||
run_podman commit -q $cname --format docker -m comment ${iname}_3
|
||||
assert "$output" =~ "^[0-9a-f]{64}\$" \
|
||||
"With -q, output is a commit ID, no warnings or other output"
|
||||
|
||||
run_podman rmi my-test-image1 my-test-image2
|
||||
run_podman rm my-container --force -t 0
|
||||
run_podman rmi ${iname}_2 ${iname}_3
|
||||
run_podman rm $cname --force -t 0
|
||||
}
|
||||
|
||||
@test "podman pull image with additional store" {
|
||||
|
@ -122,7 +122,7 @@ echo $rand | 0 | $rand
|
||||
}
|
||||
|
||||
@test "podman run --name" {
|
||||
randomname=$(random_string 30)
|
||||
randomname=c_$(safename)
|
||||
|
||||
run_podman run -d --name $randomname $IMAGE sleep inf
|
||||
cid=$output
|
||||
@ -192,7 +192,8 @@ echo $rand | 0 | $rand
|
||||
run_podman 1 image exists $NONLOCAL_IMAGE
|
||||
|
||||
# Run a container, without --rm; this should block subsequent --rmi
|
||||
run_podman run --name /keepme $NONLOCAL_IMAGE /bin/true
|
||||
cname=c_$(safename)
|
||||
run_podman run --name /$cname $NONLOCAL_IMAGE /bin/true
|
||||
run_podman image exists $NONLOCAL_IMAGE
|
||||
|
||||
# Now try running with --rmi : it should succeed, but not remove the image
|
||||
@ -202,7 +203,7 @@ echo $rand | 0 | $rand
|
||||
run_podman image exists $NONLOCAL_IMAGE
|
||||
|
||||
# Remove the stray container, and run one more time with --rmi.
|
||||
run_podman rm /keepme
|
||||
run_podman rm /$cname
|
||||
run_podman run --rmi $NONLOCAL_IMAGE /bin/true
|
||||
run_podman 1 image exists $NONLOCAL_IMAGE
|
||||
|
||||
@ -220,7 +221,7 @@ echo $rand | 0 | $rand
|
||||
# on write.
|
||||
echo "$(random_string 120)" > $cidfile
|
||||
|
||||
cname=$(random_string)
|
||||
cname=c_$(safename)
|
||||
run_podman run --name $cname \
|
||||
--conmon-pidfile=$pidfile \
|
||||
--cidfile=$cidfile \
|
||||
@ -255,23 +256,25 @@ echo $rand | 0 | $rand
|
||||
skip_if_remote "podman-remote does not support docker-archive"
|
||||
|
||||
# Create an image that, when run, outputs a random magic string
|
||||
cname=c_$(safename)
|
||||
expect=$(random_string 20)
|
||||
run_podman run --name myc --entrypoint="[\"/bin/echo\",\"$expect\"]" $IMAGE
|
||||
run_podman run --name $cname --entrypoint="[\"/bin/echo\",\"$expect\"]" $IMAGE
|
||||
is "$output" "$expect" "podman run --entrypoint echo-randomstring"
|
||||
|
||||
# Save it as a tar archive
|
||||
run_podman commit myc myi
|
||||
iname=i_$(safename)
|
||||
run_podman commit $cname $iname
|
||||
archive=$PODMAN_TMPDIR/archive.tar
|
||||
run_podman save --quiet myi -o $archive
|
||||
run_podman save --quiet $iname -o $archive
|
||||
is "$output" "" "podman save"
|
||||
|
||||
# Clean up image and container from container storage...
|
||||
run_podman rmi myi
|
||||
run_podman rm myc
|
||||
run_podman rmi $iname
|
||||
run_podman rm $cname
|
||||
|
||||
# ... then confirm we can run from archive. This re-imports the image
|
||||
# and runs it, producing our random string as the last line.
|
||||
run_podman run docker-archive:$archive
|
||||
run_podman run --name ${cname}_2 docker-archive:$archive
|
||||
is "${lines[0]}" "Getting image source signatures" "podman run docker-archive, first line of output"
|
||||
is "$output" ".*Copying blob" "podman run docker-archive"
|
||||
is "$output" ".*Copying config" "podman run docker-archive"
|
||||
@ -279,8 +282,8 @@ echo $rand | 0 | $rand
|
||||
is "${lines[-1]}" "$expect" "podman run docker-archive: expected random string output"
|
||||
|
||||
# Clean up container as well as re-imported image
|
||||
run_podman rm -a
|
||||
run_podman rmi myi
|
||||
run_podman rm ${cname}_2
|
||||
run_podman rmi $iname
|
||||
|
||||
# Repeat the above, with podman-create and podman-start.
|
||||
run_podman create docker-archive:$archive
|
||||
@ -291,7 +294,7 @@ echo $rand | 0 | $rand
|
||||
|
||||
# Clean up.
|
||||
run_podman rm $cid
|
||||
run_podman rmi myi
|
||||
run_podman rmi $iname
|
||||
}
|
||||
|
||||
# #6735 : complex interactions with multiple user namespaces
|
||||
@ -407,15 +410,16 @@ json-file | f
|
||||
|
||||
while read driver do_check; do
|
||||
msg=$(random_string 15)
|
||||
run_podman run --name myctr --log-driver $driver $IMAGE echo $msg
|
||||
cname=c_$(safename)
|
||||
run_podman run --name $cname --log-driver $driver $IMAGE echo $msg
|
||||
is "$output" "$msg" "basic output sanity check (driver=$driver)"
|
||||
|
||||
# Simply confirm that podman preserved our argument as-is
|
||||
run_podman inspect --format '{{.HostConfig.LogConfig.Type}}' myctr
|
||||
run_podman inspect --format '{{.HostConfig.LogConfig.Type}}' $cname
|
||||
is "$output" "$driver" "podman inspect: driver"
|
||||
|
||||
# If LogPath is non-null, check that it exists and has a valid log
|
||||
run_podman inspect --format '{{.HostConfig.LogConfig.Path}}' myctr
|
||||
run_podman inspect --format '{{.HostConfig.LogConfig.Path}}' $cname
|
||||
if [[ $do_check != '-' ]]; then
|
||||
is "$output" "/.*" "LogPath (driver=$driver)"
|
||||
if ! test -e "$output"; then
|
||||
@ -433,17 +437,17 @@ json-file | f
|
||||
# Cannot perform check
|
||||
:
|
||||
else
|
||||
run_podman logs myctr
|
||||
run_podman logs $cname
|
||||
is "$output" "$msg" "podman logs, with driver '$driver'"
|
||||
fi
|
||||
else
|
||||
run_podman 125 logs myctr
|
||||
run_podman 125 logs $cname
|
||||
if ! is_remote; then
|
||||
is "$output" ".*this container is using the 'none' log driver, cannot read logs.*" \
|
||||
"podman logs, with driver 'none', should fail with error"
|
||||
fi
|
||||
fi
|
||||
run_podman rm myctr
|
||||
run_podman rm $cname
|
||||
done < <(parse_table "$tests")
|
||||
|
||||
# Invalid log-driver argument
|
||||
@ -462,13 +466,14 @@ json-file | f
|
||||
pidfile="${PODMAN_TMPDIR}/$(random_string 20)"
|
||||
|
||||
# Multiple --log-driver options to confirm that last one wins
|
||||
run_podman run --name myctr --log-driver=none --log-driver journald \
|
||||
cname=c_$(safename)
|
||||
run_podman run --name $cname --log-driver=none --log-driver journald \
|
||||
--conmon-pidfile $pidfile $IMAGE echo $msg
|
||||
|
||||
journalctl --output cat _PID=$(cat $pidfile)
|
||||
is "$output" "$msg" "check that journalctl output equals the container output"
|
||||
|
||||
run_podman rm myctr
|
||||
run_podman rm $cname
|
||||
}
|
||||
|
||||
@test "podman run --tz" {
|
||||
@ -530,18 +535,20 @@ json-file | f
|
||||
rm -f $new_runtime
|
||||
}
|
||||
|
||||
@test "podman --noout run should print output" {
|
||||
run_podman --noout run -d --name test $IMAGE echo hi
|
||||
@test "podman --noout run should not print output" {
|
||||
cname=c_$(safename)
|
||||
run_podman --noout run -d --name $cname $IMAGE echo hi
|
||||
is "$output" "" "output should be empty"
|
||||
run_podman wait test
|
||||
run_podman --noout rm test
|
||||
run_podman wait $cname
|
||||
run_podman --noout rm $cname
|
||||
is "$output" "" "output should be empty"
|
||||
}
|
||||
|
||||
@test "podman --noout create should print output" {
|
||||
run_podman --noout create --name test $IMAGE echo hi
|
||||
@test "podman --noout create should not print output" {
|
||||
cname=c_$(safename)
|
||||
run_podman --noout create --name $cname $IMAGE echo hi
|
||||
is "$output" "" "output should be empty"
|
||||
run_podman --noout rm test
|
||||
run_podman --noout rm $cname
|
||||
is "$output" "" "output should be empty"
|
||||
}
|
||||
|
||||
@ -549,15 +556,16 @@ json-file | f
|
||||
outfile=${PODMAN_TMPDIR}/out-results
|
||||
|
||||
# first we'll need to run something, write its output to a file, and then read its contents.
|
||||
run_podman --out $outfile run -d --name test $IMAGE echo hola
|
||||
cname=c_$(safename)
|
||||
run_podman --out $outfile run -d --name $cname $IMAGE echo hola
|
||||
is "$output" "" "output should be redirected"
|
||||
run_podman wait test
|
||||
run_podman wait $cname
|
||||
|
||||
# compare the container id against the one in the file
|
||||
run_podman container inspect --format '{{.Id}}' test
|
||||
run_podman container inspect --format '{{.Id}}' $cname
|
||||
is "$output" "$(<$outfile)" "container id should match"
|
||||
|
||||
run_podman --out /dev/null rm test
|
||||
run_podman --out /dev/null rm $cname
|
||||
is "$output" "" "output should be empty"
|
||||
}
|
||||
|
||||
@ -565,22 +573,22 @@ json-file | f
|
||||
outfile=${PODMAN_TMPDIR}/out-results
|
||||
|
||||
# first we'll need to run something, write its output to a file, and then read its contents.
|
||||
run_podman --out $outfile create --name test $IMAGE echo hola
|
||||
cname=c_$(safename)
|
||||
run_podman --out $outfile create --name $cname $IMAGE echo hola
|
||||
is "$output" "" "output should be redirected"
|
||||
|
||||
# compare the container id against the one in the file
|
||||
run_podman container inspect --format '{{.Id}}' test
|
||||
run_podman container inspect --format '{{.Id}}' $cname
|
||||
is "$output" "$(<$outfile)" "container id should match"
|
||||
|
||||
run_podman --out /dev/null rm test
|
||||
run_podman --out /dev/null rm $cname
|
||||
is "$output" "" "output should be empty"
|
||||
}
|
||||
|
||||
# Regression test for issue #8082
|
||||
@test "podman run : look up correct image name" {
|
||||
# Create a 2nd tag for the local image. Force to lower case, and apply it.
|
||||
local newtag="localhost/$(random_string 10)/$(random_string 8)"
|
||||
newtag=${newtag,,}
|
||||
# Create a 2nd tag for the local image.
|
||||
local newtag="localhost/r_$(safename)/i_$(safename)"
|
||||
run_podman tag $IMAGE $newtag
|
||||
|
||||
# Create a container with the 2nd tag and make sure that it's being
|
||||
@ -596,7 +604,7 @@ json-file | f
|
||||
newtag2="${newtag}:$(random_string 6|tr A-Z a-z)"
|
||||
run_podman tag $IMAGE $newtag2
|
||||
|
||||
cname="$(random_string 14|tr A-Z a-z)"
|
||||
cname="c_$(safename)"
|
||||
run_podman create --name $cname $newtag2
|
||||
run_podman inspect --format "{{.ImageName}}" $cname
|
||||
is "$output" "$newtag2" \
|
||||
@ -621,7 +629,7 @@ json-file | f
|
||||
}
|
||||
|
||||
@test "podman inspect includes image data" {
|
||||
randomname=$(random_string 30)
|
||||
randomname=c_$(safename)
|
||||
|
||||
run_podman inspect $IMAGE --format "{{.ID}}"
|
||||
expected="$IMAGE $output"
|
||||
@ -650,7 +658,7 @@ json-file | f
|
||||
run_podman inspect --format '{{.ID}}' $IMAGE
|
||||
local iid="$output"
|
||||
|
||||
random_cname=c$(random_string 15 | tr A-Z a-z)
|
||||
random_cname=c_$(safename)
|
||||
local rootless=0
|
||||
if is_rootless; then
|
||||
rootless=1
|
||||
@ -708,8 +716,8 @@ json-file | f
|
||||
run_podman image mount $IMAGE
|
||||
romount="$output"
|
||||
|
||||
randomname=$(random_string 30)
|
||||
# FIXME FIXME FIXME: Remove :O once (if) #14504 is fixed!
|
||||
randomname=c_$(safename)
|
||||
# :O (overlay) required with rootfs; see #14504
|
||||
run_podman run --name=$randomname --rootfs $romount:O echo "Hello world"
|
||||
is "$output" "Hello world"
|
||||
|
||||
@ -730,7 +738,7 @@ json-file | f
|
||||
char_count=700000
|
||||
|
||||
# Container name; primarily needed when running podman-remote
|
||||
cname=mybigdatacontainer
|
||||
cname=c_$(safename)
|
||||
|
||||
# This is one of those cases where BATS is not the best test framework.
|
||||
# We can't do any output redirection, because 'run' overrides it so
|
||||
@ -744,14 +752,15 @@ json-file | f
|
||||
is "${lines[1]}" "$char_count+0 records out" "dd: number of records out"
|
||||
|
||||
# We don't have many tests for '-l'. This is as good a place as any
|
||||
if ! is_remote; then
|
||||
cname=-l
|
||||
local dash_l=-l
|
||||
if is_remote; then
|
||||
dash_l=$cname
|
||||
fi
|
||||
|
||||
# Now find that log file, and count the NULs in it.
|
||||
# The log file is of the form '<timestamp> <P|F> <data>', where P|F
|
||||
# is Partial/Full; I think that's called "kubernetes log format"?
|
||||
run_podman inspect $cname --format '{{.HostConfig.LogConfig.Path}}'
|
||||
run_podman inspect $dash_l --format '{{.HostConfig.LogConfig.Path}}'
|
||||
logfile="$output"
|
||||
|
||||
count_zero=$(tr -cd '\0' <$logfile | wc -c)
|
||||
@ -768,14 +777,14 @@ json-file | f
|
||||
}
|
||||
|
||||
@test "podman run --timeout - basic test" {
|
||||
cid=timeouttest
|
||||
cname=c_$(safename)
|
||||
t0=$SECONDS
|
||||
run_podman 255 run --name $cid --timeout 2 $IMAGE sleep 60
|
||||
run_podman 255 run --name $cname --timeout 2 $IMAGE sleep 60
|
||||
t1=$SECONDS
|
||||
# Confirm that container is stopped. Podman-remote unfortunately
|
||||
# cannot tell the difference between "stopped" and "exited", and
|
||||
# spits them out interchangeably, so we need to recognize either.
|
||||
run_podman inspect --format '{{.State.Status}} {{.State.ExitCode}}' $cid
|
||||
run_podman inspect --format '{{.State.Status}} {{.State.ExitCode}}' $cname
|
||||
is "$output" "\\(stopped\|exited\\) \-1" \
|
||||
"Status and exit code of stopped container"
|
||||
|
||||
@ -785,7 +794,7 @@ json-file | f
|
||||
assert "$delta_t" -gt 1 "podman stop: ran too quickly!"
|
||||
assert "$delta_t" -le 6 "podman stop: took too long"
|
||||
|
||||
run_podman rm $cid
|
||||
run_podman rm $cname
|
||||
}
|
||||
|
||||
@test "podman run no /etc/mtab " {
|
||||
@ -1029,21 +1038,26 @@ EOF
|
||||
@test "podman run failed --rm " {
|
||||
port=$(random_free_port)
|
||||
|
||||
# Container names must sort alphanumerically
|
||||
c_ok=c1_$(safename)
|
||||
c_fail_no_rm=c2_$(safename)
|
||||
c_fail_with_rm=c3_$(safename)
|
||||
|
||||
# Run two containers with the same port bindings. The second must fail
|
||||
run_podman run -p $port:80 --rm -d --name c_ok $IMAGE top
|
||||
run_podman 126 run -p $port:80 -d --name c_fail_no_rm $IMAGE top
|
||||
run_podman 126 run -p $port:80 --rm -d --name c_fail_with_rm $IMAGE top
|
||||
run_podman run -p $port:80 --rm -d --name $c_ok $IMAGE top
|
||||
run_podman 126 run -p $port:80 -d --name $c_fail_no_rm $IMAGE top
|
||||
run_podman 126 run -p $port:80 --rm -d --name $c_fail_with_rm $IMAGE top
|
||||
# Prior to #15060, the third container would still show up in ps -a
|
||||
run_podman ps -a --sort names --format '{{.Image}}--{{.Names}}'
|
||||
is "$output" "$IMAGE--c_fail_no_rm
|
||||
$IMAGE--c_ok" \
|
||||
is "$output" "$IMAGE--${c_ok}
|
||||
$IMAGE--${c_fail_no_rm}" \
|
||||
"podman ps -a shows running & failed containers, but not failed-with-rm"
|
||||
|
||||
run_podman container rm -f -t 0 c_ok c_fail_no_rm
|
||||
run_podman container rm -f -t 0 $c_ok $c_fail_no_rm
|
||||
}
|
||||
|
||||
@test "podman run --attach stdin prints container ID" {
|
||||
ctr_name="container-$(random_string 5)"
|
||||
ctr_name="container-$(safename)"
|
||||
run_podman run --name $ctr_name --attach stdin $IMAGE echo hello
|
||||
run_output=$output
|
||||
run_podman inspect --format "{{.Id}}" $ctr_name
|
||||
@ -1191,7 +1205,7 @@ EOF
|
||||
}
|
||||
|
||||
@test "podman run bad --name" {
|
||||
randomname=$(random_string 30)
|
||||
randomname=c_$(safename)
|
||||
run_podman 125 create --name "$randomname/bad" $IMAGE
|
||||
run_podman create --name "/$randomname" $IMAGE
|
||||
run_podman ps -a --filter name="^/$randomname$" --format '{{ .Names }}'
|
||||
@ -1253,7 +1267,7 @@ EOF
|
||||
run_podman run --uidmap=0:1000:200 --rm --rootfs "$romount:idmap=uids=@2000-1-1;gids=@2000-1-1" stat -c %u:%g /testfile
|
||||
is "$output" "1:1"
|
||||
|
||||
myvolume=my-volume-$(random_string)
|
||||
myvolume=my-volume-$(safename)
|
||||
run_podman volume create $myvolume
|
||||
mkdir $romount/volume
|
||||
run_podman run --rm --uidmap=0:1000:10000 -v volume:/volume:idmap --rootfs $romount stat -c %u:%g /volume
|
||||
@ -1265,7 +1279,7 @@ EOF
|
||||
|
||||
@test "podman run --restart=always -- wait" {
|
||||
# regression test for #18572 to make sure Podman waits less than 20 seconds
|
||||
ctr=$(random_string)
|
||||
ctr=c_$(safename)
|
||||
run_podman run -d --restart=always --name=$ctr $IMAGE false
|
||||
PODMAN_TIMEOUT=20 run_podman wait $ctr
|
||||
is "$output" "1" "container should exit 1"
|
||||
@ -1284,7 +1298,7 @@ cat >$containersconf <<EOF
|
||||
[engine]
|
||||
static_dir="$static_dir"
|
||||
EOF
|
||||
ctr=$(random_string)
|
||||
ctr=c_$(safename)
|
||||
CONTAINERS_CONF_OVERRIDE=$containersconf PODMAN_TIMEOUT=20 run_podman run --name=$ctr $IMAGE true
|
||||
CONTAINERS_CONF_OVERRIDE=$containersconf PODMAN_TIMEOUT=20 run_podman inspect --format "{{.ID}}" $ctr
|
||||
cid="$output"
|
||||
@ -1370,7 +1384,7 @@ search | $IMAGE |
|
||||
}
|
||||
|
||||
@test "podman create container with conflicting name" {
|
||||
local cname="$(random_string 10 | tr A-Z a-z)"
|
||||
local cname=c_$(safename)
|
||||
local output_msg_ext="^Error: .*: the container name \"$cname\" is already in use by .* You have to remove that container to be able to reuse that name: that name is already in use by an external entity, or use --replace to instruct Podman to do so."
|
||||
local output_msg="^Error: .*: the container name \"$cname\" is already in use by .* You have to remove that container to be able to reuse that name: that name is already in use, or use --replace to instruct Podman to do so."
|
||||
if is_remote; then
|
||||
@ -1433,12 +1447,13 @@ search | $IMAGE |
|
||||
}
|
||||
|
||||
@test "podman run - rm pod if container creation failed with -pod new:" {
|
||||
run_podman run -d --name foobar $IMAGE hostname
|
||||
cname=c_$(safename)
|
||||
run_podman run -d --name $cname $IMAGE hostname
|
||||
cid=$output
|
||||
|
||||
podname=pod$(random_string)
|
||||
run_podman 125 run --rm --pod "new:$podname" --name foobar $IMAGE hostname
|
||||
is "$output" ".*creating container storage: the container name \"foobar\" is already in use by"
|
||||
podname=pod_$(safename)
|
||||
run_podman 125 run --rm --pod "new:$podname" --name $cname $IMAGE hostname
|
||||
is "$output" ".*creating container storage: the container name \"$cname\" is already in use by"
|
||||
|
||||
# pod should've been cleaned up
|
||||
# if container creation failed
|
||||
@ -1467,27 +1482,28 @@ search | $IMAGE |
|
||||
@test "podman run - stopping loop" {
|
||||
skip_if_remote "this doesn't work with with the REST service"
|
||||
|
||||
run_podman run -d --name testctr --stop-timeout 240 $IMAGE sh -c 'echo READY; sleep 999'
|
||||
cname=c_$(safename)
|
||||
run_podman run -d --name $cname --stop-timeout 240 $IMAGE sh -c 'echo READY; sleep 999'
|
||||
cid="$output"
|
||||
wait_for_ready testctr
|
||||
wait_for_ready $cname
|
||||
|
||||
run_podman inspect --format '{{ .State.ConmonPid }}' testctr
|
||||
run_podman inspect --format '{{ .State.ConmonPid }}' $cname
|
||||
conmon_pid=$output
|
||||
|
||||
${PODMAN} stop testctr &
|
||||
${PODMAN} stop $cname &
|
||||
stop_pid=$!
|
||||
|
||||
timeout=20
|
||||
while :;do
|
||||
sleep 0.5
|
||||
run_podman container inspect --format '{{.State.Status}}' testctr
|
||||
run_podman container inspect --format '{{.State.Status}}' $cname
|
||||
if [[ "$output" = "stopping" ]]; then
|
||||
break
|
||||
fi
|
||||
timeout=$((timeout - 1))
|
||||
if [[ $timeout == 0 ]]; then
|
||||
run_podman ps -a
|
||||
die "Timed out waiting for testctr to acknowledge signal"
|
||||
die "Timed out waiting for container to acknowledge signal"
|
||||
fi
|
||||
done
|
||||
|
||||
@ -1496,14 +1512,14 @@ search | $IMAGE |
|
||||
|
||||
# Unclear why `-t0` is required here, works locally without.
|
||||
# But it shouldn't hurt and does make the test pass...
|
||||
PODMAN_TIMEOUT=5 run_podman 125 stop -t0 testctr
|
||||
PODMAN_TIMEOUT=5 run_podman 125 stop -t0 $cname
|
||||
is "$output" "Error: container .* conmon exited prematurely, exit code could not be retrieved: internal libpod error" "correct error on missing conmon"
|
||||
|
||||
# This should be safe because stop is guaranteed to call cleanup?
|
||||
run_podman inspect --format "{{ .State.Status }}" testctr
|
||||
run_podman inspect --format "{{ .State.Status }}" $cname
|
||||
is "$output" "exited" "container has successfully transitioned to exited state after stop"
|
||||
|
||||
run_podman rm -f -t0 testctr
|
||||
run_podman rm -f -t0 $cname
|
||||
}
|
||||
|
||||
# vim: filetype=sh
|
||||
|
@ -1153,6 +1153,20 @@ function random_string() {
|
||||
head /dev/urandom | tr -dc a-zA-Z0-9 | head -c$length
|
||||
}
|
||||
|
||||
##############
|
||||
# safename # Returns a pseudorandom string suitable for container/image/etc names
|
||||
##############
|
||||
#
|
||||
# Name will include the bats test number, eg "t123_xyz123". When/if we
|
||||
# ever parallelize system tests, this will make it possible to check
|
||||
# for leaks and identify the test that leaked.
|
||||
#
|
||||
# String is lower-case so it can be used as an image name
|
||||
#
|
||||
function safename() {
|
||||
echo "t${BATS_SUITE_TEST_NUMBER}_$(random_string 8 | tr A-Z a-z)"
|
||||
}
|
||||
|
||||
#########################
|
||||
# find_exec_pid_files # Returns nothing or exec_pid hash files
|
||||
#########################
|
||||
|
Reference in New Issue
Block a user