Remove redundant Jaeger integration test (#3976)
This commit is contained in:
parent
b051012251
commit
16b4e54d7e
|
|
@ -8,8 +8,6 @@ description = "OpenTelemetry Integration Tests"
|
||||||
otelJava.moduleName.set("io.opentelemetry.integration.tests")
|
otelJava.moduleName.set("io.opentelemetry.integration.tests")
|
||||||
|
|
||||||
testSets {
|
testSets {
|
||||||
create("testJaeger")
|
|
||||||
|
|
||||||
libraries {
|
libraries {
|
||||||
create("testOtlpCommon")
|
create("testOtlpCommon")
|
||||||
}
|
}
|
||||||
|
|
@ -53,14 +51,10 @@ dependencies {
|
||||||
|
|
||||||
add("testOtlpRuntimeOnly", "io.grpc:grpc-netty-shaded")
|
add("testOtlpRuntimeOnly", "io.grpc:grpc-netty-shaded")
|
||||||
add("testOtlpRuntimeOnly", "io.grpc:grpc-stub")
|
add("testOtlpRuntimeOnly", "io.grpc:grpc-stub")
|
||||||
|
|
||||||
add("testJaegerImplementation", project(":exporters:jaeger"))
|
|
||||||
add("testJaegerImplementation", project(":semconv"))
|
|
||||||
add("testJaegerRuntimeOnly", "io.grpc:grpc-netty-shaded")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
check {
|
check {
|
||||||
dependsOn("testJaeger", "testOtlp", "testOtlpNoGrpcJava")
|
dependsOn("testOtlp", "testOtlpNoGrpcJava")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,130 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright The OpenTelemetry Authors
|
|
||||||
* SPDX-License-Identifier: Apache-2.0
|
|
||||||
*/
|
|
||||||
|
|
||||||
package io.opentelemetry.integrationtest;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import io.opentelemetry.api.OpenTelemetry;
|
|
||||||
import io.opentelemetry.api.trace.Span;
|
|
||||||
import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter;
|
|
||||||
import io.opentelemetry.sdk.OpenTelemetrySdk;
|
|
||||||
import io.opentelemetry.sdk.resources.Resource;
|
|
||||||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
|
||||||
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
|
|
||||||
import io.opentelemetry.semconv.resource.attributes.ResourceAttributes;
|
|
||||||
import java.time.Duration;
|
|
||||||
import okhttp3.OkHttpClient;
|
|
||||||
import okhttp3.Request;
|
|
||||||
import okhttp3.Response;
|
|
||||||
import org.awaitility.Awaitility;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.testcontainers.containers.GenericContainer;
|
|
||||||
import org.testcontainers.containers.wait.strategy.Wait;
|
|
||||||
import org.testcontainers.junit.jupiter.Container;
|
|
||||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
|
||||||
import org.testcontainers.utility.DockerImageName;
|
|
||||||
|
|
||||||
/** Integration test to verify that the Jaeger GRPC exporter works. */
|
|
||||||
@Testcontainers(disabledWithoutDocker = true)
|
|
||||||
class JaegerExporterIntegrationTest {
|
|
||||||
|
|
||||||
private static final ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
private static final OkHttpClient client = new OkHttpClient();
|
|
||||||
|
|
||||||
private static final int QUERY_PORT = 16686;
|
|
||||||
private static final int JAEGER_API_PORT = 14250;
|
|
||||||
private static final int HEALTH_PORT = 14269;
|
|
||||||
private static final String SERVICE_NAME = "integration test";
|
|
||||||
private static final String JAEGER_URL = "http://localhost";
|
|
||||||
|
|
||||||
@Container
|
|
||||||
public static GenericContainer<?> jaegerContainer =
|
|
||||||
new GenericContainer<>(
|
|
||||||
DockerImageName.parse("ghcr.io/open-telemetry/opentelemetry-java/jaeger"))
|
|
||||||
.withExposedPorts(JAEGER_API_PORT, QUERY_PORT, HEALTH_PORT)
|
|
||||||
.waitingFor(Wait.forHttp("/").forPort(HEALTH_PORT));
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void testJaegerExampleAppIntegration() {
|
|
||||||
OpenTelemetry openTelemetry =
|
|
||||||
initOpenTelemetry(
|
|
||||||
jaegerContainer.getHost(), jaegerContainer.getMappedPort(JAEGER_API_PORT));
|
|
||||||
myWonderfulUseCase(openTelemetry);
|
|
||||||
|
|
||||||
Awaitility.await()
|
|
||||||
.atMost(Duration.ofSeconds(30))
|
|
||||||
.until(JaegerExporterIntegrationTest::assertJaegerHasTheTrace);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Boolean assertJaegerHasTheTrace() {
|
|
||||||
try {
|
|
||||||
String url =
|
|
||||||
String.format(
|
|
||||||
"%s/api/traces?service=%s",
|
|
||||||
String.format(JAEGER_URL + ":%d", jaegerContainer.getMappedPort(QUERY_PORT)),
|
|
||||||
SERVICE_NAME);
|
|
||||||
|
|
||||||
Request request =
|
|
||||||
new Request.Builder()
|
|
||||||
.url(url)
|
|
||||||
.header("Content-Type", "application/json")
|
|
||||||
.header("Accept", "application/json")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
final JsonNode json;
|
|
||||||
try (Response response = client.newCall(request).execute()) {
|
|
||||||
json = objectMapper.readTree(response.body().byteStream());
|
|
||||||
}
|
|
||||||
|
|
||||||
return json.get("data").get(0).get("traceID") != null;
|
|
||||||
} catch (Exception e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static OpenTelemetry initOpenTelemetry(String ip, int port) {
|
|
||||||
// Export traces to Jaeger
|
|
||||||
JaegerGrpcSpanExporter jaegerExporter =
|
|
||||||
JaegerGrpcSpanExporter.builder()
|
|
||||||
.setEndpoint("http://" + ip + ":" + port)
|
|
||||||
.setTimeout(Duration.ofSeconds(30))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
// Set to process the spans by the Jaeger Exporter
|
|
||||||
return OpenTelemetrySdk.builder()
|
|
||||||
.setTracerProvider(
|
|
||||||
SdkTracerProvider.builder()
|
|
||||||
.addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))
|
|
||||||
.setResource(
|
|
||||||
Resource.getDefault().toBuilder()
|
|
||||||
.put(ResourceAttributes.SERVICE_NAME, "integration test")
|
|
||||||
.build())
|
|
||||||
.build())
|
|
||||||
.buildAndRegisterGlobal();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void myWonderfulUseCase(OpenTelemetry openTelemetry) {
|
|
||||||
// Generate a span
|
|
||||||
Span span =
|
|
||||||
openTelemetry
|
|
||||||
.getTracer("io.opentelemetry.SendTraceToJaeger")
|
|
||||||
.spanBuilder("Start my wonderful use case")
|
|
||||||
.startSpan();
|
|
||||||
span.addEvent("Event 0");
|
|
||||||
// execute my use case - here we simulate a wait
|
|
||||||
doWait();
|
|
||||||
span.addEvent("Event 1");
|
|
||||||
span.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void doWait() {
|
|
||||||
try {
|
|
||||||
Thread.sleep(1000);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
// catch
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue