summaryrefslogtreecommitdiff
path: root/test/system
diff options
context:
space:
mode:
Diffstat (limited to 'test/system')
-rw-r--r--test/system/010-images.bats12
-rw-r--r--test/system/030-run.bats14
-rw-r--r--test/system/035-logs.bats10
-rw-r--r--test/system/060-mount.bats104
-rw-r--r--test/system/065-cp.bats2
-rw-r--r--test/system/070-build.bats63
-rw-r--r--test/system/160-volumes.bats5
-rw-r--r--test/system/200-pod.bats24
8 files changed, 226 insertions, 8 deletions
diff --git a/test/system/010-images.bats b/test/system/010-images.bats
index 900a24368..98bb0cc57 100644
--- a/test/system/010-images.bats
+++ b/test/system/010-images.bats
@@ -3,10 +3,18 @@
load helpers
@test "podman images - basic output" {
- run_podman images -a
+ headings="REPOSITORY *TAG *IMAGE ID *CREATED *SIZE"
- is "${lines[0]}" "REPOSITORY *TAG *IMAGE ID *CREATED *SIZE" "header line"
+ run_podman images -a
+ is "${lines[0]}" "$headings" "header line"
is "${lines[1]}" "$PODMAN_TEST_IMAGE_REGISTRY/$PODMAN_TEST_IMAGE_USER/$PODMAN_TEST_IMAGE_NAME *$PODMAN_TEST_IMAGE_TAG *[0-9a-f]\+" "podman images output"
+
+ # 'podman images' should emit headings even if there are no images
+ # (but --root only works locally)
+ if ! is_remote; then
+ run_podman --root ${PODMAN_TMPDIR}/nothing-here-move-along images
+ is "$output" "$headings" "'podman images' emits headings even w/o images"
+ fi
}
@test "podman images - custom formats" {
diff --git a/test/system/030-run.bats b/test/system/030-run.bats
index b64e80f05..71831da10 100644
--- a/test/system/030-run.bats
+++ b/test/system/030-run.bats
@@ -14,8 +14,8 @@ load helpers
# ...but check the configured runtime engine, and switch to crun as needed
run_podman info --format '{{ .Host.OCIRuntime.Path }}'
if expr "$output" : ".*/crun"; then
- err_no_such_cmd="Error: executable file.* not found in \$PATH: No such file or directory: OCI runtime command not found error"
- err_no_exec_dir="Error: open executable: Operation not permitted: OCI runtime permission denied error"
+ err_no_such_cmd="Error: executable file.* not found in \$PATH: No such file or directory: OCI not found"
+ err_no_exec_dir="Error: open executable: Operation not permitted: OCI permission denied"
fi
tests="
@@ -436,6 +436,16 @@ json-file | f
@test "podman run --log-driver journald" {
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
+
msg=$(random_string 20)
pidfile="${PODMAN_TMPDIR}/$(random_string 20)"
diff --git a/test/system/035-logs.bats b/test/system/035-logs.bats
index 130bc5243..a3d6a5800 100644
--- a/test/system/035-logs.bats
+++ b/test/system/035-logs.bats
@@ -51,6 +51,16 @@ ${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
+
msg=$(random_string 20)
run_podman run --name myctr --log-driver journald $IMAGE echo $msg
diff --git a/test/system/060-mount.bats b/test/system/060-mount.bats
index ece87acf6..f04f34bf6 100644
--- a/test/system/060-mount.bats
+++ b/test/system/060-mount.bats
@@ -2,7 +2,6 @@
load helpers
-
@test "podman mount - basic test" {
# Only works with root (FIXME: does it work with rootless + vfs?)
skip_if_rootless "mount does not work rootless"
@@ -78,4 +77,107 @@ load helpers
is "$output" "" "podman image mount, no args, after umount"
}
+@test "podman run --mount image" {
+ skip_if_rootless "too hard to test rootless"
+
+ # Run a container with an image mount
+ run_podman run --rm --mount type=image,src=$IMAGE,dst=/image-mount $IMAGE diff /etc/os-release /image-mount/etc/os-release
+
+ # Make sure the mount is read only
+ run_podman 1 run --rm --mount type=image,src=$IMAGE,dst=/image-mount $IMAGE touch /image-mount/read-only
+ is "$output" "touch: /image-mount/read-only: Read-only file system"
+
+ # Make sure that rw,readwrite work
+ run_podman run --rm --mount type=image,src=$IMAGE,dst=/image-mount,rw=true $IMAGE touch /image-mount/readwrite
+ run_podman run --rm --mount type=image,src=$IMAGE,dst=/image-mount,readwrite=true $IMAGE touch /image-mount/readwrite
+
+ skip_if_remote "mounting remote is meaningless"
+
+ # The mount should be cleaned up during container removal as no other entity mounted the image
+ run_podman image umount $IMAGE
+ is "$output" "" "image mount should have been cleaned up during container removal"
+
+ # Now make sure that the image mount is not cleaned up during container removal when another entity mounted the image
+ run_podman image mount $IMAGE
+ run_podman run --rm --mount type=image,src=$IMAGE,dst=/image-mount $IMAGE diff /etc/os-release /image-mount/etc/os-release
+
+ run_podman image inspect --format '{{.ID}}' $IMAGE
+ iid="$output"
+
+ run_podman image umount $IMAGE
+ is "$output" "$iid" "podman image umount: image ID of what was umounted"
+
+ run_podman image umount $IMAGE
+ is "$output" "" "image mount should have been cleaned up via 'image umount'"
+
+ # Run a container in the background (source is the ID instead of name)
+ run_podman run -d --mount type=image,src=$iid,dst=/image-mount,readwrite=true $IMAGE sleep infinity
+ cid="$output"
+
+ # Unmount the image
+ run_podman image umount $IMAGE
+ is "$output" "$iid" "podman image umount: image ID of what was umounted"
+ run_podman image umount $IMAGE
+ is "$output" "" "image mount should have been cleaned up via 'image umount'"
+
+ # Make sure that the mount in the container is unaffected
+ run_podman exec $cid diff /etc/os-release /image-mount/etc/os-release
+ run_podman exec $cid find /image-mount/etc/
+
+ # Clean up
+ run_podman rm -f $cid
+}
+
+@test "podman run --mount image inspection" {
+ skip_if_rootless "too hard to test rootless"
+
+ # Run a container in the background
+ run_podman run -d --mount type=image,src=$IMAGE,dst=/image-mount,rw=true $IMAGE sleep infinity
+ cid="$output"
+
+ run_podman inspect --format "{{(index .Mounts 0).Type}}" $cid
+ is "$output" "image" "inspect data includes image mount type"
+
+ run_podman inspect --format "{{(index .Mounts 0).Source}}" $cid
+ is "$output" "$IMAGE" "inspect data includes image mount source"
+
+ run_podman inspect --format "{{(index .Mounts 0).Destination}}" $cid
+ is "$output" "/image-mount" "inspect data includes image mount source"
+
+ run_podman inspect --format "{{(index .Mounts 0).RW}}" $cid
+ is "$output" "true" "inspect data includes image mount source"
+
+ run_podman rm -f $cid
+}
+
+@test "podman mount external container - basic test" {
+ # Only works with root (FIXME: does it work with rootless + vfs?)
+ skip_if_rootless "mount does not work rootless"
+ skip_if_remote "mounting remote is meaningless"
+
+ # Create a container that podman does not know about
+ external_cid=$(buildah from $IMAGE)
+
+ run_podman mount $external_cid
+ mount_path=$output
+
+ # Test image will always have this file, and will always have the tag
+ test -d $mount_path
+ is $(< "$mount_path/home/podman/testimage-id") "$PODMAN_TEST_IMAGE_TAG" \
+ "Contents of well-known file in image"
+
+ # Make sure that 'podman mount' (no args) returns the expected path
+ run_podman mount --notruncate
+
+ reported_mountpoint=$(echo "$output" | awk '{print $2}')
+ is $reported_mountpoint $mount_path "mountpoint reported by 'podman mount'"
+
+ # umount, and make sure files are gone
+ run_podman umount $external_cid
+ if [ -d "$mount_path" ]; then
+ die "'podman umount' did not umount"
+ fi
+ buildah rm $external_cid
+}
+
# vim: filetype=sh
diff --git a/test/system/065-cp.bats b/test/system/065-cp.bats
index a350c2173..6bf897790 100644
--- a/test/system/065-cp.bats
+++ b/test/system/065-cp.bats
@@ -148,7 +148,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: failed to get stat of dest path .*stat.* no such file or directory" "cp will not create nonexistent destination directory"
+ is "$output" ".*stat.* 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"
diff --git a/test/system/070-build.bats b/test/system/070-build.bats
index 0741357ed..83bcd13eb 100644
--- a/test/system/070-build.bats
+++ b/test/system/070-build.bats
@@ -221,6 +221,11 @@ EOF
run_podman run --rm build_test pwd
is "$output" "$workdir" "pwd command in container"
+ # Determine buildah version, so we can confirm it gets into Labels
+ run_podman info --format '{{ .Host.BuildahVersion }}'
+ is "$output" "[1-9][0-9.-]\+" ".Host.BuildahVersion is reasonable"
+ buildah_version=$output
+
# Confirm that 'podman inspect' shows the expected values
# FIXME: can we rely on .Env[0] being PATH, and the rest being in order??
run_podman image inspect build_test
@@ -239,6 +244,7 @@ Cmd[0] | /bin/mydefaultcmd
Cmd[1] | $s_echo
WorkingDir | $workdir
Labels.$label_name | $label_value
+Labels.\"io.buildah.version\" | $buildah_version
"
parse_table "$tests" | while read field expect; do
@@ -312,6 +318,63 @@ EOF
run_podman rmi -f build_test
}
+# #8092 - podman build should not gobble stdin (Fixes: #8066)
+@test "podman build - does not gobble stdin that does not belong to it" {
+ random1=random1-$(random_string 12)
+ random2=random2-$(random_string 15)
+ random3=random3-$(random_string 12)
+
+ tmpdir=$PODMAN_TMPDIR/build-test
+ mkdir -p $tmpdir
+ cat >$tmpdir/Containerfile <<EOF
+FROM $IMAGE
+RUN echo x${random2}y
+EOF
+
+ # This is a little rococo, bear with me please. #8092 fixed a bug
+ # in which 'podman build' would slurp up any input in the pipeline.
+ # Not a problem in a contrived example such as the one below, but
+ # definitely a problem when running commands in a pipeline to bash:
+ # 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
+ # chance that podman itself could pass stdin through.
+ results=$(echo $random3 | (
+ echo $random1
+ run_podman build -t build_test $tmpdir
+ sed -e 's/^/a/' -e 's/$/z/'
+ ))
+
+ # First simple test: confirm that we see the piped-in string, as
+ # massaged by sed. This fails in 287edd4e2, the commit before #8092.
+ # We do this before the thorough test (below) because, should it
+ # fail, the diagnostic is much clearer and easier to understand.
+ is "$results" ".*a${random3}z" "stdin remains after podman-build"
+
+ # More thorough test: verify all the required strings in order.
+ # This is unlikely to fail, but it costs us nothing and could
+ # catch a regression somewhere else.
+ # FIXME: podman-remote output differs from local: #8342 (spurious ^M)
+ # FIXME: podman-remote output differs from local: #8343 (extra SHA output)
+ remote_extra=""
+ if is_remote; then remote_extra=".*";fi
+ expect="${random1}
+.*
+STEP 1: FROM $IMAGE
+STEP 2: RUN echo x${random2}y
+x${random2}y${remote_extra}
+STEP 3: COMMIT build_test${remote_extra}
+--> [0-9a-f]\{11\}
+[0-9a-f]\{64\}
+a${random3}z"
+
+ is "$results" "$expect" "Full output from 'podman build' pipeline"
+
+ 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/160-volumes.bats b/test/system/160-volumes.bats
index 9f4bb76a2..0b7aab2fb 100644
--- a/test/system/160-volumes.bats
+++ b/test/system/160-volumes.bats
@@ -119,7 +119,7 @@ EOF
# noexec option. This should fail.
# ARGH. Unfortunately, runc (used for cgroups v1) produces a different error
local expect_rc=126
- local expect_msg='.* OCI runtime permission denied.*'
+ local expect_msg='.* OCI permission denied.*'
run_podman info --format '{{ .Host.OCIRuntime.Path }}'
if expr "$output" : ".*/runc"; then
expect_rc=1
@@ -162,7 +162,8 @@ EOF
myvol=myvol$(random_string)
rand=$(random_string)
- run_podman run --rm -v $myvol:/myvol:z $IMAGE \
+ # Duplicate "-v" confirms #8307, fix for double-lock on same volume
+ run_podman run --rm -v $myvol:/myvol:z -v $myvol:/myvol2:z $IMAGE \
sh -c "echo $rand >/myvol/myfile"
run_podman volume ls -q
is "$output" "$myvol" "autocreated named container persists"
diff --git a/test/system/200-pod.bats b/test/system/200-pod.bats
index 1d17c8cad..b0f645c53 100644
--- a/test/system/200-pod.bats
+++ b/test/system/200-pod.bats
@@ -116,6 +116,30 @@ function teardown() {
run_podman 1 pod exists $podname
}
+@test "podman pod - communicating via /dev/shm " {
+ if is_remote && is_rootless; then
+ skip "FIXME: pending #7139"
+ fi
+
+ podname=pod$(random_string)
+ run_podman 1 pod exists $podname
+ run_podman pod create --infra=true --name=$podname
+ podid="$output"
+ run_podman pod exists $podname
+ run_podman pod exists $podid
+
+ run_podman run --rm --pod $podname $IMAGE touch /dev/shm/test1
+ run_podman run --rm --pod $podname $IMAGE ls /dev/shm/test1
+ is "$output" "/dev/shm/test1"
+
+ # ...then rm the pod, then rmi the pause image so we don't leave strays.
+ run_podman pod rm $podname
+
+ # Pod no longer exists
+ run_podman 1 pod exists $podid
+ run_podman 1 pod exists $podname
+}
+
# Random byte
function octet() {
echo $(( $RANDOM & 255 ))