|
65 | 65 | import io.opentelemetry.api.common.AttributeKey; |
66 | 66 | import io.opentelemetry.api.metrics.DoubleHistogram; |
67 | 67 | import io.opentelemetry.api.metrics.Meter; |
| 68 | +import io.opentelemetry.context.Context; |
| 69 | +import io.opentelemetry.context.propagation.TextMapSetter; |
68 | 70 | import io.opentelemetry.sdk.common.InstrumentationScopeInfo; |
69 | 71 | import io.opentelemetry.sdk.metrics.data.MetricData; |
70 | 72 | import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule; |
@@ -1245,7 +1247,8 @@ public void clientLocalityMetrics_present() { |
1245 | 1247 | OpenTelemetryMetricsResource resource = GrpcOpenTelemetry.createMetricInstruments(testMeter, |
1246 | 1248 | enabledMetricsMap, disableDefaultMetrics); |
1247 | 1249 | OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule( |
1248 | | - fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.locality"), emptyList()); |
| 1250 | + fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.locality"), |
| 1251 | + emptyList(), openTelemetryTesting.getOpenTelemetry().getPropagators()); |
1249 | 1252 | OpenTelemetryMetricsModule.CallAttemptsTracerFactory callAttemptsTracerFactory = |
1250 | 1253 | new CallAttemptsTracerFactory(module, target, method.getFullMethodName(), emptyList()); |
1251 | 1254 |
|
@@ -1313,7 +1316,8 @@ public void clientLocalityMetrics_missing() { |
1313 | 1316 | OpenTelemetryMetricsResource resource = GrpcOpenTelemetry.createMetricInstruments(testMeter, |
1314 | 1317 | enabledMetricsMap, disableDefaultMetrics); |
1315 | 1318 | OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule( |
1316 | | - fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.locality"), emptyList()); |
| 1319 | + fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.locality"), |
| 1320 | + emptyList(), openTelemetryTesting.getOpenTelemetry().getPropagators()); |
1317 | 1321 | OpenTelemetryMetricsModule.CallAttemptsTracerFactory callAttemptsTracerFactory = |
1318 | 1322 | new CallAttemptsTracerFactory(module, target, method.getFullMethodName(), emptyList()); |
1319 | 1323 |
|
@@ -1378,7 +1382,7 @@ public void clientBackendServiceMetrics_present() { |
1378 | 1382 | enabledMetricsMap, disableDefaultMetrics); |
1379 | 1383 | OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule( |
1380 | 1384 | fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.backend_service"), |
1381 | | - emptyList()); |
| 1385 | + emptyList(), openTelemetryTesting.getOpenTelemetry().getPropagators()); |
1382 | 1386 | OpenTelemetryMetricsModule.CallAttemptsTracerFactory callAttemptsTracerFactory = |
1383 | 1387 | new CallAttemptsTracerFactory(module, target, method.getFullMethodName(), emptyList()); |
1384 | 1388 |
|
@@ -1447,7 +1451,7 @@ public void clientBackendServiceMetrics_missing() { |
1447 | 1451 | enabledMetricsMap, disableDefaultMetrics); |
1448 | 1452 | OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule( |
1449 | 1453 | fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.backend_service"), |
1450 | | - emptyList()); |
| 1454 | + emptyList(), openTelemetryTesting.getOpenTelemetry().getPropagators()); |
1451 | 1455 | OpenTelemetryMetricsModule.CallAttemptsTracerFactory callAttemptsTracerFactory = |
1452 | 1456 | new CallAttemptsTracerFactory(module, target, method.getFullMethodName(), emptyList()); |
1453 | 1457 |
|
@@ -1631,37 +1635,39 @@ public void serverBasicMetrics() { |
1631 | 1635 |
|
1632 | 1636 | @Test |
1633 | 1637 | public void serverBaggagePropagationToMetrics() { |
1634 | | - // 1. Create module and tracer factory using the mock resource |
1635 | | - OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule( |
1636 | | - fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList()); |
1637 | | - ServerStreamTracer.Factory tracerFactory = module.getServerTracerFactory(); |
1638 | | - ServerStreamTracer tracer = |
1639 | | - tracerFactory.newServerStreamTracer(method.getFullMethodName(), new Metadata()); |
1640 | | - |
1641 | | - // 2. Define the test baggage and gRPC context |
| 1638 | + // 1. Define the test baggage |
1642 | 1639 | Baggage testBaggage = Baggage.builder() |
1643 | 1640 | .put("user-id", "67") |
1644 | 1641 | .build(); |
1645 | 1642 |
|
1646 | | - // This simulates the context that the Tracing module would have created |
1647 | | - io.grpc.Context grpcContext = io.grpc.Context.current() |
1648 | | - .withValue(OpenTelemetryConstants.BAGGAGE_KEY, testBaggage); |
| 1643 | + // 2. Inject baggage into headers |
| 1644 | + Metadata headers = new Metadata(); |
| 1645 | + openTelemetryTesting.getOpenTelemetry().getPropagators().getTextMapPropagator() |
| 1646 | + .inject(Context.root().with(testBaggage), headers, new TextMapSetter<Metadata>() { |
| 1647 | + @Override |
| 1648 | + public void set(Metadata carrier, String key, String value) { |
| 1649 | + carrier.put(Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER), value); |
| 1650 | + } |
| 1651 | + }); |
| 1652 | + |
| 1653 | + // 3. Create module and tracer factory using the mock resource |
| 1654 | + OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule( |
| 1655 | + fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(), |
| 1656 | + openTelemetryTesting.getOpenTelemetry().getPropagators()); |
| 1657 | + ServerStreamTracer.Factory tracerFactory = module.getServerTracerFactory(); |
| 1658 | + ServerStreamTracer tracer = tracerFactory.newServerStreamTracer(method.getFullMethodName(), |
| 1659 | + headers); |
1649 | 1660 |
|
1650 | | - // 3. Attach the gRPC context, trigger metric recording, and detach |
1651 | | - io.grpc.Context previousContext = grpcContext.attach(); |
1652 | | - try { |
1653 | | - tracer.streamClosed(Status.OK); |
1654 | | - } finally { |
1655 | | - grpcContext.detach(previousContext); |
1656 | | - } |
| 1661 | + // 4. Trigger metric recording |
| 1662 | + tracer.streamClosed(Status.OK); |
1657 | 1663 |
|
1658 | | - // 4. Verify the record call and capture the OTel Context |
| 1664 | + // 5. Verify the record call and capture the OTel Context |
1659 | 1665 | verify(mockServerCallDurationHistogram).record( |
1660 | 1666 | anyDouble(), |
1661 | 1667 | any(io.opentelemetry.api.common.Attributes.class), |
1662 | 1668 | contextCaptor.capture()); |
1663 | 1669 |
|
1664 | | - // 5. Assert on the captured OTel Context |
| 1670 | + // 6. Assert on the captured OTel Context |
1665 | 1671 | io.opentelemetry.context.Context capturedOtelContext = contextCaptor.getValue(); |
1666 | 1672 | Baggage capturedBaggage = Baggage.fromContext(capturedOtelContext); |
1667 | 1673 |
|
@@ -1802,13 +1808,15 @@ public void targetAttributeFilter_rejectsTarget_mapsToOther() { |
1802 | 1808 | private OpenTelemetryMetricsModule newOpenTelemetryMetricsModule( |
1803 | 1809 | OpenTelemetryMetricsResource resource) { |
1804 | 1810 | return new OpenTelemetryMetricsModule( |
1805 | | - fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList()); |
| 1811 | + fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(), |
| 1812 | + openTelemetryTesting.getOpenTelemetry().getPropagators()); |
1806 | 1813 | } |
1807 | 1814 |
|
1808 | 1815 | private OpenTelemetryMetricsModule newOpenTelemetryMetricsModule( |
1809 | 1816 | OpenTelemetryMetricsResource resource, TargetFilter filter) { |
1810 | 1817 | return new OpenTelemetryMetricsModule( |
1811 | | - fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(), filter); |
| 1818 | + fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(), |
| 1819 | + openTelemetryTesting.getOpenTelemetry().getPropagators(), filter); |
1812 | 1820 | } |
1813 | 1821 |
|
1814 | 1822 | static class CallInfo<ReqT, RespT> extends ServerCallInfo<ReqT, RespT> { |
@@ -1848,7 +1856,8 @@ public void serverBaggagePropagation_EndToEnd() throws Exception { |
1848 | 1856 | OpenTelemetry otel = openTelemetryTesting.getOpenTelemetry(); |
1849 | 1857 | OpenTelemetryTracingModule tracingModule = new OpenTelemetryTracingModule(otel); |
1850 | 1858 | OpenTelemetryMetricsModule metricsModule = new OpenTelemetryMetricsModule( |
1851 | | - fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList()); |
| 1859 | + fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(), |
| 1860 | + otel.getPropagators()); |
1852 | 1861 |
|
1853 | 1862 | // 2. Create Server with *both* tracer factories |
1854 | 1863 | server = InProcessServerBuilder.forName(serverName) |
|
0 commit comments