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 ba244d64fb424f66b200aa132ebda492b01373ea
Author: Lukas Lowinger <[email protected]>
AuthorDate: Thu Nov 13 14:10:42 2025 +0000

    Port camel-quarkus-opentelemetry tests to camel-quarkus-opentelemetry2
    
    Fixes #7806
    
    Co-authored-by: jamesnetherton <[email protected]>
---
 integration-tests/opentelemetry2/pom.xml           |  53 +++++++++
 .../opentelemetry2/it/GreetingsBean.java}          |  15 ++-
 ...nTelemetry2Resource.java => JdbcQueryBean.java} |  43 ++++---
 .../opentelemetry2/it/OpenTelemetry2Resource.java  |  15 +++
 .../it/OpenTelemetry2RouteBuilder.java             |  20 +++-
 .../opentelemetry2/it/SpanExporterResource.java    |   2 +-
 .../src/main/resources/application.properties      |   5 +-
 .../it/OpenTelemetry2TestHelper.java}              |  24 ++--
 .../it/OpenTelemetry2TraceProcessorsIT.java}       |  12 +-
 ...java => OpenTelemetry2TraceProcessorsTest.java} |  51 +++++----
 .../opentelemetry2/it/Opentelemetry2Test.java      | 124 ++++++++++++++++++---
 .../it/TraceProcessorsTestProfile.java}            |  11 +-
 12 files changed, 286 insertions(+), 89 deletions(-)

diff --git a/integration-tests/opentelemetry2/pom.xml 
b/integration-tests/opentelemetry2/pom.xml
index 5da20d1f3e..094a95a2b5 100644
--- a/integration-tests/opentelemetry2/pom.xml
+++ b/integration-tests/opentelemetry2/pom.xml
@@ -31,10 +31,18 @@
     <description>Integration tests for Camel Quarkus Opentelemetry2 
extension</description>
 
     <dependencies>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-bean</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-direct</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-platform-http</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-timer</artifactId>
@@ -55,6 +63,14 @@
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy-jsonb</artifactId>
         </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-agroal</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-jdbc-postgresql</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.opentelemetry</groupId>
             <artifactId>opentelemetry-sdk-testing</artifactId>
@@ -115,6 +131,19 @@
             </activation>
             <dependencies>
                 <!-- 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-bean-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-direct-deployment</artifactId>
@@ -154,6 +183,19 @@
                         </exclusion>
                     </exclusions>
                 </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    
<artifactId>camel-quarkus-platform-http-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-timer-deployment</artifactId>
@@ -169,6 +211,17 @@
                 </dependency>
             </dependencies>
         </profile>
+        <profile>
+            <id>skip-testcontainers-tests</id>
+            <activation>
+                <property>
+                    <name>skip-testcontainers-tests</name>
+                </property>
+            </activation>
+            <properties>
+                <skipTests>true</skipTests>
+            </properties>
+        </profile>
     </profiles>
 
 </project>
diff --git 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/SpanExporterProducer.java
 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/GreetingsBean.java
similarity index 75%
rename from 
integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/SpanExporterProducer.java
rename to 
integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/GreetingsBean.java
index 9262412a6e..0f910528b9 100644
--- 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/SpanExporterProducer.java
+++ 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/GreetingsBean.java
@@ -16,17 +16,16 @@
  */
 package org.apache.camel.quarkus.component.opentelemetry2.it;
 
-import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
+import io.opentelemetry.instrumentation.annotations.WithSpan;
 import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.enterprise.inject.Produces;
-import jakarta.inject.Singleton;
+import jakarta.inject.Named;
 
 @ApplicationScoped
-public class SpanExporterProducer {
+@Named("greetingsBean")
+public class GreetingsBean {
 
-    @Produces
-    @Singleton
-    public InMemorySpanExporter createInMemoryExporter() {
-        return InMemorySpanExporter.create();
+    @WithSpan
+    public String greet(String name) {
+        return "Hello " + name;
     }
 }
diff --git 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/JdbcQueryBean.java
similarity index 50%
copy from 
integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
copy to 
integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/JdbcQueryBean.java
index 8b3dfee289..c5240f3c70 100644
--- 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
+++ 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/JdbcQueryBean.java
@@ -16,26 +16,35 @@
  */
 package org.apache.camel.quarkus.component.opentelemetry2.it;
 
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.inject.Inject;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.Produces;
-import jakarta.ws.rs.core.MediaType;
-import org.apache.camel.ProducerTemplate;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
 
-@Path("/opentelemetry2")
-@ApplicationScoped
-public class OpenTelemetry2Resource {
+import io.agroal.api.AgroalDataSource;
+import io.quarkus.runtime.annotations.RegisterForReflection;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.inject.Singleton;
 
+@Singleton
+@Named("jdbcQueryBean")
+@RegisterForReflection(fields = false)
+public class JdbcQueryBean {
     @Inject
-    ProducerTemplate producerTemplate;
+    AgroalDataSource dataSource;
 
-    @Path("/trace")
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String traceRoute() {
-        return producerTemplate.requestBody("direct:start", null, 
String.class);
+    public long getNowTimestamp() {
+        try (Connection connection = dataSource.getConnection()) {
+            try (Statement statement = connection.createStatement()) {
+                ResultSet resultSet = statement.executeQuery("SELECT 
EXTRACT(EPOCH FROM NOW());");
+                if (resultSet.next()) {
+                    return resultSet.getLong(1);
+                }
+                return 0;
+            }
+        } catch (SQLException e) {
+            throw new RuntimeException(e);
+        }
     }
-
 }
diff --git 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
index 8b3dfee289..fadf1361f1 100644
--- 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
+++ 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2Resource.java
@@ -20,6 +20,7 @@ import jakarta.enterprise.context.ApplicationScoped;
 import jakarta.inject.Inject;
 import jakarta.ws.rs.GET;
 import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
 import jakarta.ws.rs.Produces;
 import jakarta.ws.rs.core.MediaType;
 import org.apache.camel.ProducerTemplate;
@@ -38,4 +39,18 @@ public class OpenTelemetry2Resource {
         return producerTemplate.requestBody("direct:start", null, 
String.class);
     }
 
+    @Path("/greet/{name}")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String traceRoute(@PathParam("name") String name) {
+        return producerTemplate.requestBody("direct:greet", name, 
String.class);
+    }
+
+    @Path("/jdbc/query")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public long jdbcQuery() {
+        return producerTemplate.requestBody("direct:jdbcQuery", null, 
Long.class);
+    }
+
 }
diff --git 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
index 7722741cf6..b21980d090 100644
--- 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
+++ 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
@@ -16,14 +16,30 @@
  */
 package org.apache.camel.quarkus.component.opentelemetry2.it;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 
 public class OpenTelemetry2RouteBuilder extends RouteBuilder {
 
     @Override
     public void configure() throws Exception {
+        from("platform-http:/opentelemetry2/test/trace?httpMethodRestrict=GET")
+                .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(200))
+                .setBody(constant("GET: /opentelemetry2/test/trace"));
+
+        from("platform-http:/opentelemetry2/test/trace/filtered")
+                .setBody(constant("GET: /opentelemetry2/test/trace/filtered"));
+
         from("direct:start")
-                .setBody().constant("Traced direct:start")
-                .to("log:info");
+                .setBody().constant("Traced direct:start");
+
+        from("direct:greet")
+                .to("bean:greetingsBean");
+
+        from("timer:filtered?repeatCount=5&delay=-1")
+                .setBody().constant("Route filtered from 
tracing").id("timer-setbody");
+
+        from("direct:jdbcQuery")
+                .to("bean:jdbcQueryBean");
     }
 }
diff --git 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/SpanExporterResource.java
 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/SpanExporterResource.java
index cf90908882..ca24be4e25 100644
--- 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/SpanExporterResource.java
+++ 
b/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/SpanExporterResource.java
@@ -45,7 +45,7 @@ public class SpanExporterResource {
         JsonArrayBuilder arrayBuilder = Json.createArrayBuilder();
 
         for (SpanData span : exporter.getFinishedSpanItems()) {
-            if (span.getName().contains("GET /")) {
+            if (span.getName().contains("/opentelemetry2/exporter")) {
                 // Ignore any trace events on this resource
                 continue;
             }
diff --git 
a/integration-tests/opentelemetry2/src/main/resources/application.properties 
b/integration-tests/opentelemetry2/src/main/resources/application.properties
index 968c0b4d2c..304b685a99 100644
--- a/integration-tests/opentelemetry2/src/main/resources/application.properties
+++ b/integration-tests/opentelemetry2/src/main/resources/application.properties
@@ -14,5 +14,8 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
+quarkus.camel.opentelemetry2.exclude-patterns = timer*
 quarkus.otel.bsp.schedule.delay=1
-quarkus.otel.bsp.export.timeout=5s
\ No newline at end of file
+quarkus.otel.bsp.export.timeout=5s
+quarkus.datasource.jdbc.telemetry=true
+quarkus.datasource.devservices.image-name=${postgres.container.image}
\ No newline at end of file
diff --git 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2TestHelper.java
similarity index 64%
copy from 
integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
copy to 
integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2TestHelper.java
index 7722741cf6..05fab0d6ac 100644
--- 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
+++ 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2TestHelper.java
@@ -16,14 +16,24 @@
  */
 package org.apache.camel.quarkus.component.opentelemetry2.it;
 
-import org.apache.camel.builder.RouteBuilder;
+import java.util.List;
+import java.util.Map;
 
-public class OpenTelemetry2RouteBuilder extends RouteBuilder {
+import io.restassured.RestAssured;
 
-    @Override
-    public void configure() throws Exception {
-        from("direct:start")
-                .setBody().constant("Traced direct:start")
-                .to("log:info");
+class OpenTelemetry2TestHelper {
+    private OpenTelemetry2TestHelper() {
+        // Utility class
+    }
+
+    static List<Map<String, String>> getSpans() {
+        return RestAssured.given()
+                .get("/opentelemetry2/exporter/spans")
+                .then()
+                .statusCode(200)
+                .extract()
+                .body()
+                .jsonPath()
+                .get();
     }
 }
diff --git 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2TraceProcessorsIT.java
similarity index 74%
copy from 
integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
copy to 
integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2TraceProcessorsIT.java
index 7722741cf6..512e2c2c85 100644
--- 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
+++ 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2TraceProcessorsIT.java
@@ -16,14 +16,8 @@
  */
 package org.apache.camel.quarkus.component.opentelemetry2.it;
 
-import org.apache.camel.builder.RouteBuilder;
+import io.quarkus.test.junit.QuarkusIntegrationTest;
 
-public class OpenTelemetry2RouteBuilder extends RouteBuilder {
-
-    @Override
-    public void configure() throws Exception {
-        from("direct:start")
-                .setBody().constant("Traced direct:start")
-                .to("log:info");
-    }
+@QuarkusIntegrationTest
+class OpenTelemetry2TraceProcessorsIT extends 
OpenTelemetry2TraceProcessorsTest {
 }
diff --git 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2TraceProcessorsTest.java
similarity index 53%
copy from 
integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
copy to 
integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2TraceProcessorsTest.java
index f1f0ff8287..5ad4c87340 100644
--- 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
+++ 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2TraceProcessorsTest.java
@@ -16,50 +16,59 @@
  */
 package org.apache.camel.quarkus.component.opentelemetry2.it;
 
-import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
+import io.opentelemetry.api.trace.SpanKind;
 import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
 import io.restassured.RestAssured;
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 
+import static 
org.apache.camel.quarkus.component.opentelemetry2.it.OpenTelemetry2TestHelper.getSpans;
 import static org.awaitility.Awaitility.await;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+@TestProfile(TraceProcessorsTestProfile.class)
 @QuarkusTest
-class Opentelemetry2Test {
-
-    static List<Map<String, String>> getSpans() {
-        return RestAssured.given()
-                .get("/opentelemetry2/exporter/spans")
+class OpenTelemetry2TraceProcessorsTest {
+    @AfterEach
+    public void afterEach() {
+        RestAssured.post("/opentelemetry2/exporter/spans/reset")
                 .then()
-                .statusCode(200)
-                .extract()
-                .body()
-                .jsonPath()
-                .get();
+                .statusCode(204);
     }
 
     @Test
-    public void testTracedCamelRoute() throws IOException, 
InterruptedException {
+    void traceProcessors() {
         RestAssured.get("/opentelemetry2/trace")
                 .then()
                 .statusCode(200)
                 .body(equalTo("Traced direct:start"));
 
-        await().atMost(30, TimeUnit.SECONDS).pollDelay(50, 
TimeUnit.MILLISECONDS).until(() -> getSpans().size() == 3);
+        // Verify the span hierarchy is JAX-RS Service -> Direct Endpoint -> 
SetBody
+        await().atMost(30, TimeUnit.SECONDS).pollDelay(50, 
TimeUnit.MILLISECONDS).until(() -> {
+            List<Map<String, String>> spans = getSpans();
+            return spans.size() == 4;
+        });
+
         List<Map<String, String>> spans = getSpans();
-        assertEquals(3, spans.size());
-        //Same trace
-        assertEquals(spans.get(2).get("traceId"), spans.get(1).get("traceId"));
-        assertEquals(spans.get(2).get("traceId"), spans.get(0).get("traceId"));
-        // Parent relationship
-        assertEquals("0000000000000000", spans.get(2).get("parentId"));
-        assertEquals(spans.get(2).get("spanId"), spans.get(1).get("parentId"));
+        assertEquals(4, spans.size());
+        assertEquals(SpanKind.INTERNAL.name(), spans.get(0).get("kind"));
+        assertEquals("setBody3-setBody", spans.get(0).get("component"));
         assertEquals(spans.get(1).get("spanId"), spans.get(0).get("parentId"));
-    }
+        assertEquals(SpanKind.INTERNAL.name(), spans.get(1).get("kind"));
+        assertEquals(spans.get(2).get("spanId"), spans.get(1).get("parentId"));
+        assertEquals(SpanKind.INTERNAL.name(), spans.get(2).get("kind"));
 
+        // TODO: Restore this assertion - 
https://github.com/apache/camel-quarkus/issues/7813
+        // assertEquals(spans.get(2).get("parentId"), 
spans.get(3).get("spanId"));
+
+        // TODO: See above - remove this assertion. For now we expect the the 
JAX-RS service span to be disconnected
+        assertEquals(spans.get(3).get("parentId"), "0000000000000000");
+        assertEquals(SpanKind.SERVER.name(), spans.get(3).get("kind"));
+    }
 }
diff --git 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
index f1f0ff8287..a55c143632 100644
--- 
a/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
+++ 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/Opentelemetry2Test.java
@@ -16,50 +16,140 @@
  */
 package org.apache.camel.quarkus.component.opentelemetry2.it;
 
-import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
+import io.opentelemetry.api.trace.SpanKind;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+import static 
io.opentelemetry.semconv.incubating.CodeIncubatingAttributes.CODE_FUNCTION_NAME;
+import static 
org.apache.camel.quarkus.component.opentelemetry2.it.OpenTelemetry2TestHelper.getSpans;
 import static org.awaitility.Awaitility.await;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 @QuarkusTest
 class Opentelemetry2Test {
 
-    static List<Map<String, String>> getSpans() {
-        return RestAssured.given()
-                .get("/opentelemetry2/exporter/spans")
+    @AfterEach
+    public void afterEach() {
+        RestAssured.post("/opentelemetry2/exporter/spans/reset")
                 .then()
-                .statusCode(200)
-                .extract()
-                .body()
-                .jsonPath()
-                .get();
+                .statusCode(204);
+    }
+
+    @Disabled("https://github.com/apache/camel-quarkus/issues/7813";)
+    @Test
+    public void testTraceRoute() {
+        // Generate messages
+        for (int i = 0; i < 5; i++) {
+            RestAssured.get("/opentelemetry2/test/trace/")
+                    .then()
+                    .statusCode(200);
+
+            // No spans should be recorded for this route as they are excluded 
by camel.opentelemetry2.exclude-patterns in
+            // application.properties
+            // TODO: Reinstate this when platform-http route excludes are 
fixed. For now, a timer endpoint stands in for filter tests
+            // https://github.com/apache/camel-quarkus/issues/2897
+            // RestAssured.get("/opentelemetry2/test/trace/filtered")
+            //        .then()
+            //        .statusCode(200);
+        }
+
+        // Retrieve recorded spans
+        await().atMost(30, TimeUnit.SECONDS).pollDelay(50, 
TimeUnit.MILLISECONDS).until(() -> getSpans().size() == 5);
+        List<Map<String, String>> spans = getSpans();
+        assertEquals(5, spans.size());
+
+        for (Map<String, String> span : spans) {
+            assertEquals("camel-platform-http", span.get("component"));
+            assertEquals("200", span.get("http.status_code"));
+            assertEquals("GET", span.get("http.method"));
+            
assertEquals("platform-http:///opentelemetry2/test/trace?httpMethodRestrict=GET";,
 span.get("camel.uri"));
+            
assertTrue(span.get("http.url").endsWith("/opentelemetry2/test/trace/"));
+        }
     }
 
+    @Disabled("https://github.com/apache/camel-quarkus/issues/7813";)
     @Test
-    public void testTracedCamelRoute() throws IOException, 
InterruptedException {
+    public void testTracedCamelRouteInvokedFromJaxRsService() {
         RestAssured.get("/opentelemetry2/trace")
                 .then()
                 .statusCode(200)
                 .body(equalTo("Traced direct:start"));
 
+        // Verify the span hierarchy is JAX-RS Service -> Direct Endpoint
         await().atMost(30, TimeUnit.SECONDS).pollDelay(50, 
TimeUnit.MILLISECONDS).until(() -> getSpans().size() == 3);
         List<Map<String, String>> spans = getSpans();
         assertEquals(3, spans.size());
-        //Same trace
-        assertEquals(spans.get(2).get("traceId"), spans.get(1).get("traceId"));
-        assertEquals(spans.get(2).get("traceId"), spans.get(0).get("traceId"));
-        // Parent relationship
-        assertEquals("0000000000000000", spans.get(2).get("parentId"));
-        assertEquals(spans.get(2).get("spanId"), spans.get(1).get("parentId"));
-        assertEquals(spans.get(1).get("spanId"), spans.get(0).get("parentId"));
+        assertEquals(spans.get(0).get("parentId"), spans.get(1).get("spanId"));
+        assertEquals(SpanKind.CLIENT.name(), spans.get(1).get("kind"));
+        assertEquals(SpanKind.SERVER.name(), spans.get(2).get("kind"));
+    }
+
+    @Test
+    public void testTracedBean() {
+        String name = "Camel Quarkus OpenTelemetry";
+        RestAssured.get("/opentelemetry2/greet/" + name)
+                .then()
+                .statusCode(200)
+                .body(equalTo("Hello " + name));
+
+        // Verify the span hierarchy is JAX-RS Service -> Direct Endpoint -> 
Bean Method
+        await().atMost(30, TimeUnit.SECONDS).pollDelay(50, 
TimeUnit.MILLISECONDS).until(() -> getSpans().size() == 5);
+        List<Map<String, String>> spans = getSpans();
+        assertEquals(5, 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(spans.get(2).get("parentId"), spans.get(3).get("spanId"));
+        assertEquals(SpanKind.INTERNAL.name(), spans.get(3).get("kind"));
+        assertEquals(SpanKind.SERVER.name(), spans.get(4).get("kind"));
     }
 
+    @Test
+    public void testTracedJdbcQuery() {
+        String timestamp = RestAssured.get("/opentelemetry2/jdbc/query")
+                .then()
+                .statusCode(200)
+                .extract()
+                .body()
+                .asString();
+
+        assertTrue(Long.parseLong(timestamp) > 0);
+
+        // Verify the span hierarchy is JAX-RS Service -> Direct Endpoint -> 
Bean Endpoint -> Bean method -> JDBC query
+        await().atMost(30, TimeUnit.SECONDS).pollDelay(50, 
TimeUnit.MILLISECONDS).until(() -> getSpans().size() == 6);
+        List<Map<String, String>> spans = getSpans();
+        assertEquals(6, spans.size());
+        assertEquals(spans.get(0).get("parentId"), 
spans.get(1).get("parentId"));
+        assertEquals("getConnection", spans.get(0).get("code.function"));
+
+        assertEquals(spans.get(1).get("parentId"), spans.get(2).get("spanId"));
+        assertEquals("SELECT", spans.get(1).get("db.operation"));
+
+        assertEquals(spans.get(2).get("parentId"), spans.get(3).get("spanId"));
+        assertEquals("bean://jdbcQueryBean", spans.get(2).get("camel.uri"));
+
+        assertEquals(spans.get(3).get("parentId"), spans.get(4).get("spanId"));
+        assertEquals("direct://jdbcQuery", spans.get(3).get("camel.uri"));
+        assertEquals("EVENT_RECEIVED", spans.get(3).get("op"));
+
+        // TODO: Restore this assertion - 
https://github.com/apache/camel-quarkus/issues/7813
+        // assertEquals(spans.get(4).get("parentId"), 
spans.get(5).get("spanId"));
+
+        // TODO: See above - remove this assertion. For now we expect the the 
JAX-RS service and the direct:jdbcQuery spans to be disconnected
+        assertEquals(spans.get(4).get("parentId"), "0000000000000000");
+        assertEquals("direct://jdbcQuery", spans.get(4).get("camel.uri"));
+        assertEquals("EVENT_SENT", spans.get(4).get("op"));
+
+        assertEquals(spans.get(5).get("parentId"), "0000000000000000");
+        
assertEquals("org.apache.camel.quarkus.component.opentelemetry2.it.OpenTelemetry2Resource.jdbcQuery",
+                spans.get(5).get(CODE_FUNCTION_NAME.getKey()));
+    }
 }
diff --git 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/TraceProcessorsTestProfile.java
similarity index 76%
copy from 
integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
copy to 
integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/TraceProcessorsTestProfile.java
index 7722741cf6..7a8056215b 100644
--- 
a/integration-tests/opentelemetry2/src/main/java/org/apache/camel/quarkus/component/opentelemetry2/it/OpenTelemetry2RouteBuilder.java
+++ 
b/integration-tests/opentelemetry2/src/test/java/org/apache/camel/quarkus/component/opentelemetry2/it/TraceProcessorsTestProfile.java
@@ -16,14 +16,13 @@
  */
 package org.apache.camel.quarkus.component.opentelemetry2.it;
 
-import org.apache.camel.builder.RouteBuilder;
+import java.util.Map;
 
-public class OpenTelemetry2RouteBuilder extends RouteBuilder {
+import io.quarkus.test.junit.QuarkusTestProfile;
 
+public class TraceProcessorsTestProfile implements QuarkusTestProfile {
     @Override
-    public void configure() throws Exception {
-        from("direct:start")
-                .setBody().constant("Traced direct:start")
-                .to("log:info");
+    public Map<String, String> getConfigOverrides() {
+        return Map.of("quarkus.camel.opentelemetry2.trace-processors", "true");
     }
 }

Reply via email to