From 8b7b69a2e26d8124387ea06e9751ced2d0d59b40 Mon Sep 17 00:00:00 2001 From: Matt Way Date: Wed, 20 Apr 2022 14:35:22 +1000 Subject: [PATCH] Fix NullPointerException when event buffer is full --- .../sdk/android/LDClientTest.java | 25 +++++++++++++++++++ .../launchdarkly/sdk/android/LDClient.java | 4 ++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientTest.java b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientTest.java index 290a8893..7c235dfe 100644 --- a/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientTest.java +++ b/launchdarkly-android-client-sdk/src/androidTest/java/com/launchdarkly/sdk/android/LDClientTest.java @@ -645,6 +645,31 @@ public void additionalHeadersIncludedInEventsRequest() throws IOException, Inter } } + @Test + public void testEventBufferFillsUp() throws IOException, InterruptedException { + try (MockWebServer mockEventsServer = new MockWebServer()) { + mockEventsServer.start(); + // Enqueue a successful empty response + mockEventsServer.enqueue(new MockResponse()); + + LDConfig ldConfig = baseConfigBuilder(mockEventsServer) + .eventsCapacity(1) + .build(); + + // Don't wait as we are not set offline + try (LDClient client = LDClient.init(application, ldConfig, ldUser, 0)) { + client.identify(ldUser); + LDValue testData = LDValue.of("xyz"); + client.trackData("test-event", testData); + client.blockingFlush(); + + // Verify that only the first event was sent and other events were dropped + Event[] events = getEventsFromLastRequest(mockEventsServer, 1); + assertTrue(events[0] instanceof IdentifyEvent); + } + } + } + private Event[] getEventsFromLastRequest(MockWebServer server, int expectedCount) throws InterruptedException { RecordedRequest r = server.takeRequest(); assertEquals("POST", r.getMethod()); diff --git a/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/LDClient.java b/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/LDClient.java index 4a713f75..050f9ac4 100644 --- a/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/LDClient.java +++ b/launchdarkly-android-client-sdk/src/main/java/com/launchdarkly/sdk/android/LDClient.java @@ -664,7 +664,9 @@ private void sendEvent(Event event) { boolean processed = eventProcessor.sendEvent(event); if (!processed) { LDConfig.LOG.w("Exceeded event queue capacity. Increase capacity to avoid dropping events."); - diagnosticStore.incrementDroppedEventCount(); + if (diagnosticStore != null) { + diagnosticStore.incrementDroppedEventCount(); + } } } }