From 226a3cd0a7825ef9931ffa8787d22fd4f7067b85 Mon Sep 17 00:00:00 2001 From: Jin Seop Kim Date: Mon, 21 Sep 2026 12:41:21 -0400 Subject: [PATCH 1/3] test: add OpenTelemetry context validation test in Logging client --- .../logging/AutoPopulateMetadataTests.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java index 7972ca7bf4bf..4602dcc7d302 100644 --- a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java +++ b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java @@ -33,6 +33,15 @@ import com.google.common.collect.ImmutableList; import com.google.logging.v2.WriteLogEntriesRequest; import com.google.logging.v2.WriteLogEntriesResponse; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.context.Scope; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.SpanProcessor; +import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; import org.easymock.Capture; import org.junit.After; import org.junit.Before; @@ -109,6 +118,7 @@ public void setup() { @After public void teardown() { new ContextHandler().removeCurrentContext(); + new ContextHandler().removeCurrentContextPriority(); } private void mockCurrentContext( @@ -204,4 +214,32 @@ public void testMonitoredResourcePopulationInWriteOptions() { LogEntry actual = LogEntry.fromPb(rpcWriteArgument.getValue().getEntries(0)); assertEquals(expectedResource, actual.getResource()); } + + @Test + public void testAutoPopulationWithOpenTelemetryContext() { + InMemorySpanExporter testExporter = InMemorySpanExporter.create(); + SpanProcessor inMemorySpanProcessor = SimpleSpanProcessor.create(testExporter); + OpenTelemetrySdk openTelemetrySdk = + OpenTelemetrySdk.builder() + .setTracerProvider( + SdkTracerProvider.builder().addSpanProcessor(inMemorySpanProcessor).build()) + .build(); + Tracer tracer = openTelemetrySdk.getTracer("ValidationTest"); + Span otelSpan = tracer.spanBuilder("test-span").startSpan(); + + try (Scope scope = otelSpan.makeCurrent()) { + SpanContext spanContext = otelSpan.getSpanContext(); + logging.write(ImmutableList.of(SIMPLE_LOG_ENTRY)); + + LogEntry actual = LogEntry.fromPb(rpcWriteArgument.getValue().getEntries(0)); + String expectedTrace = + String.format( + LoggingImpl.RESOURCE_NAME_FORMAT, RESOURCE_PROJECT_ID, spanContext.getTraceId()); + assertEquals(expectedTrace, actual.getTrace()); + assertEquals(spanContext.getSpanId(), actual.getSpanId()); + assertEquals(spanContext.isSampled(), actual.getTraceSampled()); + } finally { + otelSpan.end(); + } + } } From f5fdf49e264cf65c5c6a1d79ef437c7a32518a24 Mon Sep 17 00:00:00 2001 From: Jin Seop Kim Date: Mon, 21 Sep 2026 12:46:51 -0400 Subject: [PATCH 2/3] test: wrap OpenTelemetrySdk in try-with-resources --- .../logging/AutoPopulateMetadataTests.java | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java index 4602dcc7d302..e454000cfb6e 100644 --- a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java +++ b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java @@ -219,27 +219,28 @@ public void testMonitoredResourcePopulationInWriteOptions() { public void testAutoPopulationWithOpenTelemetryContext() { InMemorySpanExporter testExporter = InMemorySpanExporter.create(); SpanProcessor inMemorySpanProcessor = SimpleSpanProcessor.create(testExporter); - OpenTelemetrySdk openTelemetrySdk = + try (OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder() .setTracerProvider( SdkTracerProvider.builder().addSpanProcessor(inMemorySpanProcessor).build()) - .build(); - Tracer tracer = openTelemetrySdk.getTracer("ValidationTest"); - Span otelSpan = tracer.spanBuilder("test-span").startSpan(); - - try (Scope scope = otelSpan.makeCurrent()) { - SpanContext spanContext = otelSpan.getSpanContext(); - logging.write(ImmutableList.of(SIMPLE_LOG_ENTRY)); - - LogEntry actual = LogEntry.fromPb(rpcWriteArgument.getValue().getEntries(0)); - String expectedTrace = - String.format( - LoggingImpl.RESOURCE_NAME_FORMAT, RESOURCE_PROJECT_ID, spanContext.getTraceId()); - assertEquals(expectedTrace, actual.getTrace()); - assertEquals(spanContext.getSpanId(), actual.getSpanId()); - assertEquals(spanContext.isSampled(), actual.getTraceSampled()); - } finally { - otelSpan.end(); + .build()) { + Tracer tracer = openTelemetrySdk.getTracer("ValidationTest"); + Span otelSpan = tracer.spanBuilder("test-span").startSpan(); + + try (Scope scope = otelSpan.makeCurrent()) { + SpanContext spanContext = otelSpan.getSpanContext(); + logging.write(ImmutableList.of(SIMPLE_LOG_ENTRY)); + + LogEntry actual = LogEntry.fromPb(rpcWriteArgument.getValue().getEntries(0)); + String expectedTrace = + String.format( + LoggingImpl.RESOURCE_NAME_FORMAT, RESOURCE_PROJECT_ID, spanContext.getTraceId()); + assertEquals(expectedTrace, actual.getTrace()); + assertEquals(spanContext.getSpanId(), actual.getSpanId()); + assertEquals(spanContext.isSampled(), actual.getTraceSampled()); + } finally { + otelSpan.end(); + } } } } From 38295aa4c1fa05d1d69fe1be581acd83dbb02e24 Mon Sep 17 00:00:00 2001 From: Jin Seop Kim Date: Mon, 21 Sep 2026 12:50:42 -0400 Subject: [PATCH 3/3] test: remove unused span processor and simplify OpenTelemetrySdk setup --- .../cloud/logging/AutoPopulateMetadataTests.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java index e454000cfb6e..cd3d3ddbc02c 100644 --- a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java +++ b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/AutoPopulateMetadataTests.java @@ -38,10 +38,7 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Scope; import io.opentelemetry.sdk.OpenTelemetrySdk; -import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter; import io.opentelemetry.sdk.trace.SdkTracerProvider; -import io.opentelemetry.sdk.trace.SpanProcessor; -import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; import org.easymock.Capture; import org.junit.After; import org.junit.Before; @@ -217,13 +214,8 @@ public void testMonitoredResourcePopulationInWriteOptions() { @Test public void testAutoPopulationWithOpenTelemetryContext() { - InMemorySpanExporter testExporter = InMemorySpanExporter.create(); - SpanProcessor inMemorySpanProcessor = SimpleSpanProcessor.create(testExporter); try (OpenTelemetrySdk openTelemetrySdk = - OpenTelemetrySdk.builder() - .setTracerProvider( - SdkTracerProvider.builder().addSpanProcessor(inMemorySpanProcessor).build()) - .build()) { + OpenTelemetrySdk.builder().setTracerProvider(SdkTracerProvider.builder().build()).build()) { Tracer tracer = openTelemetrySdk.getTracer("ValidationTest"); Span otelSpan = tracer.spanBuilder("test-span").startSpan();