mirror of
https://github.com/containers/podman.git
synced 2025-09-10 04:12:20 +08:00

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>
147 lines
4.6 KiB
Bash
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
|