Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -679,7 +679,7 @@ private DlqObject createDlqObjectFromEvent(final Event event,
.withFailedData(FailedDlqData.builder()
.withDocument(event.toJsonString())
.withIndex(index)
.withMessage(message)
.withMessage(message != null ? message : "")
.build())
.withPluginName(PLUGIN_NAME)
.withPipelineName(pipeline)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -346,4 +346,48 @@ void doOutput_with_invalid_version_expression_result_catches_RuntimeException_an

verify(dynamicDocumentVersionDroppedEvents).increment();
}

@Test
void createDlqObjectFromEvent_with_null_message_uses_default_message() throws IOException {
when(pluginSetting.getName()).thenReturn("opensearch");

final Event event = mock(JacksonEvent.class);
final String document = UUID.randomUUID().toString();
when(event.toJsonString()).thenReturn(document);
final EventHandle eventHandle = mock(EventHandle.class);
when(event.getEventHandle()).thenReturn(eventHandle);
final String index = UUID.randomUUID().toString();

final OpenSearchSink objectUnderTest = createObjectUnderTest();
when(indexManagerFactory.getIndexManager(any(IndexType.class), eq(openSearchClient), any(RestHighLevelClient.class), eq(openSearchSinkConfiguration), any(TemplateStrategy.class), any()))
.thenReturn(indexManager);
doNothing().when(indexManager).setupIndex();
objectUnderTest.initialize();

final DlqObject.Builder dlqObjectBuilder = mock(DlqObject.Builder.class);
final ArgumentCaptor<FailedDlqData> failedDlqData = ArgumentCaptor.forClass(FailedDlqData.class);
when(dlqObjectBuilder.withEventHandle(eventHandle)).thenReturn(dlqObjectBuilder);
when(dlqObjectBuilder.withFailedData(failedDlqData.capture())).thenReturn(dlqObjectBuilder);
when(dlqObjectBuilder.withPluginName(pluginSetting.getName())).thenReturn(dlqObjectBuilder);
when(dlqObjectBuilder.withPluginId(pluginSetting.getName())).thenReturn(dlqObjectBuilder);
when(dlqObjectBuilder.withPipelineName(pipelineDescription.getPipelineName())).thenReturn(dlqObjectBuilder);
when(dlqObjectBuilder.build()).thenReturn(mock(DlqObject.class));

try (final MockedStatic<DlqObject> dlqObjectMockedStatic = mockStatic(DlqObject.class)) {
dlqObjectMockedStatic.when(DlqObject::builder).thenReturn(dlqObjectBuilder);

// Use reflection to call the private method with null message
java.lang.reflect.Method method = OpenSearchSink.class.getDeclaredMethod("createDlqObjectFromEvent", Event.class, String.class, String.class);
method.setAccessible(true);
method.invoke(objectUnderTest, event, index, null);
} catch (Exception e) {
throw new RuntimeException(e);
}

final FailedDlqData failedDlqDataResult = failedDlqData.getValue();
assertThat(failedDlqDataResult, notNullValue());
assertThat(failedDlqDataResult.getDocument(), equalTo(document));
assertThat(failedDlqDataResult.getIndex(), equalTo(index));
assertThat(failedDlqDataResult.getMessage(), equalTo(""));
}
}
Loading