Skip to content

Commit

Permalink
Merge pull request quarkusio#27599 from brunobat/fix-client-request-test
Browse files Browse the repository at this point in the history
Fix flaky ClientRequestTest
  • Loading branch information
gsmet committed Sep 8, 2022
2 parents 55e22e9 + a511c4f commit 8018aaa
Show file tree
Hide file tree
Showing 4 changed files with 184 additions and 27 deletions.
5 changes: 5 additions & 0 deletions integration-tests/micrometer-prometheus/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,11 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.awaitility</groupId>
<artifactId>awaitility</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package io.quarkus;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.search.Search;

@Path("/server-requests")
@ApplicationScoped
public class ExporterResource {
@Inject
MeterRegistry registry;

@Path("/count")
@Produces(MediaType.APPLICATION_JSON)
@GET
public Integer countServerRequests(@QueryParam("method") String method,
@QueryParam("outcome") String outcome,
@QueryParam("status") String status,
@QueryParam("uri") String uri) {
final Search search = registry
.find("http.server.requests");
if (method != null) {
search.tag("method", method);
}
if (outcome != null) {
search.tag("outcome", outcome);
}
if (status != null) {
search.tag("status", status);
}
if (uri != null) {
search.tag("uri", uri);
}
return search.timers().size();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package io.quarkus;

import java.util.Arrays;
import java.util.stream.Collectors;

import io.micrometer.core.instrument.MeterRegistry;

public class Util {
private Util() {
}

static String stackToString(Throwable t) {
StringBuilder sb = new StringBuilder().append("\n");
while (t.getCause() != null) {
t = t.getCause();
}
sb.append(t.getClass()).append(": ").append(t.getMessage()).append("\n");
Arrays.asList(t.getStackTrace()).forEach(x -> sb.append("\t").append(x.toString()).append("\n"));
return sb.toString();
}

public static String foundServerRequests(MeterRegistry registry, String message) {
return message + "\nFound:\n" + Util.listMeters(registry, "http.server.requests");
}

public static String foundClientRequests(MeterRegistry registry, String message) {
return message + "\nFound:\n" + Util.listMeters(registry, "http.client.requests");
}

public static String listMeters(MeterRegistry registry, String meterName) {
return registry.find(meterName).meters().stream()
.map(x -> {
return x.getId().toString();
})
.collect(Collectors.joining("\n"));
}

public static String listMeters(MeterRegistry registry, String meterName, final String tag) {
return registry.find(meterName).meters().stream()
.map(x -> {
return x.getId().getTag(tag);
})
.collect(Collectors.joining(","));
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
package io.quarkus.it.micrometer.prometheus;

import static io.restassured.RestAssured.get;
import static io.restassured.RestAssured.given;
import static io.restassured.RestAssured.when;
import static java.util.concurrent.TimeUnit.SECONDS;
import static org.awaitility.Awaitility.await;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.greaterThan;
import static org.junit.jupiter.api.Assertions.assertEquals;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import io.quarkus.test.junit.QuarkusTest;

@QuarkusTest
@Disabled("flaky")
public class ClientRequestTest {

@Test
void testClientRequests() {
when().get("/client/ping/one").then().statusCode(200)
Expand All @@ -24,30 +30,88 @@ void testClientRequests() {
when().get("/client/status").then().statusCode(200)
.body(containsString("ok400500timeout"));

when().get("/q/metrics").then()
.statusCode(200)
.body(containsString(
"http_client_requests_seconds_count{clientName=\"localhost\",env=\"test\",method=\"GET\",outcome=\"SUCCESS\",registry=\"prometheus\",status=\"200\",uri=\"/client/pong/{message}\""))
.body(containsString(
"http_server_requests_seconds_count{env=\"test\",method=\"GET\",outcome=\"SUCCESS\",registry=\"prometheus\",status=\"200\",uri=\"/client/ping/{message}\""))
.body(containsString(
"http_server_requests_seconds_count{env=\"test\",method=\"GET\",outcome=\"SUCCESS\",registry=\"prometheus\",status=\"200\",uri=\"/client/pong/{message}\""))
.body(containsString(
"http_server_requests_seconds_count{env=\"test\",method=\"GET\",outcome=\"SUCCESS\",registry=\"prometheus\",status=\"200\",uri=\"/client/async-ping/{message}\""))
// local client/server request for status code 200
.body(containsString(
"http_server_requests_seconds_count{env=\"test\",method=\"GET\",outcome=\"SUCCESS\",registry=\"prometheus\",status=\"200\",uri=\"/client/status\""))
.body(containsString(
"http_client_requests_seconds_count{clientName=\"localhost\",env=\"test\",method=\"GET\",outcome=\"SUCCESS\",registry=\"prometheus\",status=\"200\",uri=\"/client/status/{statusCode}\""))
// local client/server request for status code 400
.body(containsString(
"http_server_requests_seconds_max{env=\"test\",method=\"GET\",outcome=\"CLIENT_ERROR\",registry=\"prometheus\",status=\"400\",uri=\"/client/status/{statusCode}\""))
.body(containsString(
"http_client_requests_seconds_count{clientName=\"localhost\",env=\"test\",method=\"GET\",outcome=\"CLIENT_ERROR\",registry=\"prometheus\",status=\"400\",uri=\"/client/status/{statusCode}\""))
// local client/server request for status code 500
.body(containsString(
"http_server_requests_seconds_max{env=\"test\",method=\"GET\",outcome=\"SERVER_ERROR\",registry=\"prometheus\",status=\"500\",uri=\"/client/status/{statusCode}\""))
.body(containsString(
"http_client_requests_seconds_count{clientName=\"localhost\",env=\"test\",method=\"GET\",outcome=\"SERVER_ERROR\",registry=\"prometheus\",status=\"500\",uri=\"/client/status/{statusCode}\""));
await().atMost(5, SECONDS).untilAsserted(() -> assertThat(
get("/server-requests/count").body().as(Integer.class),
greaterThan(7)));

assertEquals(1,
given()
.queryParam("method", "GET")
.queryParam("outcome", "SUCCESS")
.queryParam("status", "200")
.queryParam("uri", "/client/pong/{message}")
.when().get("/server-requests/count")
.body().as(Integer.class),
"Expected: http.server.requests, method=GET, status=200, uri=/client/pong/{message}");

assertEquals(1,
given()
.queryParam("method", "GET")
.queryParam("outcome", "SUCCESS")
.queryParam("status", "200")
.queryParam("uri", "/client/ping/{message}")
.when().get("/server-requests/count")
.body().as(Integer.class),
"Expected: http.server.requests, method=GET, status=200, uri=/client/ping/{message}");

assertEquals(1,
given()
.queryParam("method", "GET")
.queryParam("outcome", "SUCCESS")
.queryParam("status", "200")
.queryParam("uri", "/client/pong/{message}")
.when().get("/server-requests/count")
.body().as(Integer.class),
"Expected: http.server.requests, method=GET, status=200, uri=/client/pong/{message}");

assertEquals(1,
given()
.queryParam("method", "GET")
.queryParam("outcome", "SUCCESS")
.queryParam("status", "200")
.queryParam("uri", "/client/async-ping/{message}")
.when().get("/server-requests/count")
.body().as(Integer.class),
"Expected: http.server.requests, method=GET, status=200, uri=/client/async-ping/{message}");

assertEquals(1,
given()
.queryParam("method", "GET")
.queryParam("outcome", "SUCCESS")
.queryParam("status", "200")
.queryParam("uri", "/client/status")
.when().get("/server-requests/count")
.body().as(Integer.class),
"Expected: http.server.requests, method=GET, status=200, uri=/client/status");

assertEquals(1,
given()
.queryParam("method", "GET")
.queryParam("outcome", "SUCCESS")
.queryParam("status", "200")
.queryParam("uri", "/client/status/{statusCode}")
.when().get("/server-requests/count")
.body().as(Integer.class),
"Expected: http.server.requests, method=GET, status=200, uri=/client/status/{statusCode}");

assertEquals(1,
given()
.queryParam("method", "GET")
.queryParam("outcome", "CLIENT_ERROR")
.queryParam("status", "400")
.queryParam("uri", "/client/status/{statusCode}")
.when().get("/server-requests/count")
.body().as(Integer.class),
"Expected: http.server.requests, method=GET, status=400, uri=/client/status/{statusCode}");

assertEquals(1,
given()
.queryParam("method", "GET")
.queryParam("outcome", "SERVER_ERROR")
.queryParam("status", "500")
.queryParam("uri", "/client/status/{statusCode}")
.when().get("/server-requests/count")
.body().as(Integer.class),
"Expected: http.server.requests, method=GET, status=500, uri=/client/status/{statusCode}");
}
}

0 comments on commit 8018aaa

Please sign in to comment.