c2e11d
From e68fbf03aa4e117e769b479d5a83a4bbc0628a33 Mon Sep 17 00:00:00 2001
c2e11d
From: Hironori Shiina <shiina.hironori@jp.fujitsu.com>
c2e11d
Date: Wed, 27 Oct 2021 09:26:58 -0400
c2e11d
Subject: [PATCH] Set flags to test 'logs -f' with journald driver
c2e11d
c2e11d
`logs -f` with `journald` is supported only when `journald` events
c2e11d
backend is used. To pass system tests using `logs -f` in an environment
c2e11d
where `events_logger` is not set to `journald` in `containers.conf`,
c2e11d
this fix sets `--events-backend` or `--log-driver` temporally.
c2e11d
c2e11d
Signed-off-by: Hironori Shiina <shiina.hironori@jp.fujitsu.com>
c2e11d
---
c2e11d
 test/system/035-logs.bats | 28 +++++++++++++++++++++++-----
c2e11d
 test/system/130-kill.bats | 15 ++++++++++++++-
c2e11d
 2 files changed, 37 insertions(+), 6 deletions(-)
c2e11d
c2e11d
diff --git a/test/system/035-logs.bats b/test/system/035-logs.bats
c2e11d
index 44b66676eeb..7fb3e62e459 100644
c2e11d
--- a/test/system/035-logs.bats
c2e11d
+++ b/test/system/035-logs.bats
c2e11d
@@ -30,6 +30,17 @@ load helpers
c2e11d
     run_podman rm $cid
c2e11d
 }
c2e11d
 
c2e11d
+function _additional_events_backend() {
c2e11d
+    local driver=$1
c2e11d
+    # Since PR#10431, 'logs -f' with journald driver is only supported with journald events backend.
c2e11d
+    if [[ $driver = "journald" ]]; then
c2e11d
+        run_podman info --format '{{.Host.EventLogger}}' >/dev/null
c2e11d
+        if [[ $output != "journald" ]]; then
c2e11d
+            echo "--events-backend journald"
c2e11d
+        fi
c2e11d
+    fi
c2e11d
+}
c2e11d
+
c2e11d
 function _log_test_multi() {
c2e11d
     local driver=$1
c2e11d
 
c2e11d
@@ -42,10 +53,12 @@ function _log_test_multi() {
c2e11d
         etc='.*'
c2e11d
     fi
c2e11d
 
c2e11d
+    local events_backend=$(_additional_events_backend $driver)
c2e11d
+
c2e11d
     # Simple helper to make the container starts, below, easier to read
c2e11d
     local -a cid
c2e11d
     doit() {
c2e11d
-        run_podman run --log-driver=$driver --rm -d --name "$1" $IMAGE sh -c "$2";
c2e11d
+        run_podman ${events_backend} run --log-driver=$driver --rm -d --name "$1" $IMAGE sh -c "$2";
c2e11d
         cid+=($(echo "${output:0:12}"))
c2e11d
     }
c2e11d
 
c2e11d
@@ -57,7 +70,7 @@ function _log_test_multi() {
c2e11d
     doit c1         "echo a;sleep 10;echo d;sleep 3"
c2e11d
     doit c2 "sleep 1;echo b;sleep  2;echo c;sleep 3"
c2e11d
 
c2e11d
-    run_podman logs -f c1 c2
c2e11d
+    run_podman ${events_backend} logs -f c1 c2
c2e11d
     is "$output" \
c2e11d
        "${cid[0]} a$etc
c2e11d
 ${cid[1]} b$etc
c2e11d
@@ -187,15 +200,20 @@ function _log_test_follow() {
c2e11d
     contentA=$(random_string)
c2e11d
     contentB=$(random_string)
c2e11d
     contentC=$(random_string)
c2e11d
+    local events_backend=$(_additional_events_backend $driver)
c2e11d
+
c2e11d
+    if [[ -n "${events_backend}" ]]; then
c2e11d
+        skip_if_remote "remote does not support --events-backend"
c2e11d
+    fi
c2e11d
 
c2e11d
     # Note: it seems we need at least three log lines to hit #11461.
c2e11d
-    run_podman run --log-driver=$driver --name $cname $IMAGE sh -c "echo $contentA; echo $contentB; echo $contentC"
c2e11d
-    run_podman logs -f $cname
c2e11d
+    run_podman ${events_backend} run --log-driver=$driver --name $cname $IMAGE sh -c "echo $contentA; echo $contentB; echo $contentC"
c2e11d
+    run_podman ${events_backend} logs -f $cname
c2e11d
     is "$output" "$contentA
c2e11d
 $contentB
c2e11d
 $contentC" "logs -f on exitted container works"
c2e11d
 
c2e11d
-    run_podman rm -f $cname
c2e11d
+    run_podman ${events_backend} rm -f $cname
c2e11d
 }
c2e11d
 
c2e11d
 @test "podman logs - --follow k8s-file" {
c2e11d
diff --git a/test/system/130-kill.bats b/test/system/130-kill.bats
c2e11d
index d85f0a6a998..1ff3a7b6199 100644
c2e11d
--- a/test/system/130-kill.bats
c2e11d
+++ b/test/system/130-kill.bats
c2e11d
@@ -6,9 +6,22 @@
c2e11d
 load helpers
c2e11d
 
c2e11d
 @test "podman kill - test signal handling in containers" {
c2e11d
+
c2e11d
+    # Prepare for 'logs -f'
c2e11d
+    run_podman info --format '{{.Host.LogDriver}}'
c2e11d
+    log_driver=$output
c2e11d
+    run_podman info --format '{{.Host.EventLogger}}'
c2e11d
+    event_logger=$output
c2e11d
+    opt_log_driver=
c2e11d
+    if [ $log_driver = "journald" ] && [ $event_logger != "journald" ]; then
c2e11d
+        # Since PR#10431, 'logs -f' with journald driver is only supported with journald events backend.
c2e11d
+        # Set '--log driver' temporally because remote doesn't support '--events-backend'.
c2e11d
+        opt_log_driver="--log-driver k8s-file"
c2e11d
+    fi
c2e11d
+
c2e11d
     # Start a container that will handle all signals by emitting 'got: N'
c2e11d
     local -a signals=(1 2 3 4 5 6 8 10 12 13 14 15 16 20 21 22 23 24 25 26 64)
c2e11d
-    run_podman run -d $IMAGE sh -c \
c2e11d
+    run_podman run -d ${opt_log_driver} $IMAGE sh -c \
c2e11d
         "for i in ${signals[*]}; do trap \"echo got: \$i\" \$i; done;
c2e11d
         echo READY;
c2e11d
         while ! test -e /stop; do sleep 0.05; done;