Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,10 @@
*/
package com.google.api.gax.tracing;

import com.google.api.client.util.Strings;
import com.google.api.core.BetaApi;
import com.google.api.core.InternalApi;
import com.google.api.gax.rpc.LibraryMetadata;
import io.opentelemetry.api.OpenTelemetry;

/**
Expand Down Expand Up @@ -74,6 +76,13 @@ public ApiTracer newTracer(ApiTracer parent, ApiTracerContext methodLevelTracerC

@Override
public ApiTracerFactory withContext(ApiTracerContext context) {
if (context == null) {
return new BaseApiTracerFactory();
}
LibraryMetadata metadata = context.libraryMetadata();
if (metadata == null || metadata.isEmpty() || Strings.isNullOrEmpty(metadata.artifactName())) {
return new BaseApiTracerFactory();
}
this.clientLevelTracerContext = context;
this.metricsRecorder =
new GoldenSignalsMetricsRecorder(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
import static org.mockito.Answers.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.*;

import com.google.api.gax.rpc.LibraryMetadata;
import io.opentelemetry.api.OpenTelemetry;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
Expand All @@ -48,7 +49,10 @@ void setUp() {

@Test
void newTracerWithSpanName_shouldCreateTracer_ifMetricsRecorderIsNotNull() {
tracerFactory.withContext(ApiTracerContext.empty());
LibraryMetadata metadata =
LibraryMetadata.newBuilder().setArtifactName("gax-java").setVersion("1.0").build();
ApiTracerContext context = ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build();
tracerFactory.withContext(context);
ApiTracer actual =
tracerFactory.newTracer(
mock(ApiTracer.class), mock(SpanName.class), ApiTracerFactory.OperationType.Unary);
Expand All @@ -67,7 +71,8 @@ void newTracerWithSpanName_shouldCreateBaseTracer_ifMetricsRecorderIsNull() {
void newTracerWithApiTracerContext_shouldMergeApiTracerContext() {
ApiTracerContext clientLevelTracerContext = mock(ApiTracerContext.class, RETURNS_DEEP_STUBS);
ApiTracerContext methodLevelTracerContext = mock(ApiTracerContext.class);
when(clientLevelTracerContext.libraryMetadata().artifactName()).thenReturn("does not matter");
when(clientLevelTracerContext.libraryMetadata().artifactName()).thenReturn("gax-java");
when(clientLevelTracerContext.libraryMetadata().isEmpty()).thenReturn(false);
when(clientLevelTracerContext.merge(methodLevelTracerContext))
.thenReturn(clientLevelTracerContext);

Expand All @@ -78,9 +83,50 @@ void newTracerWithApiTracerContext_shouldMergeApiTracerContext() {
assertThat(actual).isInstanceOf(GoldenSignalsMetricsTracer.class);
}

@Test
void testWithContext_nullContext_returnsBaseApiTracerFactory() {
GoldenSignalsMetricsTracerFactory factory =
new GoldenSignalsMetricsTracerFactory(OpenTelemetry.noop());
ApiTracerFactory factoryWithContext = factory.withContext(null);
assertThat(factoryWithContext).isInstanceOf(BaseApiTracerFactory.class);
}

@Test
void testWithContext_nullMetadata_returnsBaseApiTracerFactory() {
GoldenSignalsMetricsTracerFactory factory =
new GoldenSignalsMetricsTracerFactory(OpenTelemetry.noop());
ApiTracerFactory factoryWithContext = factory.withContext(ApiTracerContext.empty());
assertThat(factoryWithContext).isInstanceOf(BaseApiTracerFactory.class);
}

@Test
void testWithContext_emptyArtifactName_returnsBaseApiTracerFactory() {
GoldenSignalsMetricsTracerFactory factory =
new GoldenSignalsMetricsTracerFactory(OpenTelemetry.noop());
LibraryMetadata metadata =
LibraryMetadata.newBuilder().setArtifactName("").setVersion("1.0").build();
ApiTracerContext context = ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build();

ApiTracerFactory factoryWithContext = factory.withContext(context);
assertThat(factoryWithContext).isInstanceOf(BaseApiTracerFactory.class);
}

@Test
void testWithContext_nullArtifactName_returnsBaseApiTracerFactory() {
GoldenSignalsMetricsTracerFactory factory =
new GoldenSignalsMetricsTracerFactory(OpenTelemetry.noop());
LibraryMetadata metadata = LibraryMetadata.newBuilder().setVersion("1.0").build();
ApiTracerContext context = ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build();

ApiTracerFactory factoryWithContext = factory.withContext(context);
assertThat(factoryWithContext).isInstanceOf(BaseApiTracerFactory.class);
}

@Test
void newTracerWithApiTracerContext_shouldCreateBaseTracer_ifMetricsRecorderIsNull() {
ApiTracer actual = tracerFactory.newTracer(mock(ApiTracer.class), mock(ApiTracerContext.class));
GoldenSignalsMetricsTracerFactory factory =
new GoldenSignalsMetricsTracerFactory(OpenTelemetry.noop());
ApiTracer actual = factory.newTracer(mock(ApiTracer.class), mock(ApiTracerContext.class));

assertThat(actual).isInstanceOf(BaseApiTracer.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,29 @@ void testWithContext_nullMetadata_returnsBaseApiTracerFactory() {
assertThat(factoryWithContext).isInstanceOf(BaseApiTracerFactory.class);
}

@Test
void testWithContext_emptyArtifactName_returnsBaseApiTracerFactory() {
SpanTracerFactory factory =
new SpanTracerFactory(openTelemetry, tracer, ApiTracerContext.empty());
LibraryMetadata metadata =
LibraryMetadata.newBuilder().setArtifactName("").setVersion("1.0").build();
ApiTracerContext context = ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build();

ApiTracerFactory factoryWithContext = factory.withContext(context);
assertThat(factoryWithContext).isInstanceOf(BaseApiTracerFactory.class);
}

@Test
void testWithContext_nullArtifactName_returnsBaseApiTracerFactory() {
SpanTracerFactory factory =
new SpanTracerFactory(openTelemetry, tracer, ApiTracerContext.empty());
LibraryMetadata metadata = LibraryMetadata.newBuilder().setVersion("1.0").build();
ApiTracerContext context = ApiTracerContext.newBuilder().setLibraryMetadata(metadata).build();

ApiTracerFactory factoryWithContext = factory.withContext(context);
assertThat(factoryWithContext).isInstanceOf(BaseApiTracerFactory.class);
}

@Test
void testWithContext_nullTracer_returnsBaseApiTracerFactory() {
OpenTelemetry mockOpenTelemetry = mock(OpenTelemetry.class);
Expand Down
Loading