Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BATS: add ping test, ps filters, multi-option #8535

Merged
merged 1 commit into from
Dec 1, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions test/system/010-images.bats
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ Labels.created_at | 20[0-9-]\\\+T[0-9:]\\\+Z
@test "podman images - history output" {
# podman history is persistent: it permanently alters our base image.
# Create a dummy image here so we leave our setup as we found it.
run_podman run --name my-container $IMAGE true
# Multiple --name options confirm command-line override (last one wins)
run_podman run --name ignore-me --name my-container $IMAGE true
run_podman commit my-container my-test-image

run_podman images my-test-image --format '{{ .History }}'
Expand Down Expand Up @@ -87,7 +88,8 @@ Labels.created_at | 20[0-9-]\\\+T[0-9:]\\\+Z
}

@test "podman images - filter" {
run_podman inspect --format '{{.ID}}' $IMAGE
# Multiple --format options confirm command-line override (last one wins)
run_podman inspect --format '{{.XYZ}}' --format '{{.ID}}' $IMAGE
iid=$output

run_podman images --noheading --filter=after=$iid
Expand Down
19 changes: 15 additions & 4 deletions test/system/030-run.bats
Original file line number Diff line number Diff line change
Expand Up @@ -449,7 +449,9 @@ json-file | f
msg=$(random_string 20)
pidfile="${PODMAN_TMPDIR}/$(random_string 20)"

run_podman run --name myctr --log-driver journald --conmon-pidfile $pidfile $IMAGE echo $msg
# Multiple --log-driver options to confirm that last one wins
run_podman run --name myctr --log-driver=none --log-driver journald \
--conmon-pidfile $pidfile $IMAGE echo $msg

journalctl --output cat _PID=$(cat $pidfile)
is "$output" "$msg" "check that journalctl output equals the container output"
Expand All @@ -464,7 +466,9 @@ json-file | f
run_podman run --rm $IMAGE date -r $testfile
is "$output" "Sun Sep 13 12:26:40 UTC 2020" "podman run with no TZ"

run_podman run --rm --tz=MST7MDT $IMAGE date -r $testfile
# Multiple --tz options; confirm that the last one wins
run_podman run --rm --tz=US/Eastern --tz=Iceland --tz=MST7MDT \
$IMAGE date -r $testfile
is "$output" "Sun Sep 13 06:26:40 MDT 2020" "podman run with --tz=MST7MDT"

# --tz=local pays attention to /etc/localtime, not $TZ. We set TZ anyway,
Expand Down Expand Up @@ -533,8 +537,15 @@ json-file | f
}

@test "podman run with --net=host and --port prints warning" {
run_podman run -d --rm -p 8080 --net=host $IMAGE ls > /dev/null
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quick followup on this: it turns out, >/dev/null is not a NOP, it's worse: it causes all output from run_podman to vanish, which is anti-helpful when this test flakes, as it did twice in #8536!

remote f33

remote ubuntu-20

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The intent is to remove all non-stderr output. We only want to capture the output of STDERR for this test. I believe you told me this was the best way to accomplish that?

Regarding the flake, I'll bet is the --rm conflicting with the test's own cleanup logic.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, that makes sense (the rm conflict).

Re: BATS and stdout/stderr, unfortunately, there's no way to split them within a BATS run context (including run_podman). It's a BATS design tradeoff that works really well for the 95% case. The way I rewrote the test in this PR, I check for both the warning and some stdout; but do not (and cannot) check that the warning truly goes to stderr.

is "$output" ".*Port mappings have been discarded as one of the Host, Container, Pod, and None network modes are in use"
rand=$(random_string 10)

# Please keep the duplicate "--net" options; this tests against #8507,
# a regression in which subsequent --net options did not override earlier.
run_podman run --rm -p 8080 --net=none --net=host $IMAGE echo $rand
is "${lines[0]}" \
"Port mappings have been discarded as one of the Host, Container, Pod, and None network modes are in use" \
"Warning is emitted before container output"
is "${lines[1]}" "$rand" "Container runs successfully despite warning"
}

# vim: filetype=sh
47 changes: 47 additions & 0 deletions test/system/040-ps.bats
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,51 @@ load helpers
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
}

# vim: filetype=sh
17 changes: 12 additions & 5 deletions test/system/070-build.bats
Original file line number Diff line number Diff line change
Expand Up @@ -135,10 +135,13 @@ echo "\$1"
printenv | grep MYENV | sort | sed -e 's/^MYENV.=//'
EOF

# For overriding with --env-file
cat >$PODMAN_TMPDIR/env-file <<EOF
# For overriding with --env-file; using multiple files confirms that
# the --env-file option is cumulative, not last-one-wins.
cat >$PODMAN_TMPDIR/env-file1 <<EOF
MYENV3=$s_env3
http_proxy=http-proxy-in-env-file
EOF
cat >$PODMAN_TMPDIR/env-file2 <<EOF
https_proxy=https-proxy-in-env-file
EOF

Expand Down Expand Up @@ -185,7 +188,8 @@ EOF
export MYENV2="$s_env2"
export MYENV3="env-file-should-override-env-host!"
run_podman run --rm \
--env-file=$PODMAN_TMPDIR/env-file \
--env-file=$PODMAN_TMPDIR/env-file1 \
--env-file=$PODMAN_TMPDIR/env-file2 \
${ENVHOST} \
-e MYENV4="$s_env4" \
build_test
Expand All @@ -205,7 +209,9 @@ EOF

# Proxies - environment should override container, but not env-file
http_proxy=http-proxy-from-env ftp_proxy=ftp-proxy-from-env \
run_podman run --rm --env-file=$PODMAN_TMPDIR/env-file \
run_podman run --rm \
--env-file=$PODMAN_TMPDIR/env-file1 \
--env-file=$PODMAN_TMPDIR/env-file2 \
build_test \
printenv http_proxy https_proxy ftp_proxy
is "${lines[0]}" "http-proxy-in-env-file" "env-file overrides env"
Expand All @@ -222,7 +228,8 @@ EOF
is "$output" "$workdir" "pwd command in container"

# Determine buildah version, so we can confirm it gets into Labels
run_podman info --format '{{ .Host.BuildahVersion }}'
# Multiple --format options confirm command-line override (last one wins)
run_podman info --format '{{.Ignore}}' --format '{{ .Host.BuildahVersion }}'
is "$output" "[1-9][0-9.-]\+" ".Host.BuildahVersion is reasonable"
buildah_version=$output

Expand Down
3 changes: 2 additions & 1 deletion test/system/075-exec.bats
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ load helpers

# #6829 : add username to /etc/passwd inside container if --userns=keep-id
@test "podman exec - with keep-id" {
run_podman run -d --userns=keep-id $IMAGE sh -c \
# Multiple --userns options confirm command-line override (last one wins)
run_podman run -d --userns=private --userns=keep-id $IMAGE sh -c \
"echo READY;while [ ! -f /tmp/stop ]; do sleep 1; done"
cid="$output"
wait_for_ready $cid
Expand Down
4 changes: 4 additions & 0 deletions test/system/200-pod.bats
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,10 @@ EOF
is "$output" "nc: bind: Address in use" \
"two containers cannot bind to same port"

# make sure we can ping; failure here might mean that capabilities are wrong
run_podman run --rm --pod mypod $IMAGE ping -c1 127.0.0.1
run_podman run --rm --pod mypod $IMAGE ping -c1 $hostname

# While the container is still running, run 'podman ps' (no --format)
# and confirm that the output includes the published port
run_podman ps --filter id=$cid
Expand Down