This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new 011f67aea8 Micrometer test coverage - @Counted 011f67aea8 is described below commit 011f67aea8bcc4e470ed0f30e0d3b4eccac94231 Author: JiriOndrusek <ondrusek.j...@gmail.com> AuthorDate: Wed Feb 22 16:06:15 2023 +0100 Micrometer test coverage - @Counted --- integration-tests/micrometer/pom.xml | 4 ++ .../micrometer/it/MicrometerResource.java | 41 +++++++++----- .../component/micrometer/it/MicrometerRoutes.java | 7 +++ .../component/micrometer/it/TestMetric.java | 64 ++++++++++++++++++++++ .../component/micrometer/it/MicrometerTest.java | 41 ++++++++++++-- 5 files changed, 140 insertions(+), 17 deletions(-) diff --git a/integration-tests/micrometer/pom.xml b/integration-tests/micrometer/pom.xml index c5d9431836..4527e10381 100644 --- a/integration-tests/micrometer/pom.xml +++ b/integration-tests/micrometer/pom.xml @@ -43,6 +43,10 @@ <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-micrometer</artifactId> </dependency> + <dependency> + <groupId>org.apache.camel.quarkus</groupId> + <artifactId>camel-quarkus-bean</artifactId> + </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> diff --git a/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerResource.java b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerResource.java index 01c13213b3..d77c7bf321 100644 --- a/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerResource.java +++ b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerResource.java @@ -42,6 +42,9 @@ public class MicrometerResource { @Inject MeterRegistry meterRegistry; + @Inject + TestMetric counter; + @Path("/metric/{type}/{name}") @Produces(MediaType.APPLICATION_JSON) @GET @@ -62,20 +65,25 @@ public class MicrometerResource { return Response.status(404).build(); } - Response.ResponseBuilder response = Response.ok(); - if (type.equals("counter")) { - response.entity(search.counter().count()); - } else if (type.equals("gauge")) { - response.entity(search.gauge().value()); - } else if (type.equals("summary")) { - response.entity(search.summary().max()); - } else if (type.equals("timer")) { - response.entity(search.timer().totalTime(TimeUnit.MILLISECONDS)); - } else { - throw new IllegalArgumentException("Unknown metric type: " + type); - } + try { + Response.ResponseBuilder response = Response.ok(); + if (type.equals("counter")) { + response.entity(search.counter().count()); + } else if (type.equals("gauge")) { + response.entity(search.gauge().value()); + } else if (type.equals("summary")) { + response.entity(search.summary().max()); + } else if (type.equals("timer")) { + response.entity(search.timer().totalTime(TimeUnit.MILLISECONDS)); + } else { + throw new IllegalArgumentException("Unknown metric type: " + type); + } - return response.build(); + return response.build(); + } catch (NullPointerException e) { + //metric does not exist + return Response.status(500).entity("Metric does not exist").build(); + } } @Path("/counter") @@ -105,4 +113,11 @@ public class MicrometerResource { producerTemplate.requestBody("direct:log", (Object) null); return Response.ok().build(); } + + @Path("/annotations/call/{number}") + @GET + public Response annotationsCall(@PathParam("number") int number) { + producerTemplate.requestBodyAndHeader("direct:annotatedBean", (Object) null, "number", number); + return Response.ok().build(); + } } diff --git a/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerRoutes.java b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerRoutes.java index 068d2fda1e..8e8517e587 100644 --- a/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerRoutes.java +++ b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerRoutes.java @@ -39,5 +39,12 @@ public class MicrometerRoutes extends RouteBuilder { from("direct:log").routeId("log") .log("Camel Quarkus Micrometer"); + + from("direct:annotatedBean") + .choice() + .when(simple("${header.number} == 1")).bean("testMetric", "call1") + .otherwise().bean("testMetric", "call2") + .end(); + } } diff --git a/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/TestMetric.java b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/TestMetric.java new file mode 100644 index 0000000000..749da892ec --- /dev/null +++ b/integration-tests/micrometer/src/main/java/org/apache/camel/quarkus/component/micrometer/it/TestMetric.java @@ -0,0 +1,64 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.quarkus.component.micrometer.it; + +import io.micrometer.core.annotation.Counted; +import io.micrometer.core.annotation.Timed; +import io.micrometer.core.instrument.Meter; +import io.micrometer.core.instrument.config.MeterFilter; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Produces; +import jakarta.inject.Named; +import jakarta.inject.Singleton; + +@ApplicationScoped +@Named("testMetric") +public class TestMetric { + + @Counted(value = "TestMetric.counted1") + @Timed(value = "TestMetric.timed1") + public void call1() { + try { + //wait 1 second + Thread.sleep(1000); + } catch (InterruptedException e) { + //do nothing + } + } + + @Counted(value = "TestMetric_wrong.counted2") + public void call2() { + //do nothing + } + + @Produces + @Singleton + public MeterFilter renameApplicationMeters() { + final String targetMetric = "TestMetric_wrong.counted2"; + + return new MeterFilter() { + @Override + public Meter.Id map(Meter.Id id) { + if (id.getName().equals(targetMetric)) { + // rename the metric + return id.withName("TestMetric.counted2"); + } + return id; + } + }; + } +} diff --git a/integration-tests/micrometer/src/test/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerTest.java b/integration-tests/micrometer/src/test/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerTest.java index 40bc9cff9e..e15cfa4b5e 100644 --- a/integration-tests/micrometer/src/test/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerTest.java +++ b/integration-tests/micrometer/src/test/java/org/apache/camel/quarkus/component/micrometer/it/MicrometerTest.java @@ -18,6 +18,7 @@ package org.apache.camel.quarkus.component.micrometer.it; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; +import io.restassured.response.ResponseBodyExtractionOptions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -83,20 +84,52 @@ class MicrometerTest { assertTrue(getMetricValue(Double.class, "timer", "CamelExchangeEventNotifier", tags) >= 0.0); } + @Test + public void testAnnotations() { + RestAssured.get("/micrometer/annotations/call/1") + .then() + .statusCode(200); + RestAssured.get("/micrometer/annotations/call/1") + .then() + .statusCode(200); + + assertEquals(2, getMetricValue(Double.class, "counter", "TestMetric.counted1", "")); + assertTrue(getMetricValue(Double.class, "timer", "TestMetric.timed1", "") >= 2000); + } + + @Test + public void testQuarkusMetricsApi() { + RestAssured.get("/micrometer/annotations/call/2") + .then() + .statusCode(200); + + assertEquals("Metric does not exist", getMetricValue(String.class, "counter", "TestMetric_wrong.counted", "", 500)); + assertEquals(1, getMetricValue(Double.class, "counter", "TestMetric.counted2", "")); + } + private <T> T getMetricValue(Class<T> as, String type, String name) { return getMetricValue(as, type, name, null); } private <T> T getMetricValue(Class<T> as, String type, String name, String tags) { - return RestAssured.given() + return getMetricValue(as, type, name, tags, 200); + } + + private <T> T getMetricValue(Class<T> as, String type, String name, String tags, int statusCode) { + ResponseBodyExtractionOptions resp = RestAssured.given() .queryParam("tags", tags) .when() .get("/micrometer/metric/" + type + "/" + name) .then() - .statusCode(200) + .statusCode(statusCode) .extract() - .body() - .as(as); + .body(); + + if (as.equals(String.class)) { + return (T) resp.asString(); + } + + return resp.as(as); } /**