diff --git a/.github/workflows/ci-pr.yml b/.github/workflows/ci-pr.yml index 8ab4fed1..f5fb08d9 100644 --- a/.github/workflows/ci-pr.yml +++ b/.github/workflows/ci-pr.yml @@ -36,7 +36,7 @@ jobs: - name: Run Gradle build run: | - ./gradlew clean build -DdownloadRabbitConnector=false --continue --scan + ./gradlew clean build -DdownloadRabbitConnector=true --continue --scan - name: Capture Test Results if: failure() diff --git a/spring-pulsar-spring-boot-autoconfigure/src/test/java/org/springframework/pulsar/autoconfigure/PulsarFunctionAdministrationIntegrationTests.java b/spring-pulsar-spring-boot-autoconfigure/src/test/java/org/springframework/pulsar/autoconfigure/PulsarFunctionAdministrationIntegrationTests.java index d418c649..9d0e01fe 100644 --- a/spring-pulsar-spring-boot-autoconfigure/src/test/java/org/springframework/pulsar/autoconfigure/PulsarFunctionAdministrationIntegrationTests.java +++ b/spring-pulsar-spring-boot-autoconfigure/src/test/java/org/springframework/pulsar/autoconfigure/PulsarFunctionAdministrationIntegrationTests.java @@ -40,6 +40,9 @@ import org.apache.pulsar.common.policies.data.SourceStatus; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIf; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.TestWatcher; import org.testcontainers.containers.BindMode; import org.testcontainers.containers.Network; import org.testcontainers.containers.PulsarContainer; @@ -57,8 +60,10 @@ import org.springframework.context.annotation.Import; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; import org.springframework.core.io.support.ResourcePatternUtils; +import org.springframework.core.log.LogAccessor; import org.springframework.lang.Nullable; import org.springframework.pulsar.annotation.PulsarListener; +import org.springframework.pulsar.autoconfigure.PulsarFunctionAdministrationIntegrationTests.ContainerLoggingTestWatcher; import org.springframework.pulsar.function.PulsarFunctionAdministration; import org.springframework.pulsar.function.PulsarFunctionOperations.FunctionStopPolicy; import org.springframework.pulsar.function.PulsarSource; @@ -73,6 +78,7 @@ import org.springframework.pulsar.test.support.PulsarTestContainerSupport; */ @Testcontainers(disabledWithoutDocker = true) @EnabledIf("rabbitConnectorExists") +@ExtendWith(ContainerLoggingTestWatcher.class) class PulsarFunctionAdministrationIntegrationTests { private static final String RABBIT_QUEUE = "pft_foo_queue"; @@ -129,6 +135,7 @@ class PulsarFunctionAdministrationIntegrationTests { List messages = LongStream.range(0, RECEIVED_MESSAGE_LATCH.getCount()).mapToObj((i) -> "bar" + i) .toList(); messages.forEach(msg -> rabbitTemplate.convertAndSend(RABBIT_QUEUE, msg)); + assertThat(RECEIVED_MESSAGE_LATCH.await(10, TimeUnit.SECONDS)).isTrue(); assertThat(RECEIVED_MESSAGES).containsExactlyElementsOf(messages); } @@ -259,4 +266,27 @@ class PulsarFunctionAdministrationIntegrationTests { } + static class ContainerLoggingTestWatcher implements TestWatcher { + + private final LogAccessor logger = new LogAccessor(this.getClass()); + + @Override + public void testFailed(ExtensionContext context, Throwable cause) { + this.logger.error(() -> "Test %s failed due to: %s - inspect container logs below:%n%n%s" + .formatted(context.getDisplayName(), cause.getMessage(), getPulsarContainerLogs())); + } + + private String getPulsarContainerLogs() { + try { + return PULSAR_CONTAINER.getLogs(); + } + catch (Exception ex) { + String msg = "<---- Failed to retrieve container logs: %s ---->".formatted(ex.getMessage()); + logger.error(ex, msg); + return msg; + } + } + + } + }