From fb6c5532b8c8e667a85fb03c2ff83fa2eb101b7e Mon Sep 17 00:00:00 2001 From: niels cappelle Date: Tue, 24 Mar 2026 08:48:03 +0100 Subject: [PATCH 1/2] ACC-2685 dump k8s event logs when test fails --- .../junit/jupiter/k8s/log/KubernetesLoggerExtension.java | 3 +++ .../junit/jupiter/k8s/log/KubernetesResourceLogger.java | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesLoggerExtension.java b/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesLoggerExtension.java index be3cd12..e9234a3 100644 --- a/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesLoggerExtension.java +++ b/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesLoggerExtension.java @@ -62,6 +62,9 @@ private void dumpLogs(ExtensionContext context, boolean isStatic) throws Illegal if(logger != null) { logger.logs() .forEachOrdered(line -> log.info("[{}] {} {} >>> {}", line.resource(), line.timestamp(), line.container(), line.line())); + logger.events() + .forEachOrdered(event -> log.info("[{}] {} {} >>> [{}] {} (×{} in {}s)", + event.resource(), event.timestamp(), event.type(), event.reason(), event.message(), event.repeat().count(), event.repeat().period().getSeconds())); } } } diff --git a/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesResourceLogger.java b/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesResourceLogger.java index 3829257..3223050 100644 --- a/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesResourceLogger.java +++ b/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesResourceLogger.java @@ -2,6 +2,7 @@ import com.contentgrid.helm.HelmInstallCommand; import com.contentgrid.junit.jupiter.k8s.resource.AwaitableResource; +import com.contentgrid.junit.jupiter.k8s.resource.AwaitableResource.Event; import com.contentgrid.junit.jupiter.k8s.resource.AwaitableResource.LogLine; import com.contentgrid.junit.jupiter.k8s.resource.ConfigurableResourceSet; import com.contentgrid.junit.jupiter.k8s.resource.ResourceMatcher; @@ -50,6 +51,12 @@ public Stream logs() { .filter(logLine -> logLine.timestamp().isAfter(logsSince)); } + public Stream events() { + return resourceSet.stream() + .flatMap(AwaitableResource::events) + .filter(event -> event.timestamp().plus(event.repeat().period()).isAfter(logsSince)); + } + @Override public void close() { resourceSet.close(); From 53cfcb4482deeb7b9ad765ff8dd538a1f006dd5d Mon Sep 17 00:00:00 2001 From: niels cappelle Date: Tue, 24 Mar 2026 09:06:11 +0100 Subject: [PATCH 2/2] ACC-2685 hide RepeatCount when event only occurs once Log line looked weird since Duration is always 0 --- .../jupiter/k8s/log/KubernetesLoggerExtension.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesLoggerExtension.java b/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesLoggerExtension.java index e9234a3..857ef0f 100644 --- a/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesLoggerExtension.java +++ b/contentgrid-junit-jupiter-k8s/src/main/java/com/contentgrid/junit/jupiter/k8s/log/KubernetesLoggerExtension.java @@ -4,6 +4,7 @@ import static com.contentgrid.junit.jupiter.helpers.FieldHelper.getFieldValue; import com.contentgrid.junit.jupiter.helpers.FieldHelper; +import com.contentgrid.junit.jupiter.k8s.resource.AwaitableResource.Event.RepeatCount; import io.fabric8.junit.jupiter.HasKubernetesClient; import java.lang.reflect.Field; import java.lang.reflect.Modifier; @@ -63,12 +64,17 @@ private void dumpLogs(ExtensionContext context, boolean isStatic) throws Illegal logger.logs() .forEachOrdered(line -> log.info("[{}] {} {} >>> {}", line.resource(), line.timestamp(), line.container(), line.line())); logger.events() - .forEachOrdered(event -> log.info("[{}] {} {} >>> [{}] {} (×{} in {}s)", - event.resource(), event.timestamp(), event.type(), event.reason(), event.message(), event.repeat().count(), event.repeat().period().getSeconds())); + .forEachOrdered(event -> log.info("[{}] {} {} >>> [{}] {}{}", + event.resource(), event.timestamp(), event.type(), event.reason(), event.message(), + event.repeat().count() > 1 ? formatRepeatCount(event.repeat()) : "")); } } } + private static String formatRepeatCount(RepeatCount repeat) { + return " (×%s in %ss)".formatted(repeat.count(), repeat.period().getSeconds()); + } + @Override public void handleBeforeEachMethodExecutionException(ExtensionContext context, Throwable throwable) throws Throwable {