summaryrefslogtreecommitdiff
path: root/test/system
diff options
context:
space:
mode:
Diffstat (limited to 'test/system')
-rw-r--r--test/system/030-run.bats70
-rw-r--r--test/system/035-logs.bats9
-rw-r--r--test/system/040-ps.bats39
-rw-r--r--test/system/065-cp.bats88
-rw-r--r--test/system/070-build.bats19
-rw-r--r--test/system/260-sdnotify.bats11
-rw-r--r--test/system/600-completion.bats57
-rw-r--r--test/system/helpers.bash43
8 files changed, 196 insertions, 140 deletions
diff --git a/test/system/030-run.bats b/test/system/030-run.bats
index 3ee141f5f..29dc95dc3 100644
--- a/test/system/030-run.bats
+++ b/test/system/030-run.bats
@@ -401,7 +401,7 @@ json-file | f
is "$output" "$driver" "podman inspect: driver"
# If LogPath is non-null, check that it exists and has a valid log
- run_podman inspect --format '{{.LogPath}}' myctr
+ run_podman inspect --format '{{.HostConfig.LogConfig.Path}}' myctr
if [[ $do_check != '-' ]]; then
is "$output" "/.*" "LogPath (driver=$driver)"
if ! test -e "$output"; then
@@ -415,13 +415,18 @@ json-file | f
fi
if [[ $driver != 'none' ]]; then
- run_podman logs myctr
- is "$output" "$msg" "check that podman logs works as expected"
+ if [[ $driver = 'journald' ]] && journald_unavailable; then
+ # Cannot perform check
+ :
+ else
+ run_podman logs myctr
+ is "$output" "$msg" "podman logs, with driver '$driver'"
+ fi
else
run_podman 125 logs myctr
if ! is_remote; then
is "$output" ".*this container is using the 'none' log driver, cannot read logs.*" \
- "podman logs does not work with none log driver"
+ "podman logs, with driver 'none', should fail with error"
fi
fi
run_podman rm myctr
@@ -437,14 +442,7 @@ json-file | f
skip_if_remote "We cannot read journalctl over remote."
# We can't use journald on RHEL as rootless, either: rhbz#1895105
- if is_rootless; then
- run journalctl -n 1
- if [[ $status -ne 0 ]]; then
- if [[ $output =~ permission ]]; then
- skip "Cannot use rootless journald on this system"
- fi
- fi
- fi
+ skip_if_journald_unavailable
msg=$(random_string 20)
pidfile="${PODMAN_TMPDIR}/$(random_string 20)"
@@ -550,27 +548,33 @@ json-file | f
}
@test "Verify /run/.containerenv exist" {
- run_podman run --rm $IMAGE ls -1 /run/.containerenv
- is "$output" "/run/.containerenv"
-
- run_podman run --privileged --rm $IMAGE sh -c '. /run/.containerenv; echo $engine'
- is "$output" ".*podman.*" "failed to identify engine"
-
- run_podman run --privileged --name "testcontainerenv" --rm $IMAGE sh -c '. /run/.containerenv; echo $name'
- is "$output" ".*testcontainerenv.*"
-
- run_podman run --privileged --rm $IMAGE sh -c '. /run/.containerenv; echo $image'
- is "$output" ".*$IMAGE.*" "failed to idenitfy image"
-
- run_podman run --privileged --rm $IMAGE sh -c '. /run/.containerenv; echo $rootless'
- # FIXME: on some CI systems, 'run --privileged' emits a spurious
- # warning line about dup devices. Ignore it.
- remove_same_dev_warning
- if is_rootless; then
- is "$output" "1"
- else
- is "$output" "0"
- fi
+ # Nonprivileged container: file exists, but must be empty
+ run_podman run --rm $IMAGE stat -c '%s' /run/.containerenv
+ is "$output" "0" "file size of /run/.containerenv, nonprivileged"
+
+ # Prep work: get ID of image; make a cont. name; determine if we're rootless
+ run_podman inspect --format '{{.ID}}' $IMAGE
+ local iid="$output"
+
+ random_cname=c$(random_string 15 | tr A-Z a-z)
+ local rootless=0
+ if is_rootless; then
+ rootless=1
+ fi
+
+ run_podman run --privileged --rm --name $random_cname $IMAGE \
+ sh -c '. /run/.containerenv; echo $engine; echo $name; echo $image; echo $id; echo $imageid; echo $rootless'
+
+ # FIXME: on some CI systems, 'run --privileged' emits a spurious
+ # warning line about dup devices. Ignore it.
+ remove_same_dev_warning
+
+ is "${lines[0]}" "podman-.*" 'containerenv : $engine'
+ is "${lines[1]}" "$random_cname" 'containerenv : $name'
+ is "${lines[2]}" "$IMAGE" 'containerenv : $image'
+ is "${lines[3]}" "[0-9a-f]\{64\}" 'containerenv : $id'
+ is "${lines[4]}" "$iid" 'containerenv : $imageid'
+ is "${lines[5]}" "$rootless" 'containerenv : $rootless'
}
@test "podman run with --net=host and --port prints warning" {
diff --git a/test/system/035-logs.bats b/test/system/035-logs.bats
index a081a7ce1..bac153b8e 100644
--- a/test/system/035-logs.bats
+++ b/test/system/035-logs.bats
@@ -55,14 +55,7 @@ ${cid[0]} d" "Sequential output from logs"
@test "podman logs over journald" {
# We can't use journald on RHEL as rootless: rhbz#1895105
- if is_rootless; then
- run journalctl -n 1
- if [[ $status -ne 0 ]]; then
- if [[ $output =~ permission ]]; then
- skip "Cannot use rootless journald on this system"
- fi
- fi
- fi
+ skip_if_journald_unavailable
msg=$(random_string 20)
diff --git a/test/system/040-ps.bats b/test/system/040-ps.bats
index 1ed2779b2..0447122b1 100644
--- a/test/system/040-ps.bats
+++ b/test/system/040-ps.bats
@@ -82,4 +82,43 @@ load helpers
run_podman rm -a
}
+@test "podman ps -a --storage" {
+ skip_if_remote "ps --storage does not work over remote"
+
+ # Setup: ensure that we have no hidden storage containers
+ run_podman ps --storage -a
+ is "${#lines[@]}" "1" "setup check: no storage containers at start of test"
+
+ # Force a buildah timeout; this leaves a buildah container behind
+ PODMAN_TIMEOUT=5 run_podman 124 build -t thiswillneverexist - <<EOF
+FROM $IMAGE
+RUN sleep 30
+EOF
+
+ run_podman ps -a
+ is "${#lines[@]}" "1" "podman ps -a does not see buildah container"
+
+ run_podman ps --storage -a
+ is "${#lines[@]}" "2" "podman ps -a --storage sees buildah container"
+ is "${lines[1]}" \
+ "[0-9a-f]\{12\} \+$IMAGE *buildah .* seconds ago .* storage .* ${PODMAN_TEST_IMAGE_NAME}-working-container" \
+ "podman ps --storage"
+
+ cid="${lines[1]:0:12}"
+
+ # 'rm -a' should be a NOP
+ run_podman rm -a
+ run_podman ps --storage -a
+ is "${#lines[@]}" "2" "podman ps -a --storage sees buildah container"
+
+ # This is what deletes the container
+ # FIXME: why doesn't "podman rm --storage $cid" do anything?
+ run_podman rm -f "$cid"
+
+ run_podman ps --storage -a
+ is "${#lines[@]}" "1" "storage container has been removed"
+}
+
+
+
# vim: filetype=sh
diff --git a/test/system/065-cp.bats b/test/system/065-cp.bats
index 43bdf217d..d3cf1c274 100644
--- a/test/system/065-cp.bats
+++ b/test/system/065-cp.bats
@@ -8,8 +8,6 @@
load helpers
@test "podman cp file from host to container" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-file-host-to-ctr
mkdir -p $srcdir
local -a randomcontent=(
@@ -57,60 +55,16 @@ load helpers
is "$output" 'Error: ".*/IdoNotExist" could not be found on the host' \
"copy nonexistent host path"
- # Container path does not exist. Notice that the error message shows how
- # the specified container is resolved.
+ # Container (parent) path does not exist.
run_podman 125 cp $srcdir/hostfile0 cpcontainer:/IdoNotExist/
- is "$output" 'Error: "/IdoNotExist/" could not be found on container.*(resolved to .*/IdoNotExist.*' \
+ is "$output" 'Error: "/IdoNotExist/" could not be found on container cpcontainer: No such file or directory' \
"copy into nonexistent path in container"
run_podman rm -f cpcontainer
}
-@test "podman cp --extract=true tar archive to container" {
- skip_if_remote "podman-remote does not yet handle cp"
-
- # Create tempfile with random name and content
- dirname=cp-test-extract
- srcdir=$PODMAN_TMPDIR/$dirname
- mkdir -p $srcdir
- rand_filename=$(random_string 20)
- rand_content=$(random_string 50)
- echo $rand_content > $srcdir/$rand_filename
- chmod 644 $srcdir/$rand_filename
-
- # Now tar it up!
- tar_file=$PODMAN_TMPDIR/archive.tar.gz
- tar -C $PODMAN_TMPDIR -zvcf $tar_file $dirname
-
- run_podman run -d --name cpcontainer $IMAGE sleep infinity
-
- # First just copy without extracting the archive.
- run_podman cp $tar_file cpcontainer:/tmp
- # Now remove the archive which will also test if it exists and is a file.
- # To save expensive exec'ing, create a file for the next tests.
- run_podman exec cpcontainer sh -c "rm /tmp/archive.tar.gz; touch /tmp/file.txt"
-
- # Now copy with extracting the archive. NOTE that Podman should
- # auto-decompress the file if needed.
- run_podman cp --extract=true $tar_file cpcontainer:/tmp
- run_podman exec cpcontainer cat /tmp/$dirname/$rand_filename
- is "$output" "$rand_content"
-
- # Test extract on non archive.
- run_podman cp --extract=true $srcdir/$rand_filename cpcontainer:/foo.txt
-
- # Cannot extract an archive to a file!
- run_podman 125 cp --extract=true $tar_file cpcontainer:/tmp/file.txt
- is "$output" 'Error: cannot extract archive .* to file "/tmp/file.txt"'
-
- run_podman rm -f cpcontainer
-}
-
-
@test "podman cp file from container to host" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-file-ctr-to-host
mkdir -p $srcdir
@@ -153,8 +107,6 @@ load helpers
@test "podman cp dir from host to container" {
- skip_if_remote "podman-remote does not yet handle cp"
-
dirname=dir-test
srcdir=$PODMAN_TMPDIR/$dirname
mkdir -p $srcdir
@@ -195,8 +147,6 @@ load helpers
@test "podman cp dir from container to host" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/dir-test
mkdir -p $srcdir
@@ -230,8 +180,6 @@ load helpers
@test "podman cp file from host to container volume" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-volume
mkdir -p $srcdir
echo "This file should be in volume2" > $srcdir/hostfile
@@ -268,8 +216,6 @@ load helpers
@test "podman cp file from host to container mount" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-mount-src
mountdir=$PODMAN_TMPDIR/cp-test-mount
mkdir -p $srcdir $mountdir
@@ -296,8 +242,6 @@ load helpers
# perform wildcard expansion in the container. We should get both
# files copied into the host.
@test "podman cp * - wildcard copy multiple files from container to host" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-in
dstdir=$PODMAN_TMPDIR/cp-test-out
mkdir -p $srcdir $dstdir
@@ -321,8 +265,6 @@ load helpers
# Create a file on the host; make a symlink in the container pointing
# into host-only space. Try to podman-cp that symlink. It should fail.
@test "podman cp - will not recognize symlink pointing into host space" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-in
dstdir=$PODMAN_TMPDIR/cp-test-out
mkdir -p $srcdir $dstdir
@@ -350,8 +292,6 @@ load helpers
# in the container pointing to 'file*' (file star). Try to podman-cp
# this invalid double symlink. It must fail.
@test "podman cp - will not expand globs in host space (#3829)" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-in
dstdir=$PODMAN_TMPDIR/cp-test-out
mkdir -p $srcdir $dstdir
@@ -372,8 +312,6 @@ load helpers
# Another symlink into host space, this one named '*' (star). cp should fail.
@test "podman cp - will not expand wildcard" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-in
dstdir=$PODMAN_TMPDIR/cp-test-out
mkdir -p $srcdir $dstdir
@@ -394,8 +332,6 @@ load helpers
# THIS IS EXTREMELY WEIRD. Podman expands symlinks in weird ways.
@test "podman cp into container: weird symlink expansion" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-in
dstdir=$PODMAN_TMPDIR/cp-test-out
mkdir -p $srcdir $dstdir
@@ -427,7 +363,7 @@ load helpers
is "$output" "" "output from podman cp 1"
run_podman 125 cp --pause=false $srcdir/$rand_filename2 cpcontainer:/tmp/d2/x/
- is "$output" 'Error: "/tmp/d2/x/" could not be found on container.*' "cp will not create nonexistent destination directory"
+ is "$output" 'Error: "/tmp/d2/x/" could not be found on container cpcontainer: No such file or directory' "cp will not create nonexistent destination directory"
run_podman cp --pause=false $srcdir/$rand_filename3 cpcontainer:/tmp/d3/x
is "$output" "" "output from podman cp 3"
@@ -454,8 +390,6 @@ load helpers
# rhbz1741718 : file copied into container:/var/lib/foo appears as /foo
# (docker only, never seems to have affected podman. Make sure it never does).
@test "podman cp into a subdirectory matching GraphRoot" {
- skip_if_remote "podman-remote does not yet handle cp"
-
# Create tempfile with random name and content
srcdir=$PODMAN_TMPDIR/cp-test-in
mkdir -p $srcdir
@@ -491,8 +425,6 @@ load helpers
@test "podman cp from stdin to container" {
- skip_if_remote "podman-remote does not yet handle cp"
-
# Create tempfile with random name and content
srcdir=$PODMAN_TMPDIR/cp-test-stdin
mkdir -p $srcdir
@@ -525,24 +457,22 @@ load helpers
# Input stream must be a (compressed) tar archive.
run_podman 125 cp - cpcontainer:/tmp < $srcdir/$rand_filename
- is "$output" "Error:.*: error reading tar stream.*" "input stream must be a (compressed) tar archive"
+ is "$output" "Error: source must be a (compressed) tar archive when copying from stdin"
# Destination must be a directory (on an existing file).
run_podman exec cpcontainer touch /tmp/file.txt
run_podman 125 cp /dev/stdin cpcontainer:/tmp/file.txt < $tar_file
- is "$output" 'Error: destination must be a directory or stream when copying from a stream'
+ is "$output" 'Error: destination must be a directory when copying from stdin'
# Destination must be a directory (on an absent path).
run_podman 125 cp /dev/stdin cpcontainer:/tmp/IdoNotExist < $tar_file
- is "$output" 'Error: destination must be a directory or stream when copying from a stream'
+ is "$output" 'Error: destination must be a directory when copying from stdin'
run_podman rm -f cpcontainer
}
@test "podman cp from container to stdout" {
- skip_if_remote "podman-remote does not yet handle cp"
-
srcdir=$PODMAN_TMPDIR/cp-test-stdout
mkdir -p $srcdir
rand_content=$(random_string 50)
@@ -569,7 +499,7 @@ load helpers
tar xvf $srcdir/stdout.tar -C $srcdir
run cat $srcdir/file.txt
is "$output" "$rand_content"
- run 1 ls $srcfir/empty.txt
+ run 1 ls $srcdir/empty.txt
rm -f $srcdir/*
# Copy directory.
@@ -579,9 +509,9 @@ load helpers
fi
tar xvf $srcdir/stdout.tar -C $srcdir
- run cat $srcdir/file.txt
+ run cat $srcdir/tmp/file.txt
is "$output" "$rand_content"
- run cat $srcdir/empty.txt
+ run cat $srcdir/tmp/empty.txt
is "$output" ""
run_podman rm -f cpcontainer
diff --git a/test/system/070-build.bats b/test/system/070-build.bats
index 8e9a2d613..0e83a184b 100644
--- a/test/system/070-build.bats
+++ b/test/system/070-build.bats
@@ -345,7 +345,7 @@ EOF
# all commands after 'podman build' would silently be ignored.
# In the test below, prior to #8092, the 'sed' would not get
# any input, and we would never see $random3 in the output.
- # And, we use 'sed' to massage $random3 juuuuust on the remote
+ # And, we use 'sed' to massage $random3 just on the remote
# chance that podman itself could pass stdin through.
results=$(echo $random3 | (
echo $random1
@@ -424,6 +424,23 @@ EOF
run_podman rmi -a --force
}
+@test "podman build --logfile test" {
+ tmpdir=$PODMAN_TMPDIR/build-test
+ mkdir -p $tmpdir
+ tmpbuilddir=$tmpdir/build
+ mkdir -p $tmpbuilddir
+ dockerfile=$tmpbuilddir/Dockerfile
+ cat >$dockerfile <<EOF
+FROM $IMAGE
+EOF
+
+ run_podman build -t build_test --format=docker --logfile=$tmpdir/logfile $tmpbuilddir
+ run cat $tmpdir/logfile
+ is "$output" ".*STEP 2: COMMIT" "COMMIT seen in log"
+
+ run_podman rmi -f build_test
+}
+
function teardown() {
# A timeout or other error in 'build' can leave behind stale images
# that podman can't even see and which will cascade into subsequent
diff --git a/test/system/260-sdnotify.bats b/test/system/260-sdnotify.bats
index c99ba4fa6..a5fa0f4e6 100644
--- a/test/system/260-sdnotify.bats
+++ b/test/system/260-sdnotify.bats
@@ -100,8 +100,17 @@ function _assert_mainpid_is_conmon() {
run_podman logs sdnotify_conmon_c
is "$output" "READY" "\$NOTIFY_SOCKET in container"
+ # The 'echo's help us debug failed runs
run cat $_SOCAT_LOG
- is "${lines[-1]}" "READY=1" "final output from sdnotify"
+ echo "socat log:"
+ echo "$output"
+
+ # ARGH! 'READY=1' should always be the last output line. But sometimes,
+ # for reasons unknown, we get an extra MAINPID=xxx after READY=1 (#8718).
+ # Who knows if this is a systemd bug, or conmon, or what. I don't
+ # even know where to begin asking. So, to eliminate the test flakes,
+ # we look for READY=1 _anywhere_ in the output, not just the last line.
+ is "$output" ".*READY=1.*" "sdnotify sent READY=1"
_assert_mainpid_is_conmon "${lines[0]}"
diff --git a/test/system/600-completion.bats b/test/system/600-completion.bats
index 1e43cdc41..8cac2c9aa 100644
--- a/test/system/600-completion.bats
+++ b/test/system/600-completion.bats
@@ -8,6 +8,17 @@
load helpers
+# Returns true if we are able to podman-pause
+function _can_pause() {
+ # Even though we're just trying completion, not an actual unpause,
+ # podman barfs with:
+ # Error: unpause is not supported for cgroupv1 rootless containers
+ if is_rootless && is_cgroupsv1; then
+ return 1
+ fi
+ return 0
+}
+
function check_shell_completion() {
local count=0
@@ -61,8 +72,9 @@ function check_shell_completion() {
if ! is_remote; then
run_completion "$@" $cmd "--"
# If this fails there is most likely a problem with the cobra library
- is "${lines[0]}" "--.*" "Found flag in suggestions"
- [ ${#lines[@]} -gt 2 ] || die "No flag suggestions"
+ is "${lines[0]}" "--.*" \
+ "$* $cmd: flag(s) listed in suggestions"
+ [ ${#lines[@]} -gt 2 ] || die "$* $cmd: No flag suggestions"
_check_completion_end NoFileComp
fi
# continue the outer for args loop
@@ -70,8 +82,14 @@ function check_shell_completion() {
;;
*CONTAINER*)
+ # podman unpause fails early on rootless cgroupsv1
+ if [[ $cmd = "unpause" ]] && ! _can_pause; then
+ continue 2
+ fi
+
run_completion "$@" $cmd "${extra_args[@]}" ""
- is "$output" ".*-$random_container_name${nl}" "Found expected container in suggestions"
+ is "$output" ".*-$random_container_name${nl}" \
+ "$* $cmd: actual container listed in suggestions"
match=true
# resume
@@ -79,7 +97,8 @@ function check_shell_completion() {
*POD*)
run_completion "$@" $cmd "${extra_args[@]}" ""
- is "$output" ".*-$random_pod_name${nl}" "Found expected pod in suggestions"
+ is "$output" ".*-$random_pod_name${nl}" \
+ "$* $cmd: actual pod listed in suggestions"
_check_completion_end NoFileComp
match=true
@@ -88,16 +107,20 @@ function check_shell_completion() {
*IMAGE*)
run_completion "$@" $cmd "${extra_args[@]}" ""
- is "$output" ".*localhost/$random_image_name:$random_image_tag${nl}" "Found expected image in suggestions"
+ is "$output" ".*localhost/$random_image_name:$random_image_tag${nl}" \
+ "$* $cmd: actual image listed in suggestions"
# check that we complete the image with and without tag after at least one char is typed
run_completion "$@" $cmd "${extra_args[@]}" "${random_image_name:0:1}"
- is "$output" ".*$random_image_name:$random_image_tag${nl}" "Found expected image with tag in suggestions"
- is "$output" ".*$random_image_name${nl}" "Found expected image without tag in suggestions"
+ is "$output" ".*$random_image_name:$random_image_tag${nl}" \
+ "$* $cmd: image name:tag included in suggestions"
+ is "$output" ".*$random_image_name${nl}" \
+ "$* $cmd: image name(w/o tag) included in suggestions"
# check that we complete the image id after at least two chars are typed
run_completion "$@" $cmd "${extra_args[@]}" "${random_image_id:0:2}"
- is "$output" ".*$random_image_id${nl}" "Found expected image id in suggestions"
+ is "$output" ".*$random_image_id${nl}" \
+ "$* $cmd: image id included in suggestions when two leading characters present in command line"
match=true
# resume
@@ -105,7 +128,8 @@ function check_shell_completion() {
*NETWORK*)
run_completion "$@" $cmd "${extra_args[@]}" ""
- is "$output" ".*$random_network_name${nl}" "Found network in suggestions"
+ is "$output" ".*$random_network_name${nl}" \
+ "$* $cmd: actual network listed in suggestions"
_check_completion_end NoFileComp
match=true
@@ -114,7 +138,8 @@ function check_shell_completion() {
*VOLUME*)
run_completion "$@" $cmd "${extra_args[@]}" ""
- is "$output" ".*$random_volume_name${nl}" "Found volume in suggestions"
+ is "$output" ".*$random_volume_name${nl}" \
+ "$* $cmd: actual volume listed in suggestions"
_check_completion_end NoFileComp
match=true
@@ -126,14 +151,14 @@ function check_shell_completion() {
### FIXME how can we get the configured registries?
_check_completion_end NoFileComp
### FIXME this fails if no registries are configured
- [[ ${#lines[@]} -gt 2 ]] || die "No registries found in suggestions"
+ [[ ${#lines[@]} -gt 2 ]] || die "$* $cmd: No REGISTRIES found in suggestions"
match=true
# resume
;;&
*PATH* | *CONTEXT* | *KUBEFILE* | *COMMAND* | *ARG...* | *URI*)
- # default shell completion should be done for everthing which accepts a path
+ # default shell completion should be done for everything which accepts a path
run_completion "$@" $cmd "${extra_args[@]}" ""
# cp is a special case it returns ShellCompDirectiveNoSpace
@@ -141,7 +166,7 @@ function check_shell_completion() {
_check_completion_end NoSpace
else
_check_completion_end Default
- [[ ${#lines[@]} -eq 2 ]] || die "Suggestions are in the output"
+ [[ ${#lines[@]} -eq 2 ]] || die "$* $cmd: Suggestions are in the output"
fi
;;
@@ -172,7 +197,7 @@ function check_shell_completion() {
run_completion "$@" $cmd "${extra_args[@]}" ""
_check_completion_end NoFileComp
if [ ${#lines[@]} -gt 2 ]; then
- # checking for line count is not enough since we may inlcude additional debug output
+ # checking for line count is not enough since we may include additional debug output
# lines starting with [Debug] are allowed
i=0
length=$(( ${#lines[@]} - 2 ))
@@ -212,7 +237,9 @@ function _check_completion_end() {
run_podman create --name created-$random_container_name $IMAGE
run_podman run --name running-$random_container_name -d $IMAGE top
run_podman run --name pause-$random_container_name -d $IMAGE top
- run_podman pause pause-$random_container_name
+ if _can_pause; then
+ run_podman pause pause-$random_container_name
+ fi
run_podman run --name exited-$random_container_name -d $IMAGE echo exited
# create pods for each state
diff --git a/test/system/helpers.bash b/test/system/helpers.bash
index 6a7c6cc42..0572c6866 100644
--- a/test/system/helpers.bash
+++ b/test/system/helpers.bash
@@ -14,7 +14,7 @@ PODMAN_TEST_IMAGE_FQN="$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODM
IMAGE=$PODMAN_TEST_IMAGE_FQN
# Default timeout for a podman command.
-PODMAN_TIMEOUT=${PODMAN_TIMEOUT:-60}
+PODMAN_TIMEOUT=${PODMAN_TIMEOUT:-120}
# Prompt to display when logging podman commands; distinguish root/rootless
_LOG_PROMPT='$'
@@ -168,8 +168,11 @@ function run_podman() {
if [ "$status" -eq 124 ]; then
if expr "$output" : ".*timeout: sending" >/dev/null; then
- echo "*** TIMED OUT ***"
- false
+ # It's possible for a subtest to _want_ a timeout
+ if [[ "$expected_rc" != "124" ]]; then
+ echo "*** TIMED OUT ***"
+ false
+ fi
fi
fi
@@ -259,6 +262,31 @@ function is_cgroupsv2() {
test "$cgroup_type" = "cgroup2fs"
}
+# rhbz#1895105: rootless journald is unavailable except to users in
+# certain magic groups; which our testuser account does not belong to
+# (intentional: that is the RHEL default, so that's the setup we test).
+function journald_unavailable() {
+ if ! is_rootless; then
+ # root must always have access to journal
+ return 1
+ fi
+
+ run journalctl -n 1
+ if [[ $status -eq 0 ]]; then
+ return 1
+ fi
+
+ if [[ $output =~ permission ]]; then
+ return 0
+ fi
+
+ # This should never happen; if it does, it's likely that a subsequent
+ # test will fail. This output may help track that down.
+ echo "WEIRD: 'journalctl -n 1' failed with a non-permission error:"
+ echo "$output"
+ return 1
+}
+
###########################
# _add_label_if_missing # make sure skip messages include rootless/remote
###########################
@@ -315,6 +343,15 @@ function skip_if_cgroupsv1() {
fi
}
+##################################
+# skip_if_journald_unavailable # rhbz#1895105: rootless journald permissions
+##################################
+function skip_if_journald_unavailable {
+ if journald_unavailable; then
+ skip "Cannot use rootless journald on this system"
+ fi
+}
+
#########
# die # Abort with helpful message
#########