Skip to content

Commit

Permalink
Some BATS cleanup: run and systemd tests
Browse files Browse the repository at this point in the history
run test: run positive test before negative; and actually
implement real negative tests. Also, add confirmation tests for
cidfile/pidfile, not just 'exit status is good'.

systemd test: enable rootless, and again add actual content
testing.

Signed-off-by: Ed Santiago <[email protected]>
  • Loading branch information
edsantiago committed May 11, 2020
1 parent 18b273b commit a82de0e
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 20 deletions.
36 changes: 25 additions & 11 deletions test/system/030-run.bats
Original file line number Diff line number Diff line change
Expand Up @@ -161,17 +161,31 @@ echo $rand | 0 | $rand
# 'run --conmon-pidfile --cid-file' makes sure we don't regress on these flags.
# Both are critical for systemd units.
@test "podman run --conmon-pidfile --cidfile" {
pid=$(mktemp)
cid=$(mktemp)

# CID file exists -> expected to fail.
run_podman 125 run --rm --conmon-pidfile=$pid --cidfile=$cid $IMAGE ls

rm $pid $cid
run_podman run --name keepme --conmon-pidfile=$pid --cidfile=$cid --detach $IMAGE sleep infinity
stat $pid $cid
run_podman rm -f keepme
rm $pid $cid
pidfile=${PODMAN_TMPDIR}/pidfile
cidfile=${PODMAN_TMPDIR}/cidfile

cname=$(random_string)
run_podman run --name $cname \
--conmon-pidfile=$pidfile \
--cidfile=$cidfile \
--detach \
$IMAGE sleep infinity
cid="$output"

is "$(< $cidfile)" "$cid" "contents of cidfile == container ID"

conmon_pid=$(< $pidfile)
is "$(readlink /proc/$conmon_pid/exe)" ".*/conmon" \
"conmon pidfile (= PID $conmon_pid) points to conmon process"

# All OK. Kill container.
run_podman rm -f $cid

# Podman must not overwrite existing cid file.
# (overwriting conmon-pidfile is OK, so don't test that)
run_podman 125 run --cidfile=$cidfile $IMAGE true
is "$output" "Error: container id file exists. .* delete $cidfile" \
"podman will not overwrite existing cidfile"
}

# vim: filetype=sh
39 changes: 30 additions & 9 deletions test/system/250-systemd.bats
Original file line number Diff line number Diff line change
Expand Up @@ -6,44 +6,65 @@
load helpers

SERVICE_NAME="podman_test_$(random_string)"

SYSTEMCTL="systemctl"
UNIT_DIR="/usr/lib/systemd/system"
if is_rootless; then
UNIT_DIR="$HOME/.config/systemd/user"
mkdir -p $UNIT_DIR

SYSTEMCTL="$SYSTEMCTL --user"
fi
UNIT_FILE="$UNIT_DIR/$SERVICE_NAME.service"

function setup() {
skip_if_remote
skip_if_rootless "systemd tests are root-only for now"

basic_setup
}

function teardown() {
run '?' $SYSTEMCTL stop "$SERVICE_NAME"
rm -f "$UNIT_FILE"
systemctl daemon-reload
$SYSTEMCTL daemon-reload
basic_teardown
}

# This test can fail in dev. environment because of SELinux.
# quick fix: chcon -t container_runtime_exec_t ./bin/podman
@test "podman generate - systemd - basic" {
run_podman create --name keepme --detach busybox:latest top
cname=$(random_string)
run_podman create --name $cname --detach $IMAGE top

run_podman generate systemd --new keepme > "$UNIT_FILE"
run_podman rm keepme
run_podman generate systemd --new $cname
echo "$output" > "$UNIT_FILE"
run_podman rm $cname

systemctl daemon-reload
$SYSTEMCTL daemon-reload

run systemctl start "$SERVICE_NAME"
run $SYSTEMCTL start "$SERVICE_NAME"
if [ $status -ne 0 ]; then
die "Error starting systemd unit $SERVICE_NAME, output: $output"
fi

run systemctl status "$SERVICE_NAME"
run $SYSTEMCTL status "$SERVICE_NAME"
if [ $status -ne 0 ]; then
die "Non-zero status of systemd unit $SERVICE_NAME, output: $output"
fi

run systemctl stop "$SERVICE_NAME"
# Give container time to start; make sure output looks top-like
sleep 2
run_podman logs $cname
is "$output" ".*Load average:.*" "running container 'top'-like output"

# All good. Stop service, clean up.
run $SYSTEMCTL stop "$SERVICE_NAME"
if [ $status -ne 0 ]; then
die "Error stopping systemd unit $SERVICE_NAME, output: $output"
fi

rm -f "$UNIT_FILE"
$SYSTEMCTL daemon-reload
}

# vim: filetype=sh

0 comments on commit a82de0e

Please sign in to comment.