Files
podman/test/system/040-ps.bats
Ed Santiago 97ee411465 system tests: add assert(), and start using it
Problem: the system test 'is()' checker was poorly thought out.
For example, there is no way to check for inequality or for
absence of a substring.

Solution, step 1: introduce new assert(), copied almost verbatim
from buildah, where it has been successful in addressing the
gaps in is().

The logical next step is to search the tests for 'die' and
for 'run', looking for negative assertions which we can
replace with assert(). There were a lot, and in the process
I found a number of ugly bugs in the tests themselves. I've
taken the liberty of fixing these.

Important note: at this time we have both assert() and is().
Replacing all instances of is() would be impossible to review.

Signed-off-by: Ed Santiago <santiago@redhat.com>
2022-04-20 16:14:42 -06:00

147 lines
4.6 KiB
Bash

#!/usr/bin/env bats
load helpers
@test "podman ps - basic tests" {
rand_name=$(random_string 30)
run_podman ps --noheading
is "$output" "" "baseline: empty results from ps --noheading"
run_podman run -d --name $rand_name $IMAGE sleep 5
cid=$output
is "$cid" "[0-9a-f]\{64\}$"
# Special case: formatted ps
run_podman ps --no-trunc \
--format '{{.ID}} {{.Image}} {{.Command}} {{.Names}}'
is "$output" "$cid $IMAGE sleep 5 $rand_name" "podman ps"
# Plain old regular ps
run_podman ps
is "${lines[1]}" \
"${cid:0:12} \+$IMAGE \+sleep [0-9]\+ .*second.* $cname"\
"output from podman ps"
# OK. Wait for sleep to finish...
run_podman wait $cid
# ...then make sure container shows up as stopped
run_podman ps -a
is "${lines[1]}" \
"${cid:0:12} \+$IMAGE *sleep .* Exited .* $rand_name" \
"podman ps -a"
run_podman rm $cid
}
@test "podman ps --filter" {
run_podman run -d --name runner $IMAGE top
cid_runner=$output
run_podman run -d --name stopped $IMAGE true
cid_stopped=$output
run_podman wait stopped
run_podman run -d --name failed $IMAGE false
cid_failed=$output
run_podman wait failed
run_podman create --name created $IMAGE echo hi
cid_created=$output
run_podman ps --filter name=runner --format '{{.ID}}'
is "$output" "${cid_runner:0:12}" "filter: name=runner"
# Stopped container should not appear (because we're not using -a)
run_podman ps --filter name=stopped --format '{{.ID}}'
is "$output" "" "filter: name=stopped (without -a)"
# Again, but with -a
run_podman ps -a --filter name=stopped --format '{{.ID}}'
is "$output" "${cid_stopped:0:12}" "filter: name=stopped (with -a)"
run_podman ps --filter status=stopped --format '{{.Names}}' --sort names
is "${lines[0]}" "failed" "status=stopped: 1 of 2"
is "${lines[1]}" "stopped" "status=stopped: 2 of 2"
run_podman ps --filter status=exited --filter exited=0 --format '{{.Names}}'
is "$output" "stopped" "exited=0"
run_podman ps --filter status=exited --filter exited=1 --format '{{.Names}}'
is "$output" "failed" "exited=1"
# Multiple statuses allowed; and test sort=created
run_podman ps -a --filter status=exited --filter status=running \
--format '{{.Names}}' --sort created
is "${lines[0]}" "runner" "status=stopped: 1 of 3"
is "${lines[1]}" "stopped" "status=stopped: 2 of 3"
is "${lines[2]}" "failed" "status=stopped: 3 of 3"
run_podman stop -t 1 runner
run_podman rm -a
}
@test "podman ps --external" {
# Setup: ensure that we have no hidden storage containers
run_podman ps --external
is "${#lines[@]}" "1" "setup check: no storage containers at start of test"
# Force a buildah timeout; this leaves a buildah container behind
local t0=$SECONDS
PODMAN_TIMEOUT=5 run_podman 124 build -t thiswillneverexist - <<EOF
FROM $IMAGE
RUN touch /intermediate.image.to.be.pruned
RUN sleep 30
EOF
local t1=$SECONDS
local delta_t=$((t1 - t0))
assert $delta_t -le 10 \
"podman build did not get killed within 10 seconds"
run_podman ps -a
is "${#lines[@]}" "1" "podman ps -a does not see buildah containers"
run_podman ps --external
is "${#lines[@]}" "3" "podman ps -a --external sees buildah containers"
is "${lines[1]}" \
"[0-9a-f]\{12\} \+$IMAGE *buildah .* seconds ago .* Storage .* ${PODMAN_TEST_IMAGE_NAME}-working-container" \
"podman ps --external"
# 'rm -a' should be a NOP
run_podman rm -a
run_podman ps --external
is "${#lines[@]}" "3" "podman ps -a --external sees buildah containers"
# Cannot prune intermediate image as it's being used by a buildah
# container.
run_podman image prune -f
is "$output" "" "No image is pruned"
# --external for removing buildah containers.
run_podman image prune -f --external
is "${#lines[@]}" "1" "Image used by build container is pruned"
# One buildah container has been removed.
run_podman ps --external
is "${#lines[@]}" "2" "podman ps -a --external sees buildah containers"
cid="${lines[1]:0:12}"
# We can't rm it without -f, but podman should issue a helpful message
run_podman 2 rm "$cid"
is "$output" "Error: container .* is mounted and cannot be removed without using force: container state improper" "podman rm <buildah container> without -f"
# With -f, we can remove it.
run_podman rm -t 0 -f "$cid"
run_podman ps --external
is "${#lines[@]}" "1" "storage container has been removed"
}
# vim: filetype=sh