diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go index 7926edbc93..82d6bce297 100644 --- a/test/e2e/common_test.go +++ b/test/e2e/common_test.go @@ -756,6 +756,33 @@ func SkipIfNotFedora() { } } +type journaldTests struct { + journaldSkip bool + journaldOnce sync.Once +} + +var journald journaldTests + +func SkipIfJournaldUnavailable() { + f := func() { + journald.journaldSkip = false + + // Check if journalctl is unavailable + cmd := exec.Command("journalctl", "-n", "1") + if err := cmd.Run(); err != nil { + journald.journaldSkip = true + } + } + journald.journaldOnce.Do(f) + + // In container, journalctl does not return an error even if + // journald is unavailable + SkipIfInContainer("[journald]: journalctl inside a container doesn't work correctly") + if journald.journaldSkip { + Skip("[journald]: journald is unavailable") + } +} + // Use isRootless() instead of rootless.IsRootless() // This function can detect to join the user namespace by mistake func isRootless() bool { diff --git a/test/e2e/containers_conf_test.go b/test/e2e/containers_conf_test.go index 74948b6637..a200c263a1 100644 --- a/test/e2e/containers_conf_test.go +++ b/test/e2e/containers_conf_test.go @@ -257,7 +257,7 @@ var _ = Describe("Verify podman containers.conf usage", func() { }) It("using journald for container with container log_tag", func() { - SkipIfInContainer("journalctl inside a container doesn't work correctly") + SkipIfJournaldUnavailable() os.Setenv("CONTAINERS_CONF", "config/containers-journald.conf") if IsRemote() { podmanTest.RestartRemoteService() diff --git a/test/e2e/logs_test.go b/test/e2e/logs_test.go index 46d1bd0d42..b1cd9782a6 100644 --- a/test/e2e/logs_test.go +++ b/test/e2e/logs_test.go @@ -44,7 +44,6 @@ var _ = Describe("Podman logs", func() { podmanTest.Cleanup() f := CurrentGinkgoTestDescription() processTestResult(f) - }) It("podman logs on not existent container", func() { @@ -60,7 +59,7 @@ var _ = Describe("Podman logs", func() { skipIfJournaldInContainer := func() { if log == "journald" { - SkipIfInContainer("journalctl inside a container doesn't work correctly") + SkipIfJournaldUnavailable() } } @@ -513,7 +512,7 @@ var _ = Describe("Podman logs", func() { } It("using journald for container with container tag", func() { - SkipIfInContainer("journalctl inside a container doesn't work correctly") + SkipIfJournaldUnavailable() logc := podmanTest.Podman([]string{"run", "--log-driver", "journald", "--log-opt=tag={{.ImageName}}", "-d", ALPINE, "sh", "-c", "echo podman; sleep 0.1; echo podman; sleep 0.1; echo podman"}) logc.WaitWithDefaultTimeout() Expect(logc).To(Exit(0)) @@ -530,7 +529,7 @@ var _ = Describe("Podman logs", func() { }) It("using journald container name", func() { - SkipIfInContainer("journalctl inside a container doesn't work correctly") + SkipIfJournaldUnavailable() containerName := "inside-journal" logc := podmanTest.Podman([]string{"run", "--log-driver", "journald", "-d", "--name", containerName, ALPINE, "sh", "-c", "echo podman; sleep 0.1; echo podman; sleep 0.1; echo podman"}) logc.WaitWithDefaultTimeout() @@ -560,7 +559,6 @@ var _ = Describe("Podman logs", func() { It("podman pod logs with container names", func() { SkipIfRemote("Remote can only process one container at a time") - SkipIfInContainer("journalctl inside a container doesn't work correctly") podName := "testPod" containerName1 := "container1" containerName2 := "container2" @@ -588,7 +586,6 @@ var _ = Describe("Podman logs", func() { }) It("podman pod logs with different colors", func() { SkipIfRemote("Remote can only process one container at a time") - SkipIfInContainer("journalctl inside a container doesn't work correctly") podName := "testPod" containerName1 := "container1" containerName2 := "container2"