You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2021/07/13 06:22:07 UTC
[camel-quarkus] 01/02: Test OpenTracing @Traced beans in
conjunction with Camel routes
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
commit 5e07d0c438c9206f9c29338cdf39ff75072e6ef6
Author: James Netherton <ja...@gmail.com>
AuthorDate: Mon Jul 12 09:15:22 2021 +0100
Test OpenTracing @Traced beans in conjunction with Camel routes
---
integration-tests/opentracing/pom.xml | 17 ++++++
.../opentracing/it/OpenTracingResource.java | 23 ++++++++
.../opentracing/it/OpenTracingRouteBuilder.java | 29 ++++++++++
...penTracingRouteBuilder.java => TracedBean.java} | 18 +++----
...ngRouteBuilder.java => TracedBeanProducer.java} | 21 ++++----
.../component/opentracing/it/OpenTracingTest.java | 61 ++++++++++++++++++----
6 files changed, 139 insertions(+), 30 deletions(-)
diff --git a/integration-tests/opentracing/pom.xml b/integration-tests/opentracing/pom.xml
index 8d2572a..bbba36c 100644
--- a/integration-tests/opentracing/pom.xml
+++ b/integration-tests/opentracing/pom.xml
@@ -32,6 +32,10 @@
<dependencies>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-direct</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-opentracing</artifactId>
</dependency>
<dependency>
@@ -66,6 +70,19 @@
<!-- The following dependencies guarantee that this module is built after them. You can update them by running `mvn process-resources -Pformat -N` from the source tree root directory -->
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-direct-deployment</artifactId>
+ <version>${project.version}</version>
+ <type>pom</type>
+ <scope>test</scope>
+ <exclusions>
+ <exclusion>
+ <groupId>*</groupId>
+ <artifactId>*</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-opentracing-deployment</artifactId>
<version>${project.version}</version>
<type>pom</type>
diff --git a/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingResource.java b/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingResource.java
index c8fc871..bff92a3 100644
--- a/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingResource.java
+++ b/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingResource.java
@@ -23,6 +23,7 @@ import javax.json.JsonArray;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObjectBuilder;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@@ -30,14 +31,20 @@ import javax.ws.rs.core.MediaType;
import io.opentracing.Tracer;
import io.opentracing.mock.MockSpan;
import io.opentracing.mock.MockTracer;
+import org.apache.camel.ProducerTemplate;
+import org.eclipse.microprofile.opentracing.Traced;
@Path("/opentracing")
@ApplicationScoped
+@Traced(value = false)
public class OpenTracingResource {
@Inject
Tracer tracer;
+ @Inject
+ ProducerTemplate producerTemplate;
+
@Path("/spans")
@GET
@Produces(MediaType.APPLICATION_JSON)
@@ -51,6 +58,7 @@ public class OpenTracingResource {
JsonObjectBuilder objectBuilder = Json.createObjectBuilder();
objectBuilder.add("spanId", context.spanId());
objectBuilder.add("traceId", context.traceId());
+ objectBuilder.add("parentId", span.parentId());
span.tags().forEach((k, v) -> objectBuilder.add(k, v.toString()));
@@ -59,4 +67,19 @@ public class OpenTracingResource {
return arrayBuilder.build();
}
+
+ @Traced
+ @Path("/trace")
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ public String traceRoute() {
+ return producerTemplate.requestBody("direct:start", null, String.class);
+ }
+
+ @Path("/mock/tracer/reset")
+ @POST
+ public void resetMockTracer() {
+ MockTracer mockTracer = (MockTracer) tracer;
+ mockTracer.reset();
+ }
}
diff --git a/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java b/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java
index d0a940e..51303d5 100644
--- a/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java
+++ b/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java
@@ -16,11 +16,21 @@
*/
package org.apache.camel.quarkus.component.opentracing.it;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+import io.opentracing.Span;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.opentracing.OpenTracingSpanAdapter;
+import org.apache.camel.tracing.ActiveSpanManager;
+@ApplicationScoped
public class OpenTracingRouteBuilder extends RouteBuilder {
+ @Inject
+ TracedBean tracedBean;
+
@Override
public void configure() throws Exception {
from("platform-http:/opentracing/test/trace?httpMethodRestrict=GET")
@@ -29,5 +39,24 @@ public class OpenTracingRouteBuilder extends RouteBuilder {
from("platform-http:/opentracing/test/trace/filtered")
.setBody(constant("GET: /opentracing/test/trace/filtered"));
+
+ from("platform-http:/opentracing/test/bean")
+ .process(exchange -> {
+ Span span = getCurrentSpan(exchange);
+ tracedBean.doTrace(span);
+ })
+ .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(200));
+
+ from("direct:start")
+ .process(exchange -> {
+ Span span = getCurrentSpan(exchange);
+ tracedBean.doTrace(span);
+ })
+ .setBody().constant("Traced direct:start");
+ }
+
+ private Span getCurrentSpan(Exchange exchange) {
+ OpenTracingSpanAdapter adapter = (OpenTracingSpanAdapter) ActiveSpanManager.getSpan(exchange);
+ return adapter.getOpenTracingSpan();
}
}
diff --git a/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java b/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/TracedBean.java
similarity index 61%
copy from integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java
copy to integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/TracedBean.java
index d0a940e..82570c5 100644
--- a/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java
+++ b/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/TracedBean.java
@@ -16,18 +16,16 @@
*/
package org.apache.camel.quarkus.component.opentracing.it;
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.RouteBuilder;
+import javax.enterprise.context.ApplicationScoped;
-public class OpenTracingRouteBuilder extends RouteBuilder {
+import io.opentracing.Span;
+import org.eclipse.microprofile.opentracing.Traced;
- @Override
- public void configure() throws Exception {
- from("platform-http:/opentracing/test/trace?httpMethodRestrict=GET")
- .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(200))
- .setBody(constant("GET: /opentracing/test/trace"));
+@ApplicationScoped
+public class TracedBean {
- from("platform-http:/opentracing/test/trace/filtered")
- .setBody(constant("GET: /opentracing/test/trace/filtered"));
+ @Traced
+ public void doTrace(Span span) {
+ span.log("Invoked doTrace");
}
}
diff --git a/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java b/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/TracedBeanProducer.java
similarity index 61%
copy from integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java
copy to integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/TracedBeanProducer.java
index d0a940e..99a1400 100644
--- a/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingRouteBuilder.java
+++ b/integration-tests/opentracing/src/main/java/org/apache/camel/quarkus/component/opentracing/it/TracedBeanProducer.java
@@ -16,18 +16,19 @@
*/
package org.apache.camel.quarkus.component.opentracing.it;
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.RouteBuilder;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.Produces;
+import javax.inject.Singleton;
-public class OpenTracingRouteBuilder extends RouteBuilder {
+import io.opentracing.Tracer;
+import io.opentracing.mock.MockTracer;
- @Override
- public void configure() throws Exception {
- from("platform-http:/opentracing/test/trace?httpMethodRestrict=GET")
- .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(200))
- .setBody(constant("GET: /opentracing/test/trace"));
+@ApplicationScoped
+public class TracedBeanProducer {
- from("platform-http:/opentracing/test/trace/filtered")
- .setBody(constant("GET: /opentracing/test/trace/filtered"));
+ @Produces
+ @Singleton
+ public Tracer tracer() {
+ return new MockTracer();
}
}
diff --git a/integration-tests/opentracing/src/test/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingTest.java b/integration-tests/opentracing/src/test/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingTest.java
index 5beed56..94042e7 100644
--- a/integration-tests/opentracing/src/test/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingTest.java
+++ b/integration-tests/opentracing/src/test/java/org/apache/camel/quarkus/component/opentracing/it/OpenTracingTest.java
@@ -22,15 +22,23 @@ import java.util.Map;
import io.opentracing.tag.Tags;
import io.quarkus.test.junit.QuarkusTest;
import io.restassured.RestAssured;
-import io.restassured.path.json.JsonPath;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
+import static org.hamcrest.CoreMatchers.equalTo;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
@QuarkusTest
class OpenTracingTest {
+ @AfterEach
+ public void afterEach() {
+ RestAssured.post("/opentracing/mock/tracer/reset")
+ .then()
+ .statusCode(204);
+ }
+
@Test
public void testTraceRoute() {
// Generate messages
@@ -47,15 +55,7 @@ class OpenTracingTest {
}
// Retrieve recorded spans
- JsonPath jsonPath = RestAssured.given()
- .get("/opentracing/spans")
- .then()
- .statusCode(200)
- .extract()
- .body()
- .jsonPath();
-
- List<Map<String, String>> spans = jsonPath.get();
+ List<Map<String, String>> spans = getSpans();
assertEquals(5, spans.size());
for (Map<String, String> span : spans) {
@@ -67,4 +67,45 @@ class OpenTracingTest {
assertTrue(span.get(Tags.HTTP_URL.getKey()).endsWith("/opentracing/test/trace"));
}
}
+
+ @Test
+ public void testTracedBeanInvokedFromRoute() {
+ RestAssured.get("/opentracing/test/bean")
+ .then()
+ .statusCode(200);
+
+ // Verify the span hierarchy is Platform HTTP Endpoint -> TracedBean
+ List<Map<String, String>> spans = getSpans();
+ assertEquals(2, spans.size());
+ assertEquals(spans.get(0).get("parentId"), spans.get(1).get("spanId"));
+ assertEquals(0, spans.get(1).get("parentId"));
+ assertEquals("camel-platform-http", spans.get(1).get(Tags.COMPONENT.getKey()));
+ }
+
+ @Test
+ public void testTracedCamelRouteInvokedFromJaxRsService() {
+ RestAssured.get("/opentracing/trace")
+ .then()
+ .statusCode(200)
+ .body(equalTo("Traced direct:start"));
+
+ // Verify the span hierarchy is JAX-RS Service -> Platform HTTP Endpoint -> TracedBean
+ List<Map<String, String>> spans = getSpans();
+ assertEquals(3, spans.size());
+ assertEquals(spans.get(0).get("parentId"), spans.get(1).get("spanId"));
+ assertEquals(spans.get(1).get("parentId"), spans.get(2).get("spanId"));
+ assertEquals(0, spans.get(2).get("parentId"));
+ assertEquals("jaxrs", spans.get(2).get(Tags.COMPONENT.getKey()));
+ }
+
+ private List<Map<String, String>> getSpans() {
+ return RestAssured.given()
+ .get("/opentracing/spans")
+ .then()
+ .statusCode(200)
+ .extract()
+ .body()
+ .jsonPath()
+ .get();
+ }
}