Skip to content

Commit 3c65f76

Browse files
authored
Merge pull request #1034 from microsoft/trask/validate-operation-id
Validate remote dependency operation id
2 parents 9dbc2b6 + 5cf98a6 commit 3c65f76

File tree

4 files changed

+422
-148
lines changed

4 files changed

+422
-148
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,48 @@
11
package com.microsoft.applicationinsights.smoketest;
22

3+
import java.util.List;
4+
5+
import com.microsoft.applicationinsights.internal.schemav2.Data;
6+
import com.microsoft.applicationinsights.internal.schemav2.Envelope;
7+
import com.microsoft.applicationinsights.internal.schemav2.RemoteDependencyData;
8+
import com.microsoft.applicationinsights.internal.schemav2.RequestData;
39
import org.junit.*;
410

11+
import static org.hamcrest.Matchers.hasSize;
512
import static org.junit.Assert.*;
613

714
@UseAgent
815
@WithDependencyContainers(@DependencyContainer(value="redis", portMapping="6379"))
916
public class SampleTestWithDependencyContainer extends AiSmokeTest {
1017

11-
// TODO FIXME this is a sample test for dependencies. it shouldn't count towards test coverage
1218
@Test
1319
@TargetUri("/index.jsp")
14-
public void doCalcSendsRequestDataAndMetricData() throws Exception {
15-
assertTrue("mocked ingestion has no data", mockedIngestion.hasData());
16-
assertTrue("mocked ingestion has 0 items", mockedIngestion.getItemCount() > 0);
20+
public void doCalcSendsRequestDataAndMetricData() {
21+
List<Envelope> rdList = mockedIngestion.getItemsEnvelopeDataType("RequestData");
22+
List<Envelope> rddList = mockedIngestion.getItemsEnvelopeDataType("RemoteDependencyData");
23+
24+
assertThat(rdList, hasSize(1));
25+
assertThat(rddList, hasSize(1));
26+
27+
Envelope rdEnvelope = rdList.get(0);
28+
Envelope rddEnvelope = rddList.get(0);
29+
30+
RemoteDependencyData rdd = (RemoteDependencyData) ((Data) rddEnvelope.getData()).getBaseData();
31+
32+
assertEquals("Redis", rdd.getType());
33+
assertTrue(rdd.getSuccess());
34+
35+
assertSameOperationId(rdEnvelope, rddEnvelope);
36+
}
37+
38+
private static void assertSameOperationId(Envelope rdEnvelope, Envelope rddEnvelope) {
39+
String operationId = rdEnvelope.getTags().get("ai.operation.id");
40+
String operationParentId = rdEnvelope.getTags().get("ai.operation.parentId");
41+
42+
assertNotNull(operationId);
43+
assertNotNull(operationParentId);
1744

18-
assertEquals(1, mockedIngestion.getCountForType("RequestData"));
19-
assertEquals(1, mockedIngestion.getCountForType("RemoteDependencyData"));
45+
assertEquals(operationId, rddEnvelope.getTags().get("ai.operation.id"));
46+
assertEquals(operationParentId, rddEnvelope.getTags().get("ai.operation.parentId"));
2047
}
2148
}

test/smoke/testApps/SpringBootTest/src/smokeTest/java/com/springbootstartertest/smoketest/CustomInstrumentationTest.java

Lines changed: 151 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.util.List;
44

5+
import com.microsoft.applicationinsights.internal.schemav2.Data;
6+
import com.microsoft.applicationinsights.internal.schemav2.Envelope;
57
import com.microsoft.applicationinsights.internal.schemav2.ExceptionData;
68
import com.microsoft.applicationinsights.internal.schemav2.ExceptionDetails;
79
import com.microsoft.applicationinsights.internal.schemav2.RemoteDependencyData;
@@ -11,162 +13,263 @@
1113
import com.microsoft.applicationinsights.smoketest.UseAgent;
1214
import org.junit.Test;
1315

16+
import static org.hamcrest.Matchers.hasSize;
1417
import static org.junit.Assert.assertEquals;
1518
import static org.junit.Assert.assertNotNull;
16-
import static org.junit.Assert.assertTrue;
19+
import static org.junit.Assert.assertThat;
1720

1821
@UseAgent("CustomInstrumentation")
1922
public class CustomInstrumentationTest extends AiSmokeTest {
2023

2124
@Test
2225
@TargetUri("/customInstrumentationOne")
2326
public void customInstrumentationOne() {
24-
assertEquals(1, mockedIngestion.getCountForType("RequestData"));
25-
assertEquals(1, mockedIngestion.getCountForType("RemoteDependencyData"));
26-
RemoteDependencyData rdd = getTelemetryDataForType(0, "RemoteDependencyData");
27+
List<Envelope> rdList = mockedIngestion.getItemsEnvelopeDataType("RequestData");
28+
List<Envelope> rddList = mockedIngestion.getItemsEnvelopeDataType("RemoteDependencyData");
29+
30+
assertThat(rdList, hasSize(1));
31+
assertThat(rddList, hasSize(1));
32+
33+
Envelope rdEnvelope = rdList.get(0);
34+
Envelope rddEnvelope = rddList.get(0);
35+
36+
RemoteDependencyData rdd = (RemoteDependencyData) ((Data) rddEnvelope.getData()).getBaseData();
37+
2738
assertEquals(rdd.getName(), "com/springbootstartertest/controller/TargetObject.one");
2839
assertEquals(rdd.getType(), "OTHER");
2940
assertEquals(rdd.getSuccess(), true);
41+
42+
assertSameOperationId(rdEnvelope, rddEnvelope);
3043
}
3144

3245
@Test
3346
@TargetUri("/customInstrumentationTwo")
3447
public void customInstrumentationTwo() {
35-
assertEquals(1, mockedIngestion.getCountForType("RequestData"));
36-
assertEquals(1, mockedIngestion.getCountForType("RemoteDependencyData"));
37-
RemoteDependencyData rdd = getTelemetryDataForType(0, "RemoteDependencyData");
48+
List<Envelope> rdList = mockedIngestion.getItemsEnvelopeDataType("RequestData");
49+
List<Envelope> rddList = mockedIngestion.getItemsEnvelopeDataType("RemoteDependencyData");
50+
51+
assertThat(rdList, hasSize(1));
52+
assertThat(rddList, hasSize(1));
53+
54+
Envelope rdEnvelope = rdList.get(0);
55+
Envelope rddEnvelope = rddList.get(0);
56+
57+
RemoteDependencyData rdd = (RemoteDependencyData) ((Data) rddEnvelope.getData()).getBaseData();
58+
3859
assertEquals(rdd.getName(), "com/springbootstartertest/controller/TargetObject.two");
3960
assertEquals(rdd.getType(), "OTHER");
4061
assertEquals(rdd.getSuccess(), true);
62+
63+
assertSameOperationId(rdEnvelope, rddEnvelope);
4164
}
4265

4366
@Test
4467
@TargetUri("/customInstrumentationThree")
4568
public void customInstrumentationThree() {
46-
assertEquals(1, mockedIngestion.getCountForType("RequestData"));
47-
assertEquals(1, mockedIngestion.getCountForType("RemoteDependencyData"));
69+
List<Envelope> rdList = mockedIngestion.getItemsEnvelopeDataType("RequestData");
70+
List<Envelope> rddList = mockedIngestion.getItemsEnvelopeDataType("RemoteDependencyData");
71+
List<Envelope> edList = mockedIngestion.getItemsEnvelopeDataType("ExceptionData");
72+
73+
assertThat(rdList, hasSize(1));
74+
assertThat(rddList, hasSize(1));
75+
assertThat(edList, hasSize(1));
76+
77+
Envelope rdEnvelope = rdList.get(0);
78+
Envelope rddEnvelope = rddList.get(0);
79+
Envelope edEnvelope = edList.get(0);
80+
81+
RemoteDependencyData rdd = (RemoteDependencyData) ((Data) rddEnvelope.getData()).getBaseData();
82+
ExceptionData ed = (ExceptionData) ((Data) edEnvelope.getData()).getBaseData();
83+
4884
assertEquals(1, mockedIngestion.getCountForType("ExceptionData"));
49-
RemoteDependencyData rdd = getTelemetryDataForType(0, "RemoteDependencyData");
5085
assertEquals(rdd.getName(), "com/springbootstartertest/controller/TargetObject.three");
5186
assertEquals(rdd.getType(), "OTHER");
5287
assertEquals(rdd.getSuccess(), false);
53-
ExceptionData exceptionData = getTelemetryDataForType(0, "ExceptionData");
54-
List<ExceptionDetails> exceptions = exceptionData.getExceptions();
88+
89+
List<ExceptionDetails> exceptions = ed.getExceptions();
5590
assertEquals(exceptions.size(), 1);
5691
assertEquals(exceptions.get(0).getMessage(), "Three");
92+
93+
assertSameOperationId(rdEnvelope, rddEnvelope);
94+
assertSameOperationId(edEnvelope, rddEnvelope);
5795
}
5896

5997
@Test
6098
@TargetUri("/customInstrumentationFour")
6199
public void customInstrumentationFour() {
62-
assertEquals(1, mockedIngestion.getCountForType("RequestData"));
63-
assertEquals(1, mockedIngestion.getCountForType("RemoteDependencyData"));
64-
RemoteDependencyData rdd = getTelemetryDataForType(0, "RemoteDependencyData");
100+
List<Envelope> rdList = mockedIngestion.getItemsEnvelopeDataType("RequestData");
101+
List<Envelope> rddList = mockedIngestion.getItemsEnvelopeDataType("RemoteDependencyData");
102+
103+
assertThat(rdList, hasSize(1));
104+
assertThat(rddList, hasSize(1));
105+
106+
Envelope rdEnvelope = rdList.get(0);
107+
Envelope rddEnvelope = rddList.get(0);
108+
109+
RemoteDependencyData rdd = (RemoteDependencyData) ((Data) rddEnvelope.getData()).getBaseData();
110+
65111
assertEquals(rdd.getName(), "com/springbootstartertest/controller/TargetObject$NestedObject.four");
66112
assertEquals(rdd.getType(), "OTHER");
67113
assertEquals(rdd.getSuccess(), true);
114+
115+
assertSameOperationId(rdEnvelope, rddEnvelope);
68116
}
69117

70118
@Test
71119
@TargetUri("/customInstrumentationFive")
72120
public void customInstrumentationFive() {
73-
assertEquals(1, mockedIngestion.getCountForType("RequestData"));
74-
assertEquals(4, mockedIngestion.getCountForType("RemoteDependencyData"));
121+
List<Envelope> rdList = mockedIngestion.getItemsEnvelopeDataType("RequestData");
122+
assertThat(rdList, hasSize(1));
123+
Envelope rdEnvelope = rdList.get(0);
124+
RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData();
125+
126+
List<Envelope> rddList = mockedIngestion.getItemsEnvelopeDataType("RemoteDependencyData");
127+
assertThat(rddList, hasSize(4));
128+
Envelope fiveEnvelope = null;
129+
Envelope sixEnvelope = null;
130+
Envelope oneEnvelope = null;
131+
Envelope twoEnvelope = null;
75132
RemoteDependencyData fiveRdd = null;
76133
RemoteDependencyData sixRdd = null;
77134
RemoteDependencyData oneRdd = null;
78135
RemoteDependencyData twoRdd = null;
79-
List<RemoteDependencyData> rdds = mockedIngestion.getTelemetryDataByType("RemoteDependencyData");
80-
for (RemoteDependencyData rdd : rdds) {
81-
if (rdd.getName().endsWith(".five")) {
82-
fiveRdd = rdd;
83-
} else if (rdd.getName().endsWith(".six")) {
84-
sixRdd = rdd;
85-
} else if (rdd.getName().endsWith(".one")) {
86-
oneRdd = rdd;
87-
} else if (rdd.getName().endsWith(".two")) {
88-
twoRdd = rdd;
136+
for (Envelope loopEnvelope : rddList) {
137+
RemoteDependencyData loopData = (RemoteDependencyData) ((Data) loopEnvelope.getData()).getBaseData();
138+
if (loopData.getName().endsWith(".five")) {
139+
fiveEnvelope = loopEnvelope;
140+
fiveRdd = loopData;
141+
} else if (loopData.getName().endsWith(".six")) {
142+
sixEnvelope = loopEnvelope;
143+
sixRdd = loopData;
144+
} else if (loopData.getName().endsWith(".one")) {
145+
oneEnvelope = loopEnvelope;
146+
oneRdd = loopData;
147+
} else if (loopData.getName().endsWith(".two")) {
148+
twoEnvelope = loopEnvelope;
149+
twoRdd = loopData;
89150
} else {
90-
throw new IllegalStateException("Unexpected remote dependency: " + rdd.getName());
151+
throw new IllegalStateException("Unexpected remote dependency: " + loopData.getName());
91152
}
92153
}
93154

94155
assertNotNull(fiveRdd);
95156
assertEquals(fiveRdd.getName(), "com/springbootstartertest/controller/TargetObject.five");
96157
assertEquals(fiveRdd.getType(), "OTHER");
97158
assertEquals(fiveRdd.getSuccess(), true);
159+
assertSameOperationId(rdEnvelope, fiveEnvelope);
98160

99161
assertNotNull(sixRdd);
100162
assertEquals(sixRdd.getName(), "com/springbootstartertest/controller/TargetObject.six");
101163
assertEquals(sixRdd.getType(), "OTHER");
102164
assertEquals(sixRdd.getSuccess(), true);
165+
assertSameOperationId(rdEnvelope, sixEnvelope);
103166

104167
assertNotNull(oneRdd);
105168
assertEquals(oneRdd.getName(), "com/springbootstartertest/controller/TargetObject.one");
106169
assertEquals(oneRdd.getType(), "OTHER");
107170
assertEquals(oneRdd.getSuccess(), true);
171+
assertSameOperationId(rdEnvelope, oneEnvelope);
108172

109173
assertNotNull(twoRdd);
110174
assertEquals(twoRdd.getName(), "com/springbootstartertest/controller/TargetObject.two");
111175
assertEquals(twoRdd.getType(), "OTHER");
112176
assertEquals(twoRdd.getSuccess(), true);
177+
assertSameOperationId(rdEnvelope, twoEnvelope);
113178
}
114179

115180
@Test
116181
@TargetUri("/customInstrumentationSeven")
117182
public void customInstrumentationSeven() {
118-
assertEquals(1, mockedIngestion.getCountForType("RequestData"));
119-
assertEquals(1, mockedIngestion.getCountForType("RemoteDependencyData"));
120-
RemoteDependencyData rdd = getTelemetryDataForType(0, "RemoteDependencyData");
183+
List<Envelope> rdList = mockedIngestion.getItemsEnvelopeDataType("RequestData");
184+
List<Envelope> rddList = mockedIngestion.getItemsEnvelopeDataType("RemoteDependencyData");
185+
186+
assertThat(rdList, hasSize(1));
187+
assertThat(rddList, hasSize(1));
188+
189+
Envelope rdEnvelope = rdList.get(0);
190+
Envelope rddEnvelope = rddList.get(0);
191+
192+
RemoteDependencyData rdd = (RemoteDependencyData) ((Data) rddEnvelope.getData()).getBaseData();
193+
121194
assertEquals(rdd.getName(), "com/springbootstartertest/controller/TargetObject.seven");
122195
assertEquals(rdd.getType(), "OTHER");
123196
assertEquals(rdd.getSuccess(), true);
197+
assertSameOperationId(rdEnvelope, rddEnvelope);
124198
}
125199

126200
@Test
127201
@TargetUri("/customInstrumentationEight")
128202
public void customInstrumentationEight() {
129-
assertEquals(1, mockedIngestion.getCountForType("RequestData"));
130-
assertEquals(2, mockedIngestion.getCountForType("RemoteDependencyData"));
131-
RemoteDependencyData rdd1 = getTelemetryDataForType(0, "RemoteDependencyData");
132-
RemoteDependencyData rdd2 = getTelemetryDataForType(1, "RemoteDependencyData");
203+
List<Envelope> rdList = mockedIngestion.getItemsEnvelopeDataType("RequestData");
204+
List<Envelope> rddList = mockedIngestion.getItemsEnvelopeDataType("RemoteDependencyData");
205+
206+
assertThat(rdList, hasSize(1));
207+
assertThat(rddList, hasSize(2));
208+
209+
Envelope rdEnvelope = rdList.get(0);
210+
Envelope rddEnvelope1 = rddList.get(0);
211+
Envelope rddEnvelope2 = rddList.get(1);
212+
213+
RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData();
214+
RemoteDependencyData rdd1 = (RemoteDependencyData) ((Data) rddEnvelope1.getData()).getBaseData();
215+
RemoteDependencyData rdd2 = (RemoteDependencyData) ((Data) rddEnvelope2.getData()).getBaseData();
133216

134217
assertEquals(rdd1.getName(), "com/springbootstartertest/controller/TargetObject.eight");
135218
assertEquals(rdd1.getType(), "OTHER");
136219
assertEquals(rdd1.getSuccess(), true);
220+
assertSameOperationId(rdEnvelope, rddEnvelope1);
137221

138222
assertEquals(rdd2.getName(), "com/springbootstartertest/controller/TargetObject.eight");
139223
assertEquals(rdd2.getType(), "OTHER");
140224
assertEquals(rdd2.getSuccess(), true);
225+
assertSameOperationId(rdEnvelope, rddEnvelope2);
141226
}
142227

143228
@Test
144229
@TargetUri("/customInstrumentationNine")
145230
public void customInstrumentationNine() {
146-
assertEquals(1, mockedIngestion.getCountForType("RequestData"));
147-
assertEquals(2, mockedIngestion.getCountForType("RemoteDependencyData"));
148-
RequestData d = getTelemetryDataForType(0, "RequestData");
231+
List<Envelope> rdList = mockedIngestion.getItemsEnvelopeDataType("RequestData");
232+
assertThat(rdList, hasSize(1));
233+
Envelope rdEnvelope = rdList.get(0);
234+
RequestData rd = (RequestData) ((Data) rdEnvelope.getData()).getBaseData();
235+
236+
List<Envelope> rddList = mockedIngestion.getItemsEnvelopeDataType("RemoteDependencyData");
237+
assertThat(rddList, hasSize(2));
238+
Envelope nineEnvelope = null;
239+
Envelope httpEnvelope = null;
149240
RemoteDependencyData nineRdd = null;
150241
RemoteDependencyData httpRdd = null;
151-
List<RemoteDependencyData> rdds = mockedIngestion.getTelemetryDataByType("RemoteDependencyData");
152-
for (RemoteDependencyData rdd : rdds) {
153-
if (rdd.getType().equals("OTHER")) {
154-
nineRdd = rdd;
155-
} else if (rdd.getType().equals("Http (tracked component)")) {
156-
httpRdd = rdd;
242+
for (Envelope loopEnvelope : rddList) {
243+
RemoteDependencyData loopData = (RemoteDependencyData) ((Data) loopEnvelope.getData()).getBaseData();
244+
if (loopData.getType().equals("OTHER")) {
245+
nineEnvelope = loopEnvelope;
246+
nineRdd = loopData;
247+
} else if (loopData.getType().equals("Http (tracked component)")) {
248+
httpEnvelope = loopEnvelope;
249+
httpRdd = loopData;
157250
} else {
158-
throw new IllegalStateException("Unexpected remote dependency type: " + rdd.getType());
251+
throw new IllegalStateException("Unexpected remote dependency type: " + loopData.getType());
159252
}
160253
}
161254

162255
assertNotNull(nineRdd);
163256
assertEquals(nineRdd.getName(), "com/springbootstartertest/controller/TargetObject.nine");
164257
assertEquals(nineRdd.getType(), "OTHER");
165258
assertEquals(nineRdd.getSuccess(), true);
259+
assertSameOperationId(rdEnvelope, nineEnvelope);
166260

167261
assertNotNull(httpRdd);
168-
String requestOperationId = d.getId();
169-
String rddId = httpRdd.getId();
170-
assertTrue(rddId.contains(requestOperationId));
262+
assertSameOperationId(rdEnvelope, httpEnvelope);
263+
}
264+
265+
private static void assertSameOperationId(Envelope rdEnvelope, Envelope rddEnvelope) {
266+
String operationId = rdEnvelope.getTags().get("ai.operation.id");
267+
String operationParentId = rdEnvelope.getTags().get("ai.operation.parentId");
268+
269+
assertNotNull(operationId);
270+
assertNotNull(operationParentId);
271+
272+
assertEquals(operationId, rddEnvelope.getTags().get("ai.operation.id"));
273+
assertEquals(operationParentId, rddEnvelope.getTags().get("ai.operation.parentId"));
171274
}
172275
}

0 commit comments

Comments
 (0)