From a17fb01d400f8f3504099fbd65e284124432f274 Mon Sep 17 00:00:00 2001
From: Ed Santiago <santiago@redhat.com>
Date: Thu, 19 Nov 2020 09:57:06 -0700
Subject: BATS: add ping test

 - run test : tweaks to recently-added network-conflict test:
   * remove "-d" in run
   * confirm exact warning text, and also that container
     runs successfully
   * test multiple --net options (regression #8057)

 - images, run, build, exec tests: add multiple-flag
   testing for various flags, confirming as appropriate
   whether options are overridden or accumulated.

 - ps test : add --filter and --sort tests

 - pod test: run 'ping' inside container (confirms that
   container gets PING capability)

Signed-off-by: Ed Santiago <santiago@redhat.com>
---
 test/system/010-images.bats |  6 ++++--
 test/system/030-run.bats    | 19 ++++++++++++++----
 test/system/040-ps.bats     | 47 +++++++++++++++++++++++++++++++++++++++++++++
 test/system/070-build.bats  | 17 +++++++++++-----
 test/system/075-exec.bats   |  3 ++-
 test/system/200-pod.bats    |  4 ++++
 6 files changed, 84 insertions(+), 12 deletions(-)

(limited to 'test')

diff --git a/test/system/010-images.bats b/test/system/010-images.bats
index 98bb0cc57..ee6da30ec 100644
--- a/test/system/010-images.bats
+++ b/test/system/010-images.bats
@@ -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 }}'
@@ -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
diff --git a/test/system/030-run.bats b/test/system/030-run.bats
index 71831da10..37695f205 100644
--- a/test/system/030-run.bats
+++ b/test/system/030-run.bats
@@ -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"
@@ -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,
@@ -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
-    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
diff --git a/test/system/040-ps.bats b/test/system/040-ps.bats
index dec2df4d5..1ed2779b2 100644
--- a/test/system/040-ps.bats
+++ b/test/system/040-ps.bats
@@ -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
diff --git a/test/system/070-build.bats b/test/system/070-build.bats
index 83bcd13eb..59da503a6 100644
--- a/test/system/070-build.bats
+++ b/test/system/070-build.bats
@@ -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
 
@@ -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
@@ -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"
@@ -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
 
diff --git a/test/system/075-exec.bats b/test/system/075-exec.bats
index edd7dedc4..c028e16c9 100644
--- a/test/system/075-exec.bats
+++ b/test/system/075-exec.bats
@@ -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
diff --git a/test/system/200-pod.bats b/test/system/200-pod.bats
index b0f645c53..51835e4a3 100644
--- a/test/system/200-pod.bats
+++ b/test/system/200-pod.bats
@@ -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
-- 
cgit v1.2.3-54-g00ecf