diff --git a/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackDisabledTest.java b/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackDisabledTest.java index 5ec40bb3e3f..ea6eab449fa 100644 --- a/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackDisabledTest.java +++ b/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackDisabledTest.java @@ -4,13 +4,7 @@ package com.microsoft.applicationinsights.smoketest; import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_8; -import static org.assertj.core.api.Assertions.assertThat; -import com.microsoft.applicationinsights.smoketest.schemav2.Data; -import com.microsoft.applicationinsights.smoketest.schemav2.Envelope; -import com.microsoft.applicationinsights.smoketest.schemav2.ExceptionData; -import com.microsoft.applicationinsights.smoketest.schemav2.RequestData; -import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -23,39 +17,30 @@ class LogbackDisabledTest { @Test @TargetUri("/test") void testDisabled() throws Exception { - List rdList = testing.mockedIngestion.waitForItems("RequestData", 1); - - Envelope rdEnvelope = rdList.get(0); - RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData(); - assertThat(rd.getName()).isEqualTo("GET /Logback/test"); - - assertThat(testing.mockedIngestion.getCountForType("MessageData")).isZero(); + testing.waitAndAssertTrace( + trace -> + trace + .hasRequestSatisying(request -> request.hasName("GET /Logback/test")) + .hasMessageCount(0)); } @Test @TargetUri("/testWithSpanException") void testWithSpanException() throws Exception { - List rdList = testing.mockedIngestion.waitForItems("RequestData", 1); - - Envelope rdEnvelope = rdList.get(0); - RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData(); - assertThat(rd.getName()).isEqualTo("GET /Logback/testWithSpanException"); - - assertThat(testing.mockedIngestion.getCountForType("MessageData")).isZero(); - - // check that span exception is still captured - String operationId = rdEnvelope.getTags().get("ai.operation.id"); - List edList = - testing.mockedIngestion.waitForItemsInOperation("ExceptionData", 1, operationId); - - Envelope edEnvelope = edList.get(0); - ExceptionData ed = (ExceptionData) ((Data) edEnvelope.getData()).getBaseData(); - - assertThat(ed.getExceptions().get(0).getTypeName()).isEqualTo("java.lang.RuntimeException"); - assertThat(ed.getExceptions().get(0).getMessage()).isEqualTo("Test Exception"); - assertThat(ed.getProperties()).isEmpty(); // this is not a logger-based exception - - SmokeTestExtension.assertParentChild( - rd, rdEnvelope, edEnvelope, "GET /Logback/testWithSpanException"); + testing.waitAndAssertTrace( + trace -> + trace + .hasRequestSatisying( + request -> request.hasName("GET /Logback/testWithSpanException")) + .hasMessageCount(0) + .hasExceptionCount(1) + .hasExceptionSatisying( + exception -> + exception + .hasExceptionTypeName("java.lang.RuntimeException") + .hasExceptionMessage("Test Exception") + .hasEmptyProperties() + .hasParent(trace.getRequestId(0)) + .hasTag("ai.operation.name", "GET /Logback/testWithSpanException"))); } } diff --git a/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackLevelOffTest.java b/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackLevelOffTest.java index cea6ed72db2..c564f13367f 100644 --- a/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackLevelOffTest.java +++ b/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackLevelOffTest.java @@ -4,13 +4,7 @@ package com.microsoft.applicationinsights.smoketest; import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_8; -import static org.assertj.core.api.Assertions.assertThat; -import com.microsoft.applicationinsights.smoketest.schemav2.Data; -import com.microsoft.applicationinsights.smoketest.schemav2.Envelope; -import com.microsoft.applicationinsights.smoketest.schemav2.ExceptionData; -import com.microsoft.applicationinsights.smoketest.schemav2.RequestData; -import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -23,39 +17,30 @@ class LogbackLevelOffTest { @Test @TargetUri("/test") void testDisabled() throws Exception { - List rdList = testing.mockedIngestion.waitForItems("RequestData", 1); - - Envelope rdEnvelope = rdList.get(0); - RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData(); - assertThat(rd.getName()).isEqualTo("GET /Logback/test"); - - assertThat(testing.mockedIngestion.getCountForType("MessageData")).isZero(); + testing.waitAndAssertTrace( + trace -> + trace + .hasRequestSatisying(request -> request.hasName("GET /Logback/test")) + .hasMessageCount(0)); } @Test @TargetUri("/testWithSpanException") void testWithSpanException() throws Exception { - List rdList = testing.mockedIngestion.waitForItems("RequestData", 1); - - Envelope rdEnvelope = rdList.get(0); - RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData(); - assertThat(rd.getName()).isEqualTo("GET /Logback/testWithSpanException"); - - assertThat(testing.mockedIngestion.getCountForType("MessageData")).isZero(); - - // check that span exception is still captured - String operationId = rdEnvelope.getTags().get("ai.operation.id"); - List edList = - testing.mockedIngestion.waitForItemsInOperation("ExceptionData", 1, operationId); - - Envelope edEnvelope = edList.get(0); - ExceptionData ed = (ExceptionData) ((Data) edEnvelope.getData()).getBaseData(); - - assertThat(ed.getExceptions().get(0).getTypeName()).isEqualTo("java.lang.RuntimeException"); - assertThat(ed.getExceptions().get(0).getMessage()).isEqualTo("Test Exception"); - assertThat(ed.getProperties()).isEmpty(); // this is not a logger-based exception - - SmokeTestExtension.assertParentChild( - rd, rdEnvelope, edEnvelope, "GET /Logback/testWithSpanException"); + testing.waitAndAssertTrace( + trace -> + trace + .hasRequestSatisying( + request -> request.hasName("GET /Logback/testWithSpanException")) + .hasMessageCount(0) + .hasExceptionCount(1) + .hasExceptionSatisying( + exception -> + exception + .hasExceptionTypeName("java.lang.RuntimeException") + .hasExceptionMessage("Test Exception") + .hasEmptyProperties() + .hasParent(trace.getRequestId(0)) + .hasTag("ai.operation.name", "GET /Logback/testWithSpanException"))); } } diff --git a/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackTest.java b/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackTest.java index 90ed9789259..96907e0986f 100644 --- a/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackTest.java +++ b/smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackTest.java @@ -17,14 +17,7 @@ import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.WILDFLY_13_JAVA_8_OPENJ9; import static org.assertj.core.api.Assertions.assertThat; -import com.microsoft.applicationinsights.smoketest.schemav2.Data; -import com.microsoft.applicationinsights.smoketest.schemav2.Envelope; -import com.microsoft.applicationinsights.smoketest.schemav2.ExceptionData; -import com.microsoft.applicationinsights.smoketest.schemav2.MessageData; -import com.microsoft.applicationinsights.smoketest.schemav2.RequestData; import com.microsoft.applicationinsights.smoketest.schemav2.SeverityLevel; -import java.util.Comparator; -import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -43,119 +36,116 @@ boolean isWildflyServer() { @Test @TargetUri("/test") void test() throws Exception { - List rdList = testing.mockedIngestion.waitForItems("RequestData", 1); - - Envelope rdEnvelope = rdList.get(0); - String operationId = rdEnvelope.getTags().get("ai.operation.id"); - List mdList = testing.mockedIngestion.waitForMessageItemsInRequest(3, operationId); - - Envelope mdEnvelope1 = mdList.get(0); - Envelope mdEnvelope2 = mdList.get(1); - - assertThat(rdEnvelope.getSampleRate()).isNull(); - assertThat(mdEnvelope1.getSampleRate()).isNull(); - assertThat(mdEnvelope2.getSampleRate()).isNull(); - - RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData(); - - List logs = testing.mockedIngestion.getMessageDataInRequest(3); - logs.sort(Comparator.comparing(MessageData::getSeverityLevel)); - - MessageData md1 = logs.get(0); - MessageData md2 = logs.get(1); - MessageData md3 = logs.get(2); - - assertThat(md1.getMessage()).isEqualTo("This is logback warn."); - assertThat(md1.getSeverityLevel()).isEqualTo(SeverityLevel.WARNING); - assertThat(md1.getProperties()) - .containsEntry("SourceType", "Logger") - .containsEntry("LoggerName", "smoketestapp") - .containsKey("ThreadName") - .containsEntry("MDC key", "MDC value"); - - if (!isWildflyServer()) { - assertThat(md1.getProperties()) - .containsEntry("FileName", "LogbackServlet.java") - .containsEntry( - "ClassName", "com.microsoft.applicationinsights.smoketestapp.LogbackServlet") - .containsEntry("MethodName", "doGet") - .containsEntry("LineNumber", "26") - .hasSize(8); - } else { - assertThat(md1.getProperties()).hasSize(4); - } - - assertThat(md2.getMessage()).isEqualTo("This is logback error."); - assertThat(md2.getSeverityLevel()).isEqualTo(SeverityLevel.ERROR); - assertThat(md2.getProperties()) - .containsEntry("SourceType", "Logger") - .containsEntry("LoggerName", "smoketestapp") - .containsKey("ThreadName"); + testing.waitAndAssertTrace( + trace -> + trace + .hasRequestSatisying( + request -> + request + .hasName("GET /Logback/test") + .hasNoSampleRate() + .hasTag("ai.operation.name", "GET /Logback/test") + .hasNoParent()) + .hasMessageCount(3) + .hasMessageSatisying( + message -> + message + .hasMessage("This is logback warn.") + .hasSeverityLevel(SeverityLevel.WARNING) + .hasProperty("SourceType", "Logger") + .hasProperty("LoggerName", "smoketestapp") + .containsProperty("ThreadName") + .hasProperty("MDC key", "MDC value") + .hasParent(trace.getRequestId(0)) + .hasNoSampleRate() + .hasTag("ai.operation.name", "GET /Logback/test") + .hasPropertiesSize(isWildflyServer() ? 4 : 8)) + .hasMessageSatisying( + message -> + message + .hasMessage("This is logback error.") + .hasSeverityLevel(SeverityLevel.ERROR) + .hasProperty("SourceType", "Logger") + .hasProperty("LoggerName", "smoketestapp") + .containsProperty("ThreadName") + .hasParent(trace.getRequestId(0)) + .hasNoSampleRate() + .hasTag("ai.operation.name", "GET /Logback/test") + .hasPropertiesSize(isWildflyServer() ? 3 : 7))); if (!isWildflyServer()) { - assertThat(md2.getProperties()) - .containsEntry("FileName", "LogbackServlet.java") - .containsEntry( - "ClassName", "com.microsoft.applicationinsights.smoketestapp.LogbackServlet") - .containsEntry("MethodName", "doGet") - .containsEntry("LineNumber", "28") - .hasSize(7); - } else { - assertThat(md2.getProperties()).hasSize(3); + testing.waitAndAssertTrace( + trace -> + trace + .hasMessageSatisying( + message -> + message + .hasMessage("This is logback warn.") + .hasProperty("FileName", "LogbackServlet.java") + .hasProperty( + "ClassName", + "com.microsoft.applicationinsights.smoketestapp.LogbackServlet") + .hasProperty("MethodName", "doGet") + .hasProperty("LineNumber", "26")) + .hasMessageSatisying( + message -> + message + .hasMessage("This is logback error.") + .hasProperty("FileName", "LogbackServlet.java") + .hasProperty( + "ClassName", + "com.microsoft.applicationinsights.smoketestapp.LogbackServlet") + .hasProperty("MethodName", "doGet") + .hasProperty("LineNumber", "28")) + .hasMessageSatisying(message -> message.hasProperty("Marker", "aMarker"))); } - - if (!isWildflyServer()) { - assertThat(md3.getProperties()).containsEntry("Marker", "aMarker"); - } - - SmokeTestExtension.assertParentChild(rd, rdEnvelope, mdEnvelope1, "GET /Logback/test"); - SmokeTestExtension.assertParentChild(rd, rdEnvelope, mdEnvelope2, "GET /Logback/test"); } @Test @TargetUri("/testWithException") void testWithException() throws Exception { - List rdList = testing.mockedIngestion.waitForItems("RequestData", 1); + testing.waitAndAssertTrace( + trace -> + trace + .hasRequestSatisying( + request -> + request + .hasName("GET /Logback/testWithException") + .hasNoSampleRate() + .hasTag("ai.operation.name", "GET /Logback/testWithException") + .hasNoParent()) + .hasExceptionCount(1) + .hasExceptionSatisying( + exception -> + exception + .hasExceptionTypeName("java.lang.Exception") + .hasExceptionMessage("Fake Exception") + .hasSeverityLevel(SeverityLevel.ERROR) + .hasProperty("Logger Message", "This is an exception!") + .hasProperty("SourceType", "Logger") + .hasProperty("LoggerName", "smoketestapp") + .containsProperty("ThreadName") + .hasProperty("MDC key", "MDC value") + .hasParent(trace.getRequestId(0)) + .hasNoSampleRate() + .hasTag("ai.operation.name", "GET /Logback/testWithException") + .hasPropertiesSize(isWildflyServer() ? 5 : 9))); - Envelope rdEnvelope = rdList.get(0); - String operationId = rdEnvelope.getTags().get("ai.operation.id"); - List edList = - testing.mockedIngestion.waitForItemsInOperation("ExceptionData", 1, operationId); assertThat(testing.mockedIngestion.getCountForType("EventData")).isZero(); - Envelope edEnvelope = edList.get(0); - - assertThat(rdEnvelope.getSampleRate()).isNull(); - assertThat(edEnvelope.getSampleRate()).isNull(); - - RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData(); - ExceptionData ed = (ExceptionData) ((Data) edEnvelope.getData()).getBaseData(); - - assertThat(ed.getExceptions().get(0).getTypeName()).isEqualTo("java.lang.Exception"); - assertThat(ed.getExceptions().get(0).getMessage()).isEqualTo("Fake Exception"); - assertThat(ed.getSeverityLevel()).isEqualTo(SeverityLevel.ERROR); - assertThat(ed.getProperties()) - .containsEntry("Logger Message", "This is an exception!") - .containsEntry("SourceType", "Logger") - .containsEntry("LoggerName", "smoketestapp") - .containsKey("ThreadName") - .containsEntry("MDC key", "MDC value"); - if (!isWildflyServer()) { - assertThat(ed.getProperties()) - .containsEntry("FileName", "LogbackWithExceptionServlet.java") - .containsEntry( - "ClassName", - "com.microsoft.applicationinsights.smoketestapp.LogbackWithExceptionServlet") - .containsEntry("MethodName", "doGet") - .containsEntry("LineNumber", "21") - .hasSize(9); - } else { - assertThat(ed.getProperties()).hasSize(5); + testing.waitAndAssertTrace( + trace -> + trace.hasExceptionSatisying( + exception -> + exception + .hasProperty("FileName", "LogbackWithExceptionServlet.java") + .hasProperty( + "ClassName", + "com.microsoft.applicationinsights.smoketestapp.LogbackWithExceptionServlet") + .hasProperty("MethodName", "doGet") + .hasProperty("LineNumber", "21"))); } - - SmokeTestExtension.assertParentChild( - rd, rdEnvelope, edEnvelope, "GET /Logback/testWithException"); } @Environment(TOMCAT_8_JAVA_8) diff --git a/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/ExceptionAssert.java b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/ExceptionAssert.java new file mode 100644 index 00000000000..78a4130db73 --- /dev/null +++ b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/ExceptionAssert.java @@ -0,0 +1,109 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.microsoft.applicationinsights.smoketest; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import com.microsoft.applicationinsights.smoketest.schemav2.Data; +import com.microsoft.applicationinsights.smoketest.schemav2.Envelope; +import com.microsoft.applicationinsights.smoketest.schemav2.ExceptionData; +import com.microsoft.applicationinsights.smoketest.schemav2.SeverityLevel; +import org.assertj.core.api.AbstractAssert; + +public class ExceptionAssert extends AbstractAssert { + + public ExceptionAssert(Envelope envelope) { + super(envelope, ExceptionAssert.class); + } + + @CanIgnoreReturnValue + public ExceptionAssert hasExceptionTypeName(String typeName) { + isNotNull(); + assertThat(getExceptionData().getExceptions().get(0).getTypeName()).isEqualTo(typeName); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasExceptionMessage(String message) { + isNotNull(); + assertThat(getExceptionData().getExceptions().get(0).getMessage()).isEqualTo(message); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasSeverityLevel(SeverityLevel severityLevel) { + isNotNull(); + assertThat(getExceptionData().getSeverityLevel()).isEqualTo(severityLevel); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasProperty(String key, String value) { + isNotNull(); + assertThat(getExceptionData().getProperties()).containsEntry(key, value); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert containsProperty(String key) { + isNotNull(); + assertThat(getExceptionData().getProperties()).containsKey(key); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasPropertiesSize(int size) { + isNotNull(); + assertThat(getExceptionData().getProperties()).hasSize(size); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasEmptyProperties() { + isNotNull(); + assertThat(getExceptionData().getProperties()).isEmpty(); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasTag(String key, String value) { + isNotNull(); + assertThat(actual.getTags()).containsEntry(key, value); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasNoParent() { + isNotNull(); + assertThat(actual.getTags()).doesNotContainKey("ai.operation.parentId"); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasParent(String parentId) { + isNotNull(); + assertThat(actual.getTags()).containsEntry("ai.operation.parentId", parentId); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasNoSampleRate() { + isNotNull(); + assertThat(actual.getSampleRate()).isNull(); + return this; + } + + @CanIgnoreReturnValue + public ExceptionAssert hasSampleRate(Float expectedSampleRate) { + isNotNull(); + assertThat(actual.getSampleRate()).isEqualTo(expectedSampleRate); + return this; + } + + private ExceptionData getExceptionData() { + Data data = (Data) actual.getData(); + return (ExceptionData) data.getBaseData(); + } +} diff --git a/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/MessageAssert.java b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/MessageAssert.java new file mode 100644 index 00000000000..a8042e64d04 --- /dev/null +++ b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/MessageAssert.java @@ -0,0 +1,95 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.microsoft.applicationinsights.smoketest; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import com.microsoft.applicationinsights.smoketest.schemav2.Data; +import com.microsoft.applicationinsights.smoketest.schemav2.Envelope; +import com.microsoft.applicationinsights.smoketest.schemav2.MessageData; +import com.microsoft.applicationinsights.smoketest.schemav2.SeverityLevel; +import org.assertj.core.api.AbstractAssert; + +public class MessageAssert extends AbstractAssert { + + public MessageAssert(Envelope envelope) { + super(envelope, MessageAssert.class); + } + + @CanIgnoreReturnValue + public MessageAssert hasMessage(String message) { + isNotNull(); + assertThat(getMessageData().getMessage()).isEqualTo(message); + return this; + } + + @CanIgnoreReturnValue + public MessageAssert hasSeverityLevel(SeverityLevel severityLevel) { + isNotNull(); + assertThat(getMessageData().getSeverityLevel()).isEqualTo(severityLevel); + return this; + } + + @CanIgnoreReturnValue + public MessageAssert hasProperty(String key, String value) { + isNotNull(); + assertThat(getMessageData().getProperties()).containsEntry(key, value); + return this; + } + + @CanIgnoreReturnValue + public MessageAssert containsProperty(String key) { + isNotNull(); + assertThat(getMessageData().getProperties()).containsKey(key); + return this; + } + + @CanIgnoreReturnValue + public MessageAssert hasPropertiesSize(int size) { + isNotNull(); + assertThat(getMessageData().getProperties()).hasSize(size); + return this; + } + + @CanIgnoreReturnValue + public MessageAssert hasTag(String key, String value) { + isNotNull(); + assertThat(actual.getTags()).containsEntry(key, value); + return this; + } + + @CanIgnoreReturnValue + public MessageAssert hasNoParent() { + isNotNull(); + assertThat(actual.getTags()).doesNotContainKey("ai.operation.parentId"); + return this; + } + + @CanIgnoreReturnValue + public MessageAssert hasParent(String parentId) { + isNotNull(); + assertThat(actual.getTags()).containsEntry("ai.operation.parentId", parentId); + return this; + } + + @CanIgnoreReturnValue + public MessageAssert hasNoSampleRate() { + isNotNull(); + assertThat(actual.getSampleRate()).isNull(); + return this; + } + + @CanIgnoreReturnValue + public MessageAssert hasSampleRate(Float expectedSampleRate) { + isNotNull(); + assertThat(actual.getSampleRate()).isEqualTo(expectedSampleRate); + return this; + } + + private MessageData getMessageData() { + Data data = (Data) actual.getData(); + return (MessageData) data.getBaseData(); + } +} diff --git a/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/TraceAssert.java b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/TraceAssert.java index 776d19abaab..ba5f5c9593c 100644 --- a/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/TraceAssert.java +++ b/smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/TraceAssert.java @@ -21,6 +21,7 @@ public class TraceAssert { private final List requests; private final List dependencies; private final List messages; + private final List exceptions; public TraceAssert(List trace) { @@ -42,6 +43,10 @@ public TraceAssert(List trace) { sorted.stream() .filter(envelope -> envelope.getData().getBaseType().equals("MessageData")) .collect(toList()); + exceptions = + sorted.stream() + .filter(envelope -> envelope.getData().getBaseType().equals("ExceptionData")) + .collect(toList()); } @CanIgnoreReturnValue @@ -63,6 +68,24 @@ public TraceAssert hasMessageCount(int count) { return this; } + @CanIgnoreReturnValue + public TraceAssert hasMessageSatisying(Consumer assertion) { + assertThat(messages).anySatisfy(envelope -> assertion.accept(new MessageAssert(envelope))); + return this; + } + + @CanIgnoreReturnValue + public TraceAssert hasExceptionCount(int count) { + assertThat(exceptions).hasSize(count); + return this; + } + + @CanIgnoreReturnValue + public TraceAssert hasExceptionSatisying(Consumer assertion) { + assertThat(exceptions).anySatisfy(envelope -> assertion.accept(new ExceptionAssert(envelope))); + return this; + } + public String getRequestId(int index) { Data data = (Data) requests.get(index).getData(); return ((RequestData) data.getBaseData()).getId();