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);
     }
 
     /**

Reply via email to