Skip to content

Commit 9f13f0f

Browse files
committed
starting to write test, debug test server
1 parent 4d51482 commit 9f13f0f

File tree

6 files changed

+110
-20
lines changed

6 files changed

+110
-20
lines changed

smoke-tests/apps/LiveMetrics/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ plugins {
44

55
dependencies {
66
smokeTestImplementation("org.awaitility:awaitility:4.2.0")
7+
implementation("log4j:log4j:1.2.17")
78
}

smoke-tests/apps/LiveMetrics/src/main/java/com/microsoft/applicationinsights/smoketestapp/TestServlet.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,24 @@
99
import javax.servlet.http.HttpServlet;
1010
import javax.servlet.http.HttpServletRequest;
1111
import javax.servlet.http.HttpServletResponse;
12+
import org.apache.log4j.LogManager;
13+
import org.apache.log4j.Logger;
1214

1315
@WebServlet("/*")
1416
public class TestServlet extends HttpServlet {
1517

18+
private static final Logger logger = LogManager.getLogger("smoketestapp-livemetrics");
19+
1620
@Override
1721
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
1822
throws ServletException, IOException {
23+
doWork();
1924
resp.getWriter().println("ok");
2025
}
26+
27+
private void doWork() {
28+
System.out.println("Doing work to generate a dependency call, exception, and trace.");
29+
logger.error("This message should generate an exception!", new Exception("Fake Exception"));
30+
logger.info("This message should generate a trace");
31+
}
2132
}

smoke-tests/apps/LiveMetrics/src/smokeTest/java/com/microsoft/applicationinsights/smoketest/LiveMetricsTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,10 @@ abstract class LiveMetricsTest {
3030
@Test
3131
@TargetUri("/test")
3232
void doMostBasicTest() throws Exception {
33-
testing.getTelemetry(0);
3433

3534
Awaitility.await()
36-
.atMost(Duration.ofSeconds(10))
37-
.until(() -> testing.mockedIngestion.isLiveMetricsPingReceived());
35+
.atMost(Duration.ofSeconds(10));
36+
//.until(() -> testing.mockedIngestion.isLiveMetricsPingReceived());
3837
}
3938

4039
@Environment(TOMCAT_8_JAVA_8)

smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/fakeingestion/MockedAppInsightsIngestionServer.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class MockedAppInsightsIngestionServer {
2424

2525
private final MockedAppInsightsIngestionServlet servlet;
2626
private final MockedProfilerSettingsServlet profilerSettingsServlet;
27+
private final MockedQuickPulseServlet quickPulseServlet;
2728
private final Server server;
2829

2930
public MockedAppInsightsIngestionServer() {
@@ -33,9 +34,11 @@ public MockedAppInsightsIngestionServer() {
3334

3435
servlet = new MockedAppInsightsIngestionServlet();
3536
profilerSettingsServlet = new MockedProfilerSettingsServlet();
37+
quickPulseServlet = new MockedQuickPulseServlet();
3638

3739
handler.addServletWithMapping(new ServletHolder(profilerSettingsServlet), "/profiler/*");
38-
handler.addServletWithMapping(new ServletHolder(servlet), "/*");
40+
handler.addServletWithMapping(new ServletHolder(quickPulseServlet), "/QuickPulseService.svc/*");
41+
handler.addServletWithMapping(new ServletHolder(servlet), "/v2.1/track");
3942
}
4043

4144
@SuppressWarnings("SystemOut")
@@ -276,8 +279,20 @@ public boolean test(Envelope input) {
276279
return items;
277280
}
278281

279-
public boolean isLiveMetricsPingReceived() {
280-
return servlet.isLiveMetricsPingReceived();
282+
public int getNumPingsReceived() {
283+
return quickPulseServlet.getNumPingsReceived();
284+
}
285+
286+
public int getNumPostsReceived() {
287+
return quickPulseServlet.getNumPostsReceived();
288+
}
289+
290+
public String getLastPingBody() {
291+
return quickPulseServlet.getPingBody();
292+
}
293+
294+
public String getLastPostBody() {
295+
return quickPulseServlet.getLastPostBody();
281296
}
282297

283298
@SuppressWarnings("SystemOut")

smoke-tests/framework/src/main/java/com/microsoft/applicationinsights/smoketest/fakeingestion/MockedAppInsightsIngestionServlet.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@ class MockedAppInsightsIngestionServlet extends HttpServlet {
3232

3333
private final Object multimapLock = new Object();
3434

35-
private volatile boolean liveMetricsPingReceived;
36-
3735
private volatile boolean loggingEnabled;
3836

3937
MockedAppInsightsIngestionServlet() {
@@ -51,7 +49,6 @@ void resetData() {
5149
synchronized (multimapLock) {
5250
type2envelope.clear();
5351
}
54-
liveMetricsPingReceived = false;
5552
}
5653

5754
boolean hasData() {
@@ -100,14 +97,11 @@ List<Envelope> waitForItems(
10097
throw new TimeoutException("timed out waiting for items");
10198
}
10299

103-
boolean isLiveMetricsPingReceived() {
104-
return liveMetricsPingReceived;
105-
}
106100

107101
@Override
108102
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
109-
if (!"/v2.1/track".equals(req.getPathInfo())
110-
&& !"/QuickPulseService.svc/ping".equals(req.getPathInfo())) {
103+
logit("request path info: " + req.getPathInfo());
104+
if (!"/v2.1/track".equals(req.getPathInfo())) {
111105
resp.sendError(404, "Unknown URI");
112106
return;
113107
}
@@ -126,12 +120,6 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws I
126120
resp.setContentType("application/json");
127121
logit("raw payload:\n\n" + body + "\n");
128122

129-
if ("/QuickPulseService.svc/ping".equals(req.getPathInfo())) {
130-
liveMetricsPingReceived = true;
131-
resp.setHeader("x-ms-qps-subscribed", "false");
132-
return;
133-
}
134-
135123
String[] lines = body.split("\n");
136124
for (String line : lines) {
137125
Envelope envelope = JsonHelper.GSON.fromJson(line.trim(), Envelope.class);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
package com.microsoft.applicationinsights.smoketest.fakeingestion;
4+
5+
import com.google.common.io.CharStreams;
6+
import javax.servlet.http.HttpServlet;
7+
import javax.servlet.http.HttpServletRequest;
8+
import javax.servlet.http.HttpServletResponse;
9+
import java.io.IOException;
10+
import java.io.StringWriter;
11+
import java.util.concurrent.atomic.AtomicInteger;
12+
import java.util.concurrent.atomic.AtomicReference;
13+
14+
public class MockedQuickPulseServlet extends HttpServlet {
15+
16+
private final AtomicInteger liveMetricsPingReceived = new AtomicInteger();
17+
18+
private final AtomicInteger liveMetricsPostReceived = new AtomicInteger();
19+
20+
private final AtomicReference<String> pingBody = new AtomicReference<>();
21+
private final AtomicReference<String> lastPostBody = new AtomicReference<>();
22+
23+
private static final String MOCK_RESPONSE_JSON_DEFAULT_CONFIG =
24+
"{\"ETag\":\"fake::etag\",\"Metrics\":[],\"QuotaInfo\":null,\"DocumentStreams\":[{\"Id\":\"all-types-default\",\"DocumentFilterGroups\":[{\"TelemetryType\":\"Request\",\"Filters\":{\"Filters\":[{\"FieldName\":\"Success\",\"Predicate\":\"Equal\",\"Comparand\":\"false\"}]}},{\"TelemetryType\":\"Dependency\",\"Filters\":{\"Filters\":[{\"FieldName\":\"Success\",\"Predicate\":\"Equal\",\"Comparand\":\"false\"}]}},{\"TelemetryType\":\"Exception\",\"Filters\":{\"Filters\":[]}},{\"TelemetryType\":\"Event\",\"Filters\":{\"Filters\":[]}},{\"TelemetryType\":\"Trace\",\"Filters\":{\"Filters\":[]}}]}]}";
25+
26+
public MockedQuickPulseServlet() {
27+
28+
}
29+
30+
@Override
31+
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
32+
throws IOException {
33+
Readable reader = req.getReader();
34+
StringWriter sw = new StringWriter();
35+
CharStreams.copy(reader, sw);
36+
String body = sw.toString();
37+
38+
String path = req.getPathInfo();
39+
System.out.println("QuickPulse received: " + path);
40+
if (path.equals("QuickPulse.svc/ping")) {
41+
liveMetricsPingReceived.incrementAndGet();
42+
pingBody.set(body);
43+
System.out.println("ping body: " + body);
44+
// want the following request to be a post
45+
resp.setHeader("x-ms-qps-subscribed", "true");
46+
resp.setContentType("application/json");
47+
resp.getWriter().write(MOCK_RESPONSE_JSON_DEFAULT_CONFIG);
48+
49+
} else if (path.equals("QuickPulse.svc/post")) {
50+
liveMetricsPostReceived.incrementAndGet();
51+
lastPostBody.set(body);
52+
System.out.println("post body: " + body);
53+
// continue to post
54+
resp.setHeader("x-ms-qps-subscribed", "true");
55+
} else {
56+
resp.setStatus(404);
57+
}
58+
}
59+
60+
public int getNumPingsReceived() {
61+
return liveMetricsPingReceived.get();
62+
}
63+
64+
public int getNumPostsReceived() {
65+
return liveMetricsPostReceived.get();
66+
}
67+
68+
public String getPingBody() {
69+
return pingBody.get();
70+
}
71+
72+
public String getLastPostBody() {
73+
return lastPostBody.get();
74+
}
75+
76+
}

0 commit comments

Comments
 (0)