@@ -346,4 +346,48 @@ void doOutput_with_invalid_version_expression_result_catches_RuntimeException_an
346346
347347 verify (dynamicDocumentVersionDroppedEvents ).increment ();
348348 }
349+
350+ @ Test
351+ void createDlqObjectFromEvent_with_null_message_uses_default_message () throws IOException {
352+ when (pluginSetting .getName ()).thenReturn ("opensearch" );
353+
354+ final Event event = mock (JacksonEvent .class );
355+ final String document = UUID .randomUUID ().toString ();
356+ when (event .toJsonString ()).thenReturn (document );
357+ final EventHandle eventHandle = mock (EventHandle .class );
358+ when (event .getEventHandle ()).thenReturn (eventHandle );
359+ final String index = UUID .randomUUID ().toString ();
360+
361+ final OpenSearchSink objectUnderTest = createObjectUnderTest ();
362+ when (indexManagerFactory .getIndexManager (any (IndexType .class ), eq (openSearchClient ), any (RestHighLevelClient .class ), eq (openSearchSinkConfiguration ), any (TemplateStrategy .class ), any ()))
363+ .thenReturn (indexManager );
364+ doNothing ().when (indexManager ).setupIndex ();
365+ objectUnderTest .initialize ();
366+
367+ final DlqObject .Builder dlqObjectBuilder = mock (DlqObject .Builder .class );
368+ final ArgumentCaptor <FailedDlqData > failedDlqData = ArgumentCaptor .forClass (FailedDlqData .class );
369+ when (dlqObjectBuilder .withEventHandle (eventHandle )).thenReturn (dlqObjectBuilder );
370+ when (dlqObjectBuilder .withFailedData (failedDlqData .capture ())).thenReturn (dlqObjectBuilder );
371+ when (dlqObjectBuilder .withPluginName (pluginSetting .getName ())).thenReturn (dlqObjectBuilder );
372+ when (dlqObjectBuilder .withPluginId (pluginSetting .getName ())).thenReturn (dlqObjectBuilder );
373+ when (dlqObjectBuilder .withPipelineName (pipelineDescription .getPipelineName ())).thenReturn (dlqObjectBuilder );
374+ when (dlqObjectBuilder .build ()).thenReturn (mock (DlqObject .class ));
375+
376+ try (final MockedStatic <DlqObject > dlqObjectMockedStatic = mockStatic (DlqObject .class )) {
377+ dlqObjectMockedStatic .when (DlqObject ::builder ).thenReturn (dlqObjectBuilder );
378+
379+ // Use reflection to call the private method with null message
380+ java .lang .reflect .Method method = OpenSearchSink .class .getDeclaredMethod ("createDlqObjectFromEvent" , Event .class , String .class , String .class );
381+ method .setAccessible (true );
382+ method .invoke (objectUnderTest , event , index , null );
383+ } catch (Exception e ) {
384+ throw new RuntimeException (e );
385+ }
386+
387+ final FailedDlqData failedDlqDataResult = failedDlqData .getValue ();
388+ assertThat (failedDlqDataResult , notNullValue ());
389+ assertThat (failedDlqDataResult .getDocument (), equalTo (document ));
390+ assertThat (failedDlqDataResult .getIndex (), equalTo (index ));
391+ assertThat (failedDlqDataResult .getMessage (), equalTo ("Unknown error" ));
392+ }
349393}
0 commit comments