diff --git a/api/all/src/main/java/io/opentelemetry/api/baggage/Baggage.java b/api/all/src/main/java/io/opentelemetry/api/baggage/Baggage.java index 12b81d7b033..243ce157b0a 100644 --- a/api/all/src/main/java/io/opentelemetry/api/baggage/Baggage.java +++ b/api/all/src/main/java/io/opentelemetry/api/baggage/Baggage.java @@ -5,6 +5,7 @@ package io.opentelemetry.api.baggage; +import io.opentelemetry.common.impl.ApiUsageLogger; import io.opentelemetry.context.Context; import io.opentelemetry.context.ImplicitContextKeyed; import java.util.Map; @@ -52,6 +53,10 @@ static Baggage current() { * Baggage} if there is no baggage in the context. */ static Baggage fromContext(Context context) { + if (context == null) { + ApiUsageLogger.logNullParam(Baggage.class, "fromContext", "context"); + return empty(); + } Baggage baggage = context.get(BaggageContextKey.KEY); return baggage != null ? baggage : empty(); } @@ -62,6 +67,10 @@ static Baggage fromContext(Context context) { */ @Nullable static Baggage fromContextOrNull(Context context) { + if (context == null) { + ApiUsageLogger.logNullParam(Baggage.class, "fromContextOrNull", "context"); + return null; + } return context.get(BaggageContextKey.KEY); } diff --git a/api/all/src/test/java/io/opentelemetry/api/baggage/BaggageContextTest.java b/api/all/src/test/java/io/opentelemetry/api/baggage/BaggageContextTest.java index b8dfd63e168..8d8800a3e77 100644 --- a/api/all/src/test/java/io/opentelemetry/api/baggage/BaggageContextTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/baggage/BaggageContextTest.java @@ -7,12 +7,21 @@ import static org.assertj.core.api.Assertions.assertThat; +import io.github.netmikey.logunit.api.LogCapturer; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; +import io.opentelemetry.internal.testing.slf4j.SuppressLogger; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; +import org.slf4j.event.Level; +@SuppressLogger(loggerName = "io.opentelemetry.usage") class BaggageContextTest { + @RegisterExtension + LogCapturer logCapturer = + LogCapturer.create().captureForLogger("io.opentelemetry.usage", Level.TRACE); + @Test void testGetCurrentBaggage_Default() { try (Scope s = Context.root().makeCurrent()) { @@ -42,6 +51,20 @@ void testGetBaggage_ExplicitContext() { assertThat(Baggage.fromContext(context)).isSameAs(baggage); } + @Test + void fromContext_null() { + Baggage result = Baggage.fromContext(null); + assertThat(result).isEqualTo(Baggage.empty()); + logCapturer.assertContains("context is null"); + } + + @Test + void fromContextOrNull_null() { + Baggage result = Baggage.fromContextOrNull(null); + assertThat(result).isNull(); + logCapturer.assertContains("context is null"); + } + @Test void testGetBaggageWithoutDefault_DefaultContext() { Baggage baggage = Baggage.fromContextOrNull(Context.root());