From 79e0c9cac62cfee8e37ec1853663d3c3cd8296e8 Mon Sep 17 00:00:00 2001 From: musketyr Date: Wed, 25 Sep 2024 13:51:46 +0200 Subject: [PATCH] Store the events sent into fallback service for easier testing --- .../FallbackNewRelicInsightsService.java | 18 ++++++++++++++++++ test-projects/nr/nr.gradle | 1 + .../src/test/groovy/nr/NewRelicNoopSpec.groovy | 12 ++++++++++++ 3 files changed, 31 insertions(+) diff --git a/libs/micronaut-newrelic/src/main/java/com/agorapulse/micronaut/newrelic/FallbackNewRelicInsightsService.java b/libs/micronaut-newrelic/src/main/java/com/agorapulse/micronaut/newrelic/FallbackNewRelicInsightsService.java index 2bf94dd..5dbe5f6 100644 --- a/libs/micronaut-newrelic/src/main/java/com/agorapulse/micronaut/newrelic/FallbackNewRelicInsightsService.java +++ b/libs/micronaut-newrelic/src/main/java/com/agorapulse/micronaut/newrelic/FallbackNewRelicInsightsService.java @@ -26,18 +26,23 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayDeque; import java.util.Collection; +import java.util.Deque; import java.util.List; import java.util.Map; +import java.util.stream.Stream; @Secondary @Singleton public class FallbackNewRelicInsightsService implements NewRelicInsightsService { + private static final int MAX_EVENTS = 25; private static final Logger LOGGER = LoggerFactory.getLogger(NewRelicInsightsService.class); private final EventPayloadExtractor extractor; private final ObjectMapper mapper; + private final Deque events = new ArrayDeque<>(); public FallbackNewRelicInsightsService(EventPayloadExtractor extractor, ObjectMapper mapper) { @@ -55,8 +60,21 @@ public void createEvents(Collection events) { try { List> payloads = events.stream().map(extractor::extractPayload).toList(); LOGGER.info("Following events not sent to NewRelic:\n{}", mapper.writerWithDefaultPrettyPrinter().writeValueAsString(payloads)); + + this.events.addAll(events); + + while (this.events.size() > MAX_EVENTS) { + this.events.poll(); + } + + LOGGER.info("You can access {} event(s) using FallbackNewRelicInsightsService#getEvents() method.", this.events.size()); } catch (JsonProcessingException e) { throw new IllegalArgumentException(e); } } + + public Stream getEvents(Class eventType) { + return events.stream().filter(eventType::isInstance).map(eventType::cast); + } + } diff --git a/test-projects/nr/nr.gradle b/test-projects/nr/nr.gradle index 10f56a5..20f6b6a 100644 --- a/test-projects/nr/nr.gradle +++ b/test-projects/nr/nr.gradle @@ -26,5 +26,6 @@ dependencies { runtimeOnly 'org.apache.logging.log4j:log4j-slf4j-impl:2.9.1' testImplementation 'io.micronaut:micronaut-inject-groovy' + testImplementation('com.fasterxml.jackson.core:jackson-databind') testImplementation 'org.mockito:mockito-inline:3.8.0' } diff --git a/test-projects/nr/src/test/groovy/nr/NewRelicNoopSpec.groovy b/test-projects/nr/src/test/groovy/nr/NewRelicNoopSpec.groovy index 7ed8dfa..ad1f86d 100644 --- a/test-projects/nr/src/test/groovy/nr/NewRelicNoopSpec.groovy +++ b/test-projects/nr/src/test/groovy/nr/NewRelicNoopSpec.groovy @@ -20,6 +20,7 @@ package nr import com.agorapulse.micronaut.newrelic.AsyncNewRelicInsightsService import com.agorapulse.micronaut.newrelic.FallbackNewRelicInsightsService import com.agorapulse.micronaut.newrelic.NewRelicInsightsClient +import com.agorapulse.micronaut.newrelic.NewRelicInsightsEvent import com.agorapulse.micronaut.newrelic.NewRelicInsightsService import com.newrelic.api.agent.Agent import com.newrelic.api.agent.Insights @@ -42,6 +43,17 @@ class NewRelicNoopSpec extends Specification { expect: !context.containsBean(NewRelicInsightsClient) service instanceof FallbackNewRelicInsightsService + + + when: + 27.times { + service.createEvent(NewRelicInsightsEvent.create('TestEvent', 'order', it)) + } + + then: + ((FallbackNewRelicInsightsService) service).getEvents(NewRelicInsightsEvent).count() == 25 + ((FallbackNewRelicInsightsService) service).getEvents(NewRelicInsightsEvent).findFirst().orElse(null).value == 2 + cleanup: context.close() }