This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 8959a774b762 CAMEL-23711: Add automated tests and harden
camel-test-infra-jaeger (#24143)
8959a774b762 is described below
commit 8959a774b76215d07f76e231fd3ae933909d9289
Author: Adriano Machado <[email protected]>
AuthorDate: Fri Jun 19 15:42:10 2026 -0400
CAMEL-23711: Add automated tests and harden camel-test-infra-jaeger (#24143)
- Fix JaegerTestApp run command: add -am so the reactor builds the
camel-test-infra-common snapshot before exec:java resolves the classpath
- Add JaegerServiceIT: end-to-end IT covering both OTLP HTTP and gRPC
transports (container → send trace → poll Jaeger query API → assert)
- Add JaegerRemoteInfraServiceTest: 11 unit tests for property parsing,
defaults, fail-fast host() check, and endpoint URL formatting
- Use skipITs instead of skipTests so unit tests always run; ITs remain
opt-in via -Djaeger-it-test profile
- Add @since 4.21 to all public types; improve Javadoc throughout
- Harden JaegerRemoteInfraService.host() to throw IllegalStateException
with an actionable message when jaeger.host is not set
Co-authored-by: Claude Sonnet 4.6 <[email protected]>
---
test-infra/camel-test-infra-jaeger/pom.xml | 42 +++++++
.../test/infra/jaeger/common/JaegerProperties.java | 3 +
.../infra/jaeger/services/JaegerContainer.java | 9 +-
.../infra/jaeger/services/JaegerInfraService.java | 3 +
.../services/JaegerLocalContainerInfraService.java | 3 +
.../jaeger/services/JaegerRemoteInfraService.java | 11 +-
.../test/infra/jaeger/services/JaegerService.java | 5 +-
.../jaeger/services/JaegerServiceFactory.java | 3 +
.../infra/jaeger/JaegerRemoteInfraServiceTest.java | 119 ++++++++++++++++++++
.../camel/test/infra/jaeger/JaegerServiceIT.java | 124 +++++++++++++++++++++
.../camel/test/infra/jaeger/JaegerTestApp.java | 7 +-
11 files changed, 324 insertions(+), 5 deletions(-)
diff --git a/test-infra/camel-test-infra-jaeger/pom.xml
b/test-infra/camel-test-infra-jaeger/pom.xml
index 7879f717edcf..35271dda5eb7 100644
--- a/test-infra/camel-test-infra-jaeger/pom.xml
+++ b/test-infra/camel-test-infra-jaeger/pom.xml
@@ -30,6 +30,11 @@
<artifactId>camel-test-infra-jaeger</artifactId>
<name>Camel :: Test Infra :: Jaeger</name>
+ <properties>
+ <!-- ITs require Docker; skip by default, opt in with -Djaeger-it-test
-->
+ <skipITs>true</skipITs>
+ </properties>
+
<dependencyManagement>
<dependencies>
<dependency>
@@ -58,6 +63,43 @@
<artifactId>opentelemetry-exporter-otlp</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.awaitility</groupId>
+ <artifactId>awaitility</artifactId>
+ <version>${awaitility-version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
+ <profiles>
+ <profile>
+ <id>jaeger-it-test</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ <property>
+ <name>jaeger-it-test</name>
+ </property>
+ </activation>
+ <properties>
+ <skipITs>false</skipITs>
+ </properties>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-failsafe-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>integration-test</goal>
+ <goal>verify</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+
</project>
diff --git
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/common/JaegerProperties.java
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/common/JaegerProperties.java
index d360baa43d93..5ce0ef66be58 100644
---
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/common/JaegerProperties.java
+++
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/common/JaegerProperties.java
@@ -16,6 +16,9 @@
*/
package org.apache.camel.test.infra.jaeger.common;
+/**
+ * @since 4.21
+ */
public final class JaegerProperties {
public static final String JAEGER_CONTAINER = "jaeger.container";
public static final String HOST = "jaeger.host";
diff --git
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerContainer.java
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerContainer.java
index ed54b5c34fed..60342ac6af70 100644
---
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerContainer.java
+++
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerContainer.java
@@ -22,6 +22,9 @@ import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.utility.DockerImageName;
+/**
+ * @since 4.21
+ */
public class JaegerContainer extends GenericContainer<JaegerContainer> {
public static final String CONTAINER_NAME = "jaeger";
@@ -52,8 +55,12 @@ public class JaegerContainer extends
GenericContainer<JaegerContainer> {
return this;
}
+ /**
+ * Creates a configured but unstarted Jaeger container with a custom image
and network alias.
+ *
+ * @return an unstarted container; the caller is responsible for starting
and closing it
+ */
@SuppressWarnings("resource")
- // NOTE: the object must be closed by the client.
public static JaegerContainer initContainer(String imageName, String
networkAlias) {
return new JaegerContainer(imageName) // NOSONAR
.withNetworkAliases(networkAlias)
diff --git
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerInfraService.java
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerInfraService.java
index a46a10fd62f5..d89088ea5b16 100644
---
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerInfraService.java
+++
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerInfraService.java
@@ -20,6 +20,8 @@ import
org.apache.camel.test.infra.common.services.InfrastructureService;
/**
* Test infra service for Jaeger distributed tracing
+ *
+ * @since 4.21
*/
public interface JaegerInfraService extends InfrastructureService {
@@ -31,6 +33,7 @@ public interface JaegerInfraService extends
InfrastructureService {
int queryUiPort();
+ // OTLP gRPC exporters expect an http(s):// URL per the OTel spec, not a
grpc:// scheme.
default String collectorGrpcEndpoint() {
return String.format("http://%s:%d", host(), collectorGrpcPort());
}
diff --git
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerLocalContainerInfraService.java
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerLocalContainerInfraService.java
index ff1e59defcdc..94fa4c279dc7 100644
---
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerLocalContainerInfraService.java
+++
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerLocalContainerInfraService.java
@@ -23,6 +23,9 @@ import
org.apache.camel.test.infra.jaeger.common.JaegerProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/**
+ * @since 4.21
+ */
@InfraService(service = JaegerInfraService.class,
description = "Jaeger is a distributed tracing backend with OTLP
collector and UI",
serviceAlias = { "jaeger" })
diff --git
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerRemoteInfraService.java
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerRemoteInfraService.java
index 102ec37e3c00..2100d8757dff 100644
---
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerRemoteInfraService.java
+++
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerRemoteInfraService.java
@@ -18,6 +18,9 @@ package org.apache.camel.test.infra.jaeger.services;
import org.apache.camel.test.infra.jaeger.common.JaegerProperties;
+/**
+ * @since 4.21
+ */
public class JaegerRemoteInfraService implements JaegerInfraService {
@Override
@@ -37,7 +40,13 @@ public class JaegerRemoteInfraService implements
JaegerInfraService {
@Override
public String host() {
- return System.getProperty(JaegerProperties.HOST);
+ String host = System.getProperty(JaegerProperties.HOST);
+ if (host == null) {
+ throw new IllegalStateException(
+ "Remote Jaeger selected but system property '" +
JaegerProperties.HOST
+ + "' is not set. Set it (and
optionally the port properties) to point at the remote Jaeger instance.");
+ }
+ return host;
}
@Override
diff --git
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerService.java
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerService.java
index 23684423878f..619834128944 100644
---
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerService.java
+++
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerService.java
@@ -20,7 +20,10 @@ import
org.apache.camel.test.infra.common.services.ContainerTestService;
import org.apache.camel.test.infra.common.services.TestService;
/**
- * Test infra service for Jaeger
+ * JUnit 5 extension-facing service for Jaeger; combines the infra endpoint
contract with the TestService lifecycle
+ * (BeforeAllCallback / AfterAllCallback) so it can be used directly with
{@code @RegisterExtension}.
+ *
+ * @since 4.21
*/
public interface JaegerService extends TestService, JaegerInfraService,
ContainerTestService {
}
diff --git
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerServiceFactory.java
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerServiceFactory.java
index 112af427f8f3..7880f6f73195 100644
---
a/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerServiceFactory.java
+++
b/test-infra/camel-test-infra-jaeger/src/main/java/org/apache/camel/test/infra/jaeger/services/JaegerServiceFactory.java
@@ -18,6 +18,9 @@ package org.apache.camel.test.infra.jaeger.services;
import org.apache.camel.test.infra.common.services.SimpleTestServiceBuilder;
+/**
+ * @since 4.21
+ */
public final class JaegerServiceFactory {
private JaegerServiceFactory() {
}
diff --git
a/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerRemoteInfraServiceTest.java
b/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerRemoteInfraServiceTest.java
new file mode 100644
index 000000000000..e179bd517e92
--- /dev/null
+++
b/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerRemoteInfraServiceTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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.test.infra.jaeger;
+
+import org.apache.camel.test.infra.jaeger.common.JaegerProperties;
+import org.apache.camel.test.infra.jaeger.services.JaegerRemoteInfraService;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * @since 4.21
+ */
+class JaegerRemoteInfraServiceTest {
+
+ private JaegerRemoteInfraService service;
+
+ @BeforeEach
+ void setUp() {
+ service = new JaegerRemoteInfraService();
+ }
+
+ @AfterEach
+ void tearDown() {
+ System.clearProperty(JaegerProperties.HOST);
+ System.clearProperty(JaegerProperties.COLLECTOR_GRPC_PORT);
+ System.clearProperty(JaegerProperties.COLLECTOR_HTTP_PORT);
+ System.clearProperty(JaegerProperties.QUERY_UI_PORT);
+ service.shutdown();
+ }
+
+ @Test
+ void hostReturnsValueFromSystemProperty() {
+ System.setProperty(JaegerProperties.HOST, "my-jaeger-host");
+ assertEquals("my-jaeger-host", service.host());
+ }
+
+ @Test
+ void hostThrowsWhenPropertyNotSet() {
+ IllegalStateException ex = assertThrows(IllegalStateException.class,
() -> service.host());
+ assertTrue(ex.getMessage().contains(JaegerProperties.HOST));
+ }
+
+ @Test
+ void collectorGrpcPortReturnsDefaultWhenNotSet() {
+ assertEquals(JaegerProperties.DEFAULT_COLLECTOR_GRPC_PORT,
service.collectorGrpcPort());
+ }
+
+ @Test
+ void collectorGrpcPortReturnsValueFromSystemProperty() {
+ System.setProperty(JaegerProperties.COLLECTOR_GRPC_PORT, "9317");
+ assertEquals(9317, service.collectorGrpcPort());
+ }
+
+ @Test
+ void collectorHttpPortReturnsDefaultWhenNotSet() {
+ assertEquals(JaegerProperties.DEFAULT_COLLECTOR_HTTP_PORT,
service.collectorHttpPort());
+ }
+
+ @Test
+ void collectorHttpPortReturnsValueFromSystemProperty() {
+ System.setProperty(JaegerProperties.COLLECTOR_HTTP_PORT, "9318");
+ assertEquals(9318, service.collectorHttpPort());
+ }
+
+ @Test
+ void queryUiPortReturnsDefaultWhenNotSet() {
+ assertEquals(JaegerProperties.DEFAULT_QUERY_UI_PORT,
service.queryUiPort());
+ }
+
+ @Test
+ void queryUiPortReturnsValueFromSystemProperty() {
+ System.setProperty(JaegerProperties.QUERY_UI_PORT, "18686");
+ assertEquals(18686, service.queryUiPort());
+ }
+
+ @Test
+ void collectorGrpcEndpointFormatsCorrectly() {
+ System.setProperty(JaegerProperties.HOST, "my-jaeger-host");
+ System.setProperty(JaegerProperties.COLLECTOR_GRPC_PORT, "9317");
+ assertEquals("http://my-jaeger-host:9317",
service.collectorGrpcEndpoint());
+ // Verify the OTel-required http:// scheme is used, not grpc://
+ assertFalse(service.collectorGrpcEndpoint().startsWith("grpc://"),
+ "OTLP gRPC endpoint must use http:// scheme, not grpc://");
+ }
+
+ @Test
+ void collectorHttpEndpointFormatsCorrectly() {
+ System.setProperty(JaegerProperties.HOST, "my-jaeger-host");
+ System.setProperty(JaegerProperties.COLLECTOR_HTTP_PORT, "9318");
+ assertEquals("http://my-jaeger-host:9318",
service.collectorHttpEndpoint());
+ }
+
+ @Test
+ void queryUiUrlFormatsCorrectly() {
+ System.setProperty(JaegerProperties.HOST, "my-jaeger-host");
+ System.setProperty(JaegerProperties.QUERY_UI_PORT, "18686");
+ assertEquals("http://my-jaeger-host:18686", service.queryUiUrl());
+ }
+}
diff --git
a/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerServiceIT.java
b/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerServiceIT.java
new file mode 100644
index 000000000000..33d9643ef907
--- /dev/null
+++
b/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerServiceIT.java
@@ -0,0 +1,124 @@
+/*
+ * 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.test.infra.jaeger;
+
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.util.concurrent.TimeUnit;
+
+import io.opentelemetry.api.common.AttributeKey;
+import io.opentelemetry.api.common.Attributes;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.api.trace.Tracer;
+import io.opentelemetry.exporter.otlp.http.trace.OtlpHttpSpanExporter;
+import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
+import io.opentelemetry.sdk.OpenTelemetrySdk;
+import io.opentelemetry.sdk.common.CompletableResultCode;
+import io.opentelemetry.sdk.resources.Resource;
+import io.opentelemetry.sdk.trace.SdkTracerProvider;
+import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
+import io.opentelemetry.sdk.trace.export.SpanExporter;
+import org.apache.camel.test.infra.jaeger.services.JaegerService;
+import org.apache.camel.test.infra.jaeger.services.JaegerServiceFactory;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import static org.awaitility.Awaitility.await;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * @since 4.21
+ */
+class JaegerServiceIT {
+
+ @RegisterExtension
+ static JaegerService service = JaegerServiceFactory.createService();
+
+ private static final HttpClient HTTP_CLIENT = HttpClient.newHttpClient();
+
+ @Test
+ void shouldReceiveTraceViaOtlpHttp() throws Exception {
+ final String serviceName = "camel-jaeger-it-http";
+ final String operationName = "http-test-operation";
+
+ try (OtlpHttpSpanExporter exporter = OtlpHttpSpanExporter.builder()
+ .setEndpoint(service.collectorHttpEndpoint() + "/v1/traces")
+ .build()) {
+ sendAndFlushTrace(exporter, serviceName, operationName);
+ }
+
+ assertTraceReceived(serviceName, operationName);
+ }
+
+ @Test
+ void shouldReceiveTraceViaOtlpGrpc() throws Exception {
+ final String serviceName = "camel-jaeger-it-grpc";
+ final String operationName = "grpc-test-operation";
+
+ try (OtlpGrpcSpanExporter exporter = OtlpGrpcSpanExporter.builder()
+ .setEndpoint(service.collectorGrpcEndpoint())
+ .build()) {
+ sendAndFlushTrace(exporter, serviceName, operationName);
+ }
+
+ assertTraceReceived(serviceName, operationName);
+ }
+
+ private static void sendAndFlushTrace(SpanExporter exporter, String
serviceName, String operationName)
+ throws Exception {
+ Resource resource = Resource.getDefault().merge(
+
Resource.create(Attributes.of(AttributeKey.stringKey("service.name"),
serviceName)));
+
+ try (SdkTracerProvider tracerProvider = SdkTracerProvider.builder()
+ .addSpanProcessor(SimpleSpanProcessor.create(exporter))
+ .setResource(resource)
+ .build();
+ OpenTelemetrySdk sdk = OpenTelemetrySdk.builder()
+ .setTracerProvider(tracerProvider)
+ .build()) {
+ Tracer tracer = sdk.getTracer(serviceName);
+ Span span = tracer.spanBuilder(operationName)
+ .setAttribute("test.key", "test-value")
+ .startSpan();
+ span.end();
+
+ CompletableResultCode flushResult =
tracerProvider.forceFlush().join(10, TimeUnit.SECONDS);
+ assertTrue(flushResult.isSuccess(), "Span flush timed out or
failed after 10 seconds");
+ }
+ }
+
+ private static void assertTraceReceived(String serviceName, String
operationName) {
+ String queryUrl = service.queryUiUrl() + "/api/traces?service=" +
serviceName + "&limit=10";
+
+ await().atMost(30, TimeUnit.SECONDS)
+ .pollInterval(1, TimeUnit.SECONDS)
+ .untilAsserted(() -> {
+ HttpResponse<String> response = HTTP_CLIENT.send(
+
HttpRequest.newBuilder(URI.create(queryUrl)).GET().build(),
+ HttpResponse.BodyHandlers.ofString());
+ assertEquals(200, response.statusCode());
+ String body = response.body();
+ assertTrue(body.contains(operationName),
+ "Expected '" + operationName + "' in Jaeger
response but got: " + body);
+ assertTrue(body.contains("test-value"),
+ "Expected span attribute 'test-value' in Jaeger
response but got: " + body);
+ });
+ }
+}
diff --git
a/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerTestApp.java
b/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerTestApp.java
index e6cf51c870ce..c2475c7cff48 100644
---
a/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerTestApp.java
+++
b/test-infra/camel-test-infra-jaeger/src/test/java/org/apache/camel/test/infra/jaeger/JaegerTestApp.java
@@ -35,9 +35,12 @@ import
org.apache.camel.test.infra.jaeger.services.JaegerLocalContainerInfraServ
/**
* Manual test application that starts a Jaeger container, sends sample OTEL
traces, and waits for the user to press
* Enter before shutting down.
- *
+ * <p/>
* Run with: mvn test-compile exec:java
-Dexec.mainClass=org.apache.camel.test.infra.jaeger.JaegerTestApp
- * -Dexec.classpathScope=test -pl test-infra/camel-test-infra-jaeger
+ * -Dexec.classpathScope=test -pl test-infra/camel-test-infra-jaeger -am (-am
is required so the reactor builds the
+ * camel-test-infra-common snapshot before exec resolves the classpath)
+ *
+ * @since 4.21
*/
public final class JaegerTestApp {