Skip to content

Commit bfd9357

Browse files
committed
test(datastore): update test case to expect 1 NoOp recorder
1 parent d05b612 commit bfd9357

4 files changed

Lines changed: 43 additions & 17 deletions

File tree

java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/BuiltInDatastoreMetricsProvider.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,29 +120,38 @@ private static String hashClientUId(String uuid) {
120120
*/
121121
@Nullable
122122
public OpenTelemetry createOpenTelemetry(@Nonnull DatastoreOptions options) {
123-
Credentials credentials = options.getCredentials();
123+
Credentials credentials =
124+
Preconditions.checkNotNull(
125+
options.getCredentials(), "Credentials cannot be null for built in metrics");
124126
String projectId = options.getProjectId();
125127
String databaseId = options.getDatabaseId();
126-
Preconditions.checkNotNull(credentials, "Credentials cannot be null for built in metrics");
127-
SdkMeterProviderBuilder sdkMeterProviderBuilder = SdkMeterProvider.builder();
128128

129-
Map<String, String> clientAttributes = buildClientAttributes();
129+
// No need to send metrics when using an emulator
130+
String emulatorHost =
131+
System.getProperty(
132+
DatastoreOptions.LOCAL_HOST_ENV_VAR,
133+
System.getenv(DatastoreOptions.LOCAL_HOST_ENV_VAR));
134+
boolean emulatorEnabled = emulatorHost != null && !emulatorHost.isEmpty();
130135

136+
if (emulatorEnabled) {
137+
logger.log(Level.FINE, "Emulator detected in Datastore. Metrics are not being recorded.");
138+
return OpenTelemetry.noop();
139+
}
131140
if (credentials instanceof NoCredentials) {
132-
logger.log(
133-
Level.WARNING,
134-
"Built-in metrics exporting is disabled when using NoCredentials (emulator).");
135-
return null;
141+
logger.log(Level.WARNING, "Built-in metrics exporting is disabled when using NoCredentials.");
142+
return OpenTelemetry.noop();
136143
}
137144

145+
SdkMeterProviderBuilder sdkMeterProviderBuilder = SdkMeterProvider.builder();
146+
Map<String, String> clientAttributes = buildClientAttributes();
138147
DatastoreCloudMonitoringExporter exporter =
139148
DatastoreCloudMonitoringExporter.create(
140149
projectId, databaseId, credentials, clientAttributes);
141150
if (exporter == null) {
142151
logger.log(
143152
Level.WARNING,
144153
"Built-in metrics exporting is disabled as the exporter could not be created.");
145-
return null;
154+
return OpenTelemetry.noop();
146155
}
147156

148157
// Register Datastore-specific views and the PeriodicMetricReader.

java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreImplMetricsTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import com.google.cloud.datastore.spi.v1.DatastoreRpc;
2626
import com.google.cloud.datastore.telemetry.DatastoreMetricsRecorder;
2727
import com.google.cloud.datastore.telemetry.TelemetryConstants;
28+
import com.google.cloud.grpc.GrpcTransportOptions;
29+
import com.google.cloud.http.HttpTransportOptions;
2830
import com.google.datastore.v1.BeginTransactionRequest;
2931
import com.google.datastore.v1.BeginTransactionResponse;
3032
import com.google.datastore.v1.CommitRequest;
@@ -113,9 +115,9 @@ public void setUp() {
113115
.build());
114116

115117
if (TelemetryConstants.Transport.GRPC.equals(transport)) {
116-
builder.setTransportOptions(com.google.cloud.grpc.GrpcTransportOptions.newBuilder().build());
118+
builder.setTransportOptions(GrpcTransportOptions.newBuilder().build());
117119
} else {
118-
builder.setTransportOptions(com.google.cloud.http.HttpTransportOptions.newBuilder().build());
120+
builder.setTransportOptions(HttpTransportOptions.newBuilder().build());
119121
}
120122

121123
DatastoreOptions datastoreOptions = builder.build();

java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/BuiltInDatastoreMetricsProviderTest.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ public void testBuildClientAttributes() {
4646
}
4747

4848
@Test
49-
public void testCreateOpenTelemetry_returnsNull() {
49+
public void testCreateOpenTelemetry_returnsNoOp() {
5050
DatastoreOptions options =
5151
DatastoreOptions.newBuilder()
5252
.setProjectId(PROJECT_ID)
5353
.setDatabaseId("test-db")
5454
.setCredentials(NoCredentials.getInstance())
5555
.build();
5656
OpenTelemetry otel = BuiltInDatastoreMetricsProvider.INSTANCE.createOpenTelemetry(options);
57-
assertThat(otel).isNull();
57+
assertThat(otel).isInstanceOf(OpenTelemetry.noop().getClass());
5858
}
5959

6060
@Test
@@ -120,4 +120,17 @@ public void testCreateOpenTelemetry_eachCallReturnsDistinctInstance() {
120120
}
121121
}
122122
}
123+
124+
@Test
125+
public void testCreateOpenTelemetry_withEmulatorHostProperty_returnsNoOp() {
126+
System.setProperty(DatastoreOptions.LOCAL_HOST_ENV_VAR, "localhost:8081");
127+
try {
128+
DatastoreOptions options =
129+
DatastoreOptions.newBuilder().setProjectId(PROJECT_ID).setDatabaseId("test-db").build();
130+
OpenTelemetry otel = BuiltInDatastoreMetricsProvider.INSTANCE.createOpenTelemetry(options);
131+
assertThat(otel).isInstanceOf(OpenTelemetry.noop().getClass());
132+
} finally {
133+
System.clearProperty(DatastoreOptions.LOCAL_HOST_ENV_VAR);
134+
}
135+
}
123136
}

java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/DatastoreMetricsRecorderTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,16 @@ public void defaultOptionsWithBuiltInMetricsEnabled_butNoCredentials_returnsNoRe
8888
.setExportBuiltinMetricsToGoogleCloudMonitoring(true)
8989
.build())
9090
.build();
91-
DatastoreMetricsRecorder recorder = DatastoreMetricsRecorder.getInstance(options, null);
91+
DatastoreMetricsRecorder recorder =
92+
DatastoreMetricsRecorder.getInstance(options, OpenTelemetry.noop());
9293

93-
// Since baseOptions() uses NoCredentials, it should not have any recorders
94-
// as we don't want to send metrics for local emulator logic.
94+
// Since baseOptions() uses NoCredentials, the provider returns OpenTelemetry.noop().
95+
// This NoOp instance is passed to getInstance, which adds it to the recorders list.
96+
// So we have 1 recorder (the NoOp one).
9597
assertThat(recorder).isInstanceOf(CompositeDatastoreMetricsRecorder.class);
9698
CompositeDatastoreMetricsRecorder compositeRecorder =
9799
(CompositeDatastoreMetricsRecorder) recorder;
98-
assertThat(compositeRecorder.getMetricRecorders().size()).isEqualTo(0);
100+
assertThat(compositeRecorder.getMetricRecorders().size()).isEqualTo(1);
99101
}
100102

101103
@Test

0 commit comments

Comments
 (0)