Skip to content

Commit c9bd74e

Browse files
Copilottrask
andcommitted
Extend assertion framework with MessageAssert and ExceptionAssert, update Logback smoke tests
Co-authored-by: trask <218610+trask@users.noreply.github.com>
1 parent 855ffbb commit c9bd74e

6 files changed

Lines changed: 364 additions & 177 deletions

File tree

smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackDisabledTest.java

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,7 @@
44
package com.microsoft.applicationinsights.smoketest;
55

66
import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_8;
7-
import static org.assertj.core.api.Assertions.assertThat;
87

9-
import com.microsoft.applicationinsights.smoketest.schemav2.Data;
10-
import com.microsoft.applicationinsights.smoketest.schemav2.Envelope;
11-
import com.microsoft.applicationinsights.smoketest.schemav2.ExceptionData;
12-
import com.microsoft.applicationinsights.smoketest.schemav2.RequestData;
13-
import java.util.List;
148
import org.junit.jupiter.api.Test;
159
import org.junit.jupiter.api.extension.RegisterExtension;
1610

@@ -23,39 +17,30 @@ class LogbackDisabledTest {
2317
@Test
2418
@TargetUri("/test")
2519
void testDisabled() throws Exception {
26-
List<Envelope> rdList = testing.mockedIngestion.waitForItems("RequestData", 1);
27-
28-
Envelope rdEnvelope = rdList.get(0);
29-
RequestData rd = (RequestData) ((Data<?>) rdEnvelope.getData()).getBaseData();
30-
assertThat(rd.getName()).isEqualTo("GET /Logback/test");
31-
32-
assertThat(testing.mockedIngestion.getCountForType("MessageData")).isZero();
20+
testing.waitAndAssertTrace(
21+
trace ->
22+
trace
23+
.hasRequestSatisying(request -> request.hasName("GET /Logback/test"))
24+
.hasMessageCount(0));
3325
}
3426

3527
@Test
3628
@TargetUri("/testWithSpanException")
3729
void testWithSpanException() throws Exception {
38-
List<Envelope> rdList = testing.mockedIngestion.waitForItems("RequestData", 1);
39-
40-
Envelope rdEnvelope = rdList.get(0);
41-
RequestData rd = (RequestData) ((Data<?>) rdEnvelope.getData()).getBaseData();
42-
assertThat(rd.getName()).isEqualTo("GET /Logback/testWithSpanException");
43-
44-
assertThat(testing.mockedIngestion.getCountForType("MessageData")).isZero();
45-
46-
// check that span exception is still captured
47-
String operationId = rdEnvelope.getTags().get("ai.operation.id");
48-
List<Envelope> edList =
49-
testing.mockedIngestion.waitForItemsInOperation("ExceptionData", 1, operationId);
50-
51-
Envelope edEnvelope = edList.get(0);
52-
ExceptionData ed = (ExceptionData) ((Data<?>) edEnvelope.getData()).getBaseData();
53-
54-
assertThat(ed.getExceptions().get(0).getTypeName()).isEqualTo("java.lang.RuntimeException");
55-
assertThat(ed.getExceptions().get(0).getMessage()).isEqualTo("Test Exception");
56-
assertThat(ed.getProperties()).isEmpty(); // this is not a logger-based exception
57-
58-
SmokeTestExtension.assertParentChild(
59-
rd, rdEnvelope, edEnvelope, "GET /Logback/testWithSpanException");
30+
testing.waitAndAssertTrace(
31+
trace ->
32+
trace
33+
.hasRequestSatisying(
34+
request -> request.hasName("GET /Logback/testWithSpanException"))
35+
.hasMessageCount(0)
36+
.hasExceptionCount(1)
37+
.hasExceptionSatisying(
38+
exception ->
39+
exception
40+
.hasExceptionTypeName("java.lang.RuntimeException")
41+
.hasExceptionMessage("Test Exception")
42+
.hasEmptyProperties()
43+
.hasParent(trace.getRequestId(0))
44+
.hasTag("ai.operation.name", "GET /Logback/testWithSpanException")));
6045
}
6146
}

smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackLevelOffTest.java

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,7 @@
44
package com.microsoft.applicationinsights.smoketest;
55

66
import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.TOMCAT_8_JAVA_8;
7-
import static org.assertj.core.api.Assertions.assertThat;
87

9-
import com.microsoft.applicationinsights.smoketest.schemav2.Data;
10-
import com.microsoft.applicationinsights.smoketest.schemav2.Envelope;
11-
import com.microsoft.applicationinsights.smoketest.schemav2.ExceptionData;
12-
import com.microsoft.applicationinsights.smoketest.schemav2.RequestData;
13-
import java.util.List;
148
import org.junit.jupiter.api.Test;
159
import org.junit.jupiter.api.extension.RegisterExtension;
1610

@@ -23,39 +17,30 @@ class LogbackLevelOffTest {
2317
@Test
2418
@TargetUri("/test")
2519
void testDisabled() throws Exception {
26-
List<Envelope> rdList = testing.mockedIngestion.waitForItems("RequestData", 1);
27-
28-
Envelope rdEnvelope = rdList.get(0);
29-
RequestData rd = (RequestData) ((Data<?>) rdEnvelope.getData()).getBaseData();
30-
assertThat(rd.getName()).isEqualTo("GET /Logback/test");
31-
32-
assertThat(testing.mockedIngestion.getCountForType("MessageData")).isZero();
20+
testing.waitAndAssertTrace(
21+
trace ->
22+
trace
23+
.hasRequestSatisying(request -> request.hasName("GET /Logback/test"))
24+
.hasMessageCount(0));
3325
}
3426

3527
@Test
3628
@TargetUri("/testWithSpanException")
3729
void testWithSpanException() throws Exception {
38-
List<Envelope> rdList = testing.mockedIngestion.waitForItems("RequestData", 1);
39-
40-
Envelope rdEnvelope = rdList.get(0);
41-
RequestData rd = (RequestData) ((Data<?>) rdEnvelope.getData()).getBaseData();
42-
assertThat(rd.getName()).isEqualTo("GET /Logback/testWithSpanException");
43-
44-
assertThat(testing.mockedIngestion.getCountForType("MessageData")).isZero();
45-
46-
// check that span exception is still captured
47-
String operationId = rdEnvelope.getTags().get("ai.operation.id");
48-
List<Envelope> edList =
49-
testing.mockedIngestion.waitForItemsInOperation("ExceptionData", 1, operationId);
50-
51-
Envelope edEnvelope = edList.get(0);
52-
ExceptionData ed = (ExceptionData) ((Data<?>) edEnvelope.getData()).getBaseData();
53-
54-
assertThat(ed.getExceptions().get(0).getTypeName()).isEqualTo("java.lang.RuntimeException");
55-
assertThat(ed.getExceptions().get(0).getMessage()).isEqualTo("Test Exception");
56-
assertThat(ed.getProperties()).isEmpty(); // this is not a logger-based exception
57-
58-
SmokeTestExtension.assertParentChild(
59-
rd, rdEnvelope, edEnvelope, "GET /Logback/testWithSpanException");
30+
testing.waitAndAssertTrace(
31+
trace ->
32+
trace
33+
.hasRequestSatisying(
34+
request -> request.hasName("GET /Logback/testWithSpanException"))
35+
.hasMessageCount(0)
36+
.hasExceptionCount(1)
37+
.hasExceptionSatisying(
38+
exception ->
39+
exception
40+
.hasExceptionTypeName("java.lang.RuntimeException")
41+
.hasExceptionMessage("Test Exception")
42+
.hasEmptyProperties()
43+
.hasParent(trace.getRequestId(0))
44+
.hasTag("ai.operation.name", "GET /Logback/testWithSpanException")));
6045
}
6146
}

smoke-tests/apps/Logback/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LogbackTest.java

Lines changed: 97 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,7 @@
1717
import static com.microsoft.applicationinsights.smoketest.EnvironmentValue.WILDFLY_13_JAVA_8_OPENJ9;
1818
import static org.assertj.core.api.Assertions.assertThat;
1919

20-
import com.microsoft.applicationinsights.smoketest.schemav2.Data;
21-
import com.microsoft.applicationinsights.smoketest.schemav2.Envelope;
22-
import com.microsoft.applicationinsights.smoketest.schemav2.ExceptionData;
23-
import com.microsoft.applicationinsights.smoketest.schemav2.MessageData;
24-
import com.microsoft.applicationinsights.smoketest.schemav2.RequestData;
2520
import com.microsoft.applicationinsights.smoketest.schemav2.SeverityLevel;
26-
import java.util.Comparator;
27-
import java.util.List;
2821
import org.junit.jupiter.api.Test;
2922
import org.junit.jupiter.api.extension.RegisterExtension;
3023

@@ -43,119 +36,116 @@ boolean isWildflyServer() {
4336
@Test
4437
@TargetUri("/test")
4538
void test() throws Exception {
46-
List<Envelope> rdList = testing.mockedIngestion.waitForItems("RequestData", 1);
47-
48-
Envelope rdEnvelope = rdList.get(0);
49-
String operationId = rdEnvelope.getTags().get("ai.operation.id");
50-
List<Envelope> mdList = testing.mockedIngestion.waitForMessageItemsInRequest(3, operationId);
51-
52-
Envelope mdEnvelope1 = mdList.get(0);
53-
Envelope mdEnvelope2 = mdList.get(1);
54-
55-
assertThat(rdEnvelope.getSampleRate()).isNull();
56-
assertThat(mdEnvelope1.getSampleRate()).isNull();
57-
assertThat(mdEnvelope2.getSampleRate()).isNull();
58-
59-
RequestData rd = (RequestData) ((Data<?>) rdEnvelope.getData()).getBaseData();
60-
61-
List<MessageData> logs = testing.mockedIngestion.getMessageDataInRequest(3);
62-
logs.sort(Comparator.comparing(MessageData::getSeverityLevel));
63-
64-
MessageData md1 = logs.get(0);
65-
MessageData md2 = logs.get(1);
66-
MessageData md3 = logs.get(2);
67-
68-
assertThat(md1.getMessage()).isEqualTo("This is logback warn.");
69-
assertThat(md1.getSeverityLevel()).isEqualTo(SeverityLevel.WARNING);
70-
assertThat(md1.getProperties())
71-
.containsEntry("SourceType", "Logger")
72-
.containsEntry("LoggerName", "smoketestapp")
73-
.containsKey("ThreadName")
74-
.containsEntry("MDC key", "MDC value");
75-
76-
if (!isWildflyServer()) {
77-
assertThat(md1.getProperties())
78-
.containsEntry("FileName", "LogbackServlet.java")
79-
.containsEntry(
80-
"ClassName", "com.microsoft.applicationinsights.smoketestapp.LogbackServlet")
81-
.containsEntry("MethodName", "doGet")
82-
.containsEntry("LineNumber", "26")
83-
.hasSize(8);
84-
} else {
85-
assertThat(md1.getProperties()).hasSize(4);
86-
}
87-
88-
assertThat(md2.getMessage()).isEqualTo("This is logback error.");
89-
assertThat(md2.getSeverityLevel()).isEqualTo(SeverityLevel.ERROR);
90-
assertThat(md2.getProperties())
91-
.containsEntry("SourceType", "Logger")
92-
.containsEntry("LoggerName", "smoketestapp")
93-
.containsKey("ThreadName");
39+
testing.waitAndAssertTrace(
40+
trace ->
41+
trace
42+
.hasRequestSatisying(
43+
request ->
44+
request
45+
.hasName("GET /Logback/test")
46+
.hasNoSampleRate()
47+
.hasTag("ai.operation.name", "GET /Logback/test")
48+
.hasNoParent())
49+
.hasMessageCount(3)
50+
.hasMessageSatisying(
51+
message ->
52+
message
53+
.hasMessage("This is logback warn.")
54+
.hasSeverityLevel(SeverityLevel.WARNING)
55+
.hasProperty("SourceType", "Logger")
56+
.hasProperty("LoggerName", "smoketestapp")
57+
.containsProperty("ThreadName")
58+
.hasProperty("MDC key", "MDC value")
59+
.hasParent(trace.getRequestId(0))
60+
.hasNoSampleRate()
61+
.hasTag("ai.operation.name", "GET /Logback/test")
62+
.hasPropertiesSize(isWildflyServer() ? 4 : 8))
63+
.hasMessageSatisying(
64+
message ->
65+
message
66+
.hasMessage("This is logback error.")
67+
.hasSeverityLevel(SeverityLevel.ERROR)
68+
.hasProperty("SourceType", "Logger")
69+
.hasProperty("LoggerName", "smoketestapp")
70+
.containsProperty("ThreadName")
71+
.hasParent(trace.getRequestId(0))
72+
.hasNoSampleRate()
73+
.hasTag("ai.operation.name", "GET /Logback/test")
74+
.hasPropertiesSize(isWildflyServer() ? 3 : 7)));
9475

9576
if (!isWildflyServer()) {
96-
assertThat(md2.getProperties())
97-
.containsEntry("FileName", "LogbackServlet.java")
98-
.containsEntry(
99-
"ClassName", "com.microsoft.applicationinsights.smoketestapp.LogbackServlet")
100-
.containsEntry("MethodName", "doGet")
101-
.containsEntry("LineNumber", "28")
102-
.hasSize(7);
103-
} else {
104-
assertThat(md2.getProperties()).hasSize(3);
77+
testing.waitAndAssertTrace(
78+
trace ->
79+
trace
80+
.hasMessageSatisying(
81+
message ->
82+
message
83+
.hasMessage("This is logback warn.")
84+
.hasProperty("FileName", "LogbackServlet.java")
85+
.hasProperty(
86+
"ClassName",
87+
"com.microsoft.applicationinsights.smoketestapp.LogbackServlet")
88+
.hasProperty("MethodName", "doGet")
89+
.hasProperty("LineNumber", "26"))
90+
.hasMessageSatisying(
91+
message ->
92+
message
93+
.hasMessage("This is logback error.")
94+
.hasProperty("FileName", "LogbackServlet.java")
95+
.hasProperty(
96+
"ClassName",
97+
"com.microsoft.applicationinsights.smoketestapp.LogbackServlet")
98+
.hasProperty("MethodName", "doGet")
99+
.hasProperty("LineNumber", "28"))
100+
.hasMessageSatisying(message -> message.hasProperty("Marker", "aMarker")));
105101
}
106-
107-
if (!isWildflyServer()) {
108-
assertThat(md3.getProperties()).containsEntry("Marker", "aMarker");
109-
}
110-
111-
SmokeTestExtension.assertParentChild(rd, rdEnvelope, mdEnvelope1, "GET /Logback/test");
112-
SmokeTestExtension.assertParentChild(rd, rdEnvelope, mdEnvelope2, "GET /Logback/test");
113102
}
114103

115104
@Test
116105
@TargetUri("/testWithException")
117106
void testWithException() throws Exception {
118-
List<Envelope> rdList = testing.mockedIngestion.waitForItems("RequestData", 1);
107+
testing.waitAndAssertTrace(
108+
trace ->
109+
trace
110+
.hasRequestSatisying(
111+
request ->
112+
request
113+
.hasName("GET /Logback/testWithException")
114+
.hasNoSampleRate()
115+
.hasTag("ai.operation.name", "GET /Logback/testWithException")
116+
.hasNoParent())
117+
.hasExceptionCount(1)
118+
.hasExceptionSatisying(
119+
exception ->
120+
exception
121+
.hasExceptionTypeName("java.lang.Exception")
122+
.hasExceptionMessage("Fake Exception")
123+
.hasSeverityLevel(SeverityLevel.ERROR)
124+
.hasProperty("Logger Message", "This is an exception!")
125+
.hasProperty("SourceType", "Logger")
126+
.hasProperty("LoggerName", "smoketestapp")
127+
.containsProperty("ThreadName")
128+
.hasProperty("MDC key", "MDC value")
129+
.hasParent(trace.getRequestId(0))
130+
.hasNoSampleRate()
131+
.hasTag("ai.operation.name", "GET /Logback/testWithException")
132+
.hasPropertiesSize(isWildflyServer() ? 5 : 9)));
119133

120-
Envelope rdEnvelope = rdList.get(0);
121-
String operationId = rdEnvelope.getTags().get("ai.operation.id");
122-
List<Envelope> edList =
123-
testing.mockedIngestion.waitForItemsInOperation("ExceptionData", 1, operationId);
124134
assertThat(testing.mockedIngestion.getCountForType("EventData")).isZero();
125135

126-
Envelope edEnvelope = edList.get(0);
127-
128-
assertThat(rdEnvelope.getSampleRate()).isNull();
129-
assertThat(edEnvelope.getSampleRate()).isNull();
130-
131-
RequestData rd = (RequestData) ((Data<?>) rdEnvelope.getData()).getBaseData();
132-
ExceptionData ed = (ExceptionData) ((Data<?>) edEnvelope.getData()).getBaseData();
133-
134-
assertThat(ed.getExceptions().get(0).getTypeName()).isEqualTo("java.lang.Exception");
135-
assertThat(ed.getExceptions().get(0).getMessage()).isEqualTo("Fake Exception");
136-
assertThat(ed.getSeverityLevel()).isEqualTo(SeverityLevel.ERROR);
137-
assertThat(ed.getProperties())
138-
.containsEntry("Logger Message", "This is an exception!")
139-
.containsEntry("SourceType", "Logger")
140-
.containsEntry("LoggerName", "smoketestapp")
141-
.containsKey("ThreadName")
142-
.containsEntry("MDC key", "MDC value");
143-
144136
if (!isWildflyServer()) {
145-
assertThat(ed.getProperties())
146-
.containsEntry("FileName", "LogbackWithExceptionServlet.java")
147-
.containsEntry(
148-
"ClassName",
149-
"com.microsoft.applicationinsights.smoketestapp.LogbackWithExceptionServlet")
150-
.containsEntry("MethodName", "doGet")
151-
.containsEntry("LineNumber", "21")
152-
.hasSize(9);
153-
} else {
154-
assertThat(ed.getProperties()).hasSize(5);
137+
testing.waitAndAssertTrace(
138+
trace ->
139+
trace.hasExceptionSatisying(
140+
exception ->
141+
exception
142+
.hasProperty("FileName", "LogbackWithExceptionServlet.java")
143+
.hasProperty(
144+
"ClassName",
145+
"com.microsoft.applicationinsights.smoketestapp.LogbackWithExceptionServlet")
146+
.hasProperty("MethodName", "doGet")
147+
.hasProperty("LineNumber", "21")));
155148
}
156-
157-
SmokeTestExtension.assertParentChild(
158-
rd, rdEnvelope, edEnvelope, "GET /Logback/testWithException");
159149
}
160150

161151
@Environment(TOMCAT_8_JAVA_8)

0 commit comments

Comments
 (0)