Skip to content

Commit ce4fdfb

Browse files
committed
add test brigde for exporters
1 parent 16c01d2 commit ce4fdfb

File tree

10 files changed

+177
-0
lines changed

10 files changed

+177
-0
lines changed

instrumentation/methods/javaagent/src/declarativeConfigTest/resources/declarative-config.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,28 @@
11
file_format: "0.4"
2+
tracer_provider:
3+
processors:
4+
- simple:
5+
exporter:
6+
test_bridge: { }
7+
- simple:
8+
exporter:
9+
console: { }
10+
11+
logger_provider:
12+
processors:
13+
- simple:
14+
exporter:
15+
test_bridge: { }
16+
17+
meter_provider:
18+
readers:
19+
- periodic:
20+
# Set really long interval. We'll call forceFlush when we need the metrics
21+
# instead of collecting them periodically.
22+
interval: 1000000
23+
exporter:
24+
test_bridge: { }
25+
226
instrumentation/development:
327
java:
428
methods:

testing-common/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ dependencies {
6969
implementation("org.slf4j:jul-to-slf4j")
7070
implementation("io.opentelemetry:opentelemetry-exporter-logging")
7171
implementation("io.opentelemetry.contrib:opentelemetry-baggage-processor")
72+
implementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi")
7273
api(project(":instrumentation-api-incubator"))
7374

7475
annotationProcessor("com.google.auto.service:auto-service")

testing-common/src/main/java/io/opentelemetry/instrumentation/testing/LibraryTestRunner.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import io.opentelemetry.api.GlobalOpenTelemetry;
1111
import io.opentelemetry.api.OpenTelemetry;
1212
import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator;
13+
import io.opentelemetry.api.incubator.config.GlobalConfigProvider;
1314
import io.opentelemetry.api.logs.LoggerProvider;
1415
import io.opentelemetry.api.metrics.MeterProvider;
1516
import io.opentelemetry.api.trace.TracerBuilder;
@@ -20,6 +21,9 @@
2021
import io.opentelemetry.context.propagation.TextMapPropagator;
2122
import io.opentelemetry.contrib.baggage.processor.BaggageSpanProcessor;
2223
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
24+
import io.opentelemetry.instrumentation.testing.provider.TestBridgeLogRecordExporterComponentProvider;
25+
import io.opentelemetry.instrumentation.testing.provider.TestBridgeMetricExporterComponentProvider;
26+
import io.opentelemetry.instrumentation.testing.provider.TestBridgeSpanExporterComponentProvider;
2327
import io.opentelemetry.sdk.OpenTelemetrySdk;
2428
import io.opentelemetry.sdk.common.CompletableResultCode;
2529
import io.opentelemetry.sdk.logs.SdkLoggerProvider;
@@ -59,10 +63,14 @@ public final class LibraryTestRunner extends InstrumentationTestRunner {
5963

6064
static {
6165
GlobalOpenTelemetry.resetForTest();
66+
GlobalConfigProvider.resetForTest();
6267

6368
testSpanExporter = InMemorySpanExporter.create();
6469
testMetricExporter = InMemoryMetricExporter.create(AggregationTemporality.DELTA);
6570
testLogRecordExporter = InMemoryLogRecordExporter.create();
71+
TestBridgeSpanExporterComponentProvider.setSpanExporter(testSpanExporter);
72+
TestBridgeMetricExporterComponentProvider.setMetricExporter(testMetricExporter);
73+
TestBridgeLogRecordExporterComponentProvider.setLogRecordExporter(testLogRecordExporter);
6674

6775
metricReader =
6876
PeriodicMetricReader.builder(testMetricExporter)
@@ -112,6 +120,7 @@ private LibraryTestRunner() {
112120
public void beforeTestClass() {
113121
// just in case: if there was any test that modified the global instance, reset it
114122
GlobalOpenTelemetry.resetForTest();
123+
GlobalConfigProvider.resetForTest();
115124
GlobalOpenTelemetry.set(openTelemetrySdk);
116125
}
117126

testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ public final void waitAndAssertMetrics(
9595
}
9696

9797
@SafeVarargs
98+
@SuppressWarnings("varargs")
9899
public final void waitAndAssertMetrics(
99100
String instrumentationName, Consumer<MetricAssert>... assertions) {
100101
testRunner.waitAndAssertMetrics(instrumentationName, assertions);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.testing.provider;
7+
8+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
10+
import io.opentelemetry.sdk.logs.export.LogRecordExporter;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
public class TestBridgeLogRecordExporterComponentProvider
15+
implements ComponentProvider<LogRecordExporter> {
16+
17+
private static final Logger logger =
18+
LoggerFactory.getLogger(TestBridgeLogRecordExporterComponentProvider.class);
19+
20+
private static LogRecordExporter logRecordExporter;
21+
22+
@Override
23+
public Class<LogRecordExporter> getType() {
24+
return LogRecordExporter.class;
25+
}
26+
27+
@Override
28+
public String getName() {
29+
return "test_bridge";
30+
}
31+
32+
@Override
33+
public LogRecordExporter create(DeclarativeConfigProperties config) {
34+
return logRecordExporter;
35+
}
36+
37+
public static void setLogRecordExporter(LogRecordExporter logRecordExporter) {
38+
logger.info(
39+
"Setting TestLogRecordExporterComponentProvider logRecord exporter to {}",
40+
logRecordExporter.getClass().getName());
41+
TestBridgeLogRecordExporterComponentProvider.logRecordExporter = logRecordExporter;
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.testing.provider;
7+
8+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
10+
import io.opentelemetry.sdk.metrics.export.MetricExporter;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
public class TestBridgeMetricExporterComponentProvider
15+
implements ComponentProvider<MetricExporter> {
16+
17+
private static final Logger logger =
18+
LoggerFactory.getLogger(TestBridgeMetricExporterComponentProvider.class);
19+
20+
private static MetricExporter metricExporter;
21+
22+
@Override
23+
public Class<MetricExporter> getType() {
24+
return MetricExporter.class;
25+
}
26+
27+
@Override
28+
public String getName() {
29+
return "test_bridge";
30+
}
31+
32+
@Override
33+
public MetricExporter create(DeclarativeConfigProperties config) {
34+
return metricExporter;
35+
}
36+
37+
public static void setMetricExporter(MetricExporter metricExporter) {
38+
logger.info(
39+
"Setting TestMetricExporterComponentProvider metric exporter to {}",
40+
metricExporter.getClass().getName());
41+
TestBridgeMetricExporterComponentProvider.metricExporter = metricExporter;
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.testing.provider;
7+
8+
import io.opentelemetry.api.incubator.config.DeclarativeConfigProperties;
9+
import io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider;
10+
import io.opentelemetry.sdk.trace.export.SpanExporter;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
public class TestBridgeSpanExporterComponentProvider implements ComponentProvider<SpanExporter> {
15+
16+
private static final Logger logger =
17+
LoggerFactory.getLogger(TestBridgeSpanExporterComponentProvider.class);
18+
19+
private static SpanExporter spanExporter;
20+
21+
@Override
22+
public Class<SpanExporter> getType() {
23+
return SpanExporter.class;
24+
}
25+
26+
@Override
27+
public String getName() {
28+
return "test_bridge";
29+
}
30+
31+
@Override
32+
public SpanExporter create(DeclarativeConfigProperties config) {
33+
return spanExporter;
34+
}
35+
36+
public static void setSpanExporter(SpanExporter spanExporter) {
37+
logger.info(
38+
"Setting TestSpanExporterComponentProvider span exporter to {}",
39+
spanExporter.getClass().getName());
40+
TestBridgeSpanExporterComponentProvider.spanExporter = spanExporter;
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
io.opentelemetry.instrumentation.testing.provider.TestBridgeSpanExporterComponentProvider
2+
io.opentelemetry.instrumentation.testing.provider.TestBridgeMetricExporterComponentProvider
3+
io.opentelemetry.instrumentation.testing.provider.TestBridgeLogRecordExporterComponentProvider
4+

testing/agent-exporter/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ dependencies {
1515
compileOnly(project(":javaagent-extension-api"))
1616
compileOnly(project(":javaagent-bootstrap"))
1717
compileOnly(project(":javaagent-tooling"))
18+
implementation(project(":testing-common"))
1819

1920
implementation("io.opentelemetry:opentelemetry-exporter-otlp-common")
2021
compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")

testing/agent-exporter/src/main/java/io/opentelemetry/javaagent/testing/exporter/AgentTestingExporterFactory.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
package io.opentelemetry.javaagent.testing.exporter;
77

8+
import io.opentelemetry.instrumentation.testing.provider.TestBridgeLogRecordExporterComponentProvider;
9+
import io.opentelemetry.instrumentation.testing.provider.TestBridgeMetricExporterComponentProvider;
10+
import io.opentelemetry.instrumentation.testing.provider.TestBridgeSpanExporterComponentProvider;
811
import java.util.List;
912
import java.util.concurrent.TimeUnit;
1013

@@ -14,6 +17,12 @@ public final class AgentTestingExporterFactory {
1417
static final OtlpInMemoryMetricExporter metricExporter = new OtlpInMemoryMetricExporter();
1518
static final OtlpInMemoryLogRecordExporter logExporter = new OtlpInMemoryLogRecordExporter();
1619

20+
static {
21+
TestBridgeSpanExporterComponentProvider.setSpanExporter(spanExporter);
22+
TestBridgeMetricExporterComponentProvider.setMetricExporter(metricExporter);
23+
TestBridgeLogRecordExporterComponentProvider.setLogRecordExporter(logExporter);
24+
}
25+
1726
public static List<byte[]> getSpanExportRequests() {
1827
return spanExporter.getCollectedExportRequests();
1928
}

0 commit comments

Comments
 (0)