diff --git a/services/src/main/java/io/grpc/services/CallMetricRecorder.java b/services/src/main/java/io/grpc/services/CallMetricRecorder.java index c1ccbae395..f9b6a71a4b 100644 --- a/services/src/main/java/io/grpc/services/CallMetricRecorder.java +++ b/services/src/main/java/io/grpc/services/CallMetricRecorder.java @@ -16,6 +16,7 @@ package io.grpc.services; +import com.google.common.annotations.VisibleForTesting; import io.grpc.Context; import io.grpc.ExperimentalApi; import java.util.Collections; @@ -96,6 +97,11 @@ public final class CallMetricRecorder { return Collections.unmodifiableMap(savedMetrics); } + @VisibleForTesting + boolean isDisabled() { + return disabled; + } + /** * Turn this recorder into a no-op one. */ diff --git a/services/src/test/java/io/grpc/services/CallMetricRecorderTest.java b/services/src/test/java/io/grpc/services/CallMetricRecorderTest.java index bea39b915a..db6b294bf3 100644 --- a/services/src/test/java/io/grpc/services/CallMetricRecorderTest.java +++ b/services/src/test/java/io/grpc/services/CallMetricRecorderTest.java @@ -18,6 +18,7 @@ package io.grpc.services; import static com.google.common.truth.Truth.assertThat; +import io.grpc.Context; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; @@ -63,4 +64,28 @@ public class CallMetricRecorderTest { assertThat(dump) .containsExactly("cost1", 4654.67, "cost2", 75.83); } + + @Test + public void getCurrent_sameEnabledInstance() { + CallMetricRecorder recorder = new CallMetricRecorder(); + Context ctx = Context.ROOT.withValue(CallMetricRecorder.CONTEXT_KEY, recorder); + Context origCtx = ctx.attach(); + try { + assertThat(CallMetricRecorder.getCurrent()).isSameInstanceAs(recorder); + assertThat(recorder.isDisabled()).isFalse(); + } finally { + ctx.detach(origCtx); + } + } + + @Test + public void getCurrent_blankContext() { + Context blankCtx = Context.ROOT; + Context origCtx = blankCtx.attach(); + try { + assertThat(CallMetricRecorder.getCurrent().isDisabled()).isTrue(); + } finally { + blankCtx.detach(origCtx); + } + } }