#!/usr/bin/env bats load helpers function teardown() { cleanup_test } function setup() { copy_images } @test "run a container based on local image" { run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run $BB ls" echo "$output" [ "$status" -eq 0 ] } @test "run a container based on local image with short options" { run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run -dt $BB ls" echo "$output" [ "$status" -eq 0 ] } @test "run a container based on a remote image" { run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run ${BB_GLIBC} ls" echo "$output" [ "$status" -eq 0 ] } @test "run selinux test" { if [ ! -e /usr/sbin/selinuxenabled ] || [ ! /usr/sbin/selinuxenabled ]; then skip "SELinux not enabled" fi run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run ${ALPINE} cat /proc/self/attr/current" echo "$output" firstLabel=$output run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run ${ALPINE} cat /proc/self/attr/current" echo "$output" [ "$output" != "${firstLabel}" ] } @test "run selinux grep test" { skip "Until console issues worked out" run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run -t -i --security-opt label=level:s0:c1,c2 ${ALPINE} cat /proc/self/attr/current | grep s0:c1,c2" echo "$output" [ "$status" -eq 0 ] } @test "run capabilities test" { run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --cap-add all ${ALPINE} cat /proc/self/status" echo "$output" [ "$status" -eq 0 ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --cap-add sys_admin ${ALPINE} cat /proc/self/status" echo "$output" [ "$status" -eq 0 ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --cap-drop all ${ALPINE} cat /proc/self/status" echo "$output" [ "$status" -eq 0 ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --cap-drop setuid ${ALPINE} cat /proc/self/status" echo "$output" [ "$status" -eq 0 ] } @test "run environment test" { run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --env FOO=BAR ${ALPINE} printenv FOO | tr -d '\r'" echo "$output" [ "$status" -eq 0 ] [ $output = "BAR" ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --env PATH="/bin" ${ALPINE} printenv PATH | tr -d '\r'" echo "$output" [ "$status" -eq 0 ] [ $output = "/bin" ] run bash -c "export FOO=BAR; ${PODMAN_BINARY} ${PODMAN_OPTIONS} run --env FOO ${ALPINE} printenv FOO | tr -d '\r'" echo "$output" [ "$status" -eq 0 ] [ "$output" = "BAR" ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --env FOO ${ALPINE} printenv" echo "$output" [ "$status" -ne 0 ] # We don't currently set the hostname in containers, since we are not setting up # networking. As soon as podman run gets network support we need to uncomment this # test. # run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run ${ALPINE} sh -c printenv | grep HOSTNAME" # echo "$output" # [ "$status" -eq 0 ] } IMAGE="docker.io/library/fedora:latest" @test "run limits test" { run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --ulimit rtprio=99 --cap-add=sys_nice ${IMAGE} cat /proc/self/sched" echo $output [ "$status" -eq 0 ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --ulimit nofile=2048:2048 ${IMAGE} ulimit -n | tr -d '\r'" echo $output [ "$status" -eq 0 ] [ "$output" = 2048 ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --oom-kill-disable=true ${IMAGE} echo memory-hog" echo $output [ "$status" -eq 0 ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run --oom-score-adj=100 ${IMAGE} cat /proc/self/oom_score_adj | tr -d '\r'" echo $output [ "$status" -eq 0 ] [ "$output" = 100 ] } @test "podman run with volume flag" { run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run -v ${MOUNT_PATH}:/run/test ${BB} cat /proc/self/mountinfo | grep '${MOUNT_PATH} /run/test rw,relatime'" echo $output [ "$status" -eq 0 ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run -v ${MOUNT_PATH}:/run/test:ro ${BB} cat /proc/self/mountinfo | grep '${MOUNT_PATH} /run/test ro,relatime'" echo $output [ "$status" -eq 0 ] run bash -c "${PODMAN_BINARY} ${PODMAN_OPTIONS} run -v ${MOUNT_PATH}:/run/test:shared ${BB} cat /proc/self/mountinfo | grep '${MOUNT_PATH} /run/test rw,relatime shared:'" echo $output [ "$status" -eq 0 ] }