diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/AirbyteTraceMessageUtility.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/AirbyteTraceMessageUtility.java index 765920ed24217..885a307b3eb3f 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/AirbyteTraceMessageUtility.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/AirbyteTraceMessageUtility.java @@ -9,8 +9,8 @@ import io.airbyte.protocol.models.AirbyteMessage; import io.airbyte.protocol.models.AirbyteMessage.Type; import io.airbyte.protocol.models.AirbyteTraceMessage; -import java.util.Arrays; import java.util.function.Consumer; +import org.apache.commons.lang3.exception.ExceptionUtils; public final class AirbyteTraceMessageUtility { @@ -53,7 +53,7 @@ private static AirbyteMessage makeErrorTraceAirbyteMessage( .withFailureType(failureType) .withMessage(displayMessage) .withInternalMessage(e.toString()) - .withStackTrace(Arrays.toString(e.getStackTrace())))); + .withStackTrace(ExceptionUtils.getStackTrace(e)))); } private static AirbyteMessage makeAirbyteMessageFromTraceMessage(AirbyteTraceMessage airbyteTraceMessage) { diff --git a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/base/AirbyteTraceMessageUtilityTest.java b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/base/AirbyteTraceMessageUtilityTest.java index 19146e15b37b2..0c5351552899d 100644 --- a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/base/AirbyteTraceMessageUtilityTest.java +++ b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/base/AirbyteTraceMessageUtilityTest.java @@ -36,13 +36,17 @@ private void assertJsonNodeIsTraceMessage(JsonNode jsonNode) { @Test void testEmitSystemErrorTrace() { AirbyteTraceMessageUtility.emitSystemErrorTrace(Mockito.mock(RuntimeException.class), "this is a system error"); - assertJsonNodeIsTraceMessage(Jsons.deserialize(outContent.toString(StandardCharsets.UTF_8))); + JsonNode outJson = Jsons.deserialize(outContent.toString(StandardCharsets.UTF_8)); + assertJsonNodeIsTraceMessage(outJson); + Assertions.assertEquals("system_error", outJson.get("trace").get("error").get("failure_type").asText()); } @Test void testEmitConfigErrorTrace() { AirbyteTraceMessageUtility.emitConfigErrorTrace(Mockito.mock(RuntimeException.class), "this is a config error"); - assertJsonNodeIsTraceMessage(Jsons.deserialize(outContent.toString(StandardCharsets.UTF_8))); + JsonNode outJson = Jsons.deserialize(outContent.toString(StandardCharsets.UTF_8)); + assertJsonNodeIsTraceMessage(outJson); + Assertions.assertEquals("config_error", outJson.get("trace").get("error").get("failure_type").asText()); } @Test @@ -51,6 +55,17 @@ void testEmitErrorTrace() { assertJsonNodeIsTraceMessage(Jsons.deserialize(outContent.toString(StandardCharsets.UTF_8))); } + @Test + void testCorrectStacktraceFormat() { + try { + int x = 1 / 0; + } catch (Exception e) { + AirbyteTraceMessageUtility.emitSystemErrorTrace(e, "you exploded the universe"); + } + JsonNode outJson = Jsons.deserialize(outContent.toString(StandardCharsets.UTF_8)); + Assertions.assertTrue(outJson.get("trace").get("error").get("stack_trace").asText().contains("\n\tat")); + } + @AfterEach public void revertOut() { System.setOut(originalOut);