Skip to content

Commit eea7ffa

Browse files
committed
feat: Integration Tests setup for experimental host
1 parent 8bcb09d commit eea7ffa

19 files changed

+132
-2
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,11 @@ protected SpannerOptions(Builder builder) {
814814
openTelemetry = builder.openTelemetry;
815815
enableApiTracing = builder.enableApiTracing;
816816
enableExtendedTracing = builder.enableExtendedTracing;
817-
enableBuiltInMetrics = builder.enableBuiltInMetrics;
817+
if (builder.isExperimentalHost) {
818+
enableBuiltInMetrics = false;
819+
} else {
820+
enableBuiltInMetrics = builder.enableBuiltInMetrics;
821+
}
818822
enableEndToEndTracing = builder.enableEndToEndTracing;
819823
monitoringHost = builder.monitoringHost;
820824
defaultTransactionOptions = builder.defaultTransactionOptions;
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Copyright 2020 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.cloud.spanner.testing;
18+
19+
import com.google.cloud.NoCredentials;
20+
import com.google.cloud.spanner.SpannerOptions;
21+
import com.google.common.base.Strings;
22+
import io.grpc.ManagedChannelBuilder;
23+
24+
public class ExperimentalHostHelper {
25+
private static final String EXPERIMENTAL_HOST = "spanner.experimental_host";
26+
private static final String USE_PLAIN_TEXT = "spanner.use_plain_text";
27+
private static final String USE_MTLS = "spanner.mtls";
28+
private static final String CLIENT_CERT_PATH = "spanner.client_cert_path";
29+
private static final String CLIENT_CERT_KEY_PATH = "spanner.client_cert_key_path";
30+
31+
/**
32+
* Checks whether the emulator is being used. This is done by checking if the
33+
* SPANNER_EMULATOR_HOST environment variable is set.
34+
*
35+
* @return true if the emulator is being used. Returns false otherwise.
36+
*/
37+
public static boolean isExperimentalHost() {
38+
return !Strings.isNullOrEmpty(System.getProperty(EXPERIMENTAL_HOST));
39+
}
40+
41+
public static void appendExperimentalHost(StringBuilder uri) {
42+
uri.append(";isExperimentalHost=true");
43+
if (isMtlsSetup()) {
44+
String clientCertificate = System.getProperty(CLIENT_CERT_PATH, "");
45+
String clientKey = System.getProperty(CLIENT_CERT_KEY_PATH, "");
46+
uri.append(";clientCertificate=").append(clientCertificate);
47+
uri.append(";clientKey=").append(clientKey);
48+
}
49+
}
50+
51+
public static boolean isMtlsSetup() {
52+
return Boolean.getBoolean(USE_MTLS);
53+
}
54+
55+
public static void setExperimentalHostSpannerOptions(SpannerOptions.Builder builder) {
56+
String experimentalHost = System.getProperty(EXPERIMENTAL_HOST, "");
57+
boolean usePlainText = Boolean.getBoolean(USE_PLAIN_TEXT);
58+
builder.setExperimentalHost(experimentalHost);
59+
builder.setBuiltInMetricsEnabled(false);
60+
if (usePlainText) {
61+
builder
62+
.setChannelConfigurator(ManagedChannelBuilder::usePlaintext)
63+
.setCredentials(NoCredentials.getInstance());
64+
}
65+
if (isMtlsSetup()) {
66+
String clientCertificate = System.getProperty(CLIENT_CERT_PATH, "");
67+
String clientKey = System.getProperty(CLIENT_CERT_KEY_PATH, "");
68+
builder.useClientCert(clientCertificate, clientKey);
69+
}
70+
}
71+
}

google-cloud-spanner/src/test/java/com/google/cloud/spanner/GceTestEnvConfig.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package com.google.cloud.spanner;
1818

19+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost;
20+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.setExperimentalHostSpannerOptions;
1921
import static com.google.common.base.Preconditions.checkState;
2022

2123
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
@@ -101,6 +103,10 @@ public GceTestEnvConfig() {
101103
.setInterceptorProvider(interceptorProvider);
102104
builder.setChannelProvider(customChannelProviderBuilder.build());
103105
}
106+
107+
if (isExperimentalHost()) {
108+
setExperimentalHostSpannerOptions(builder);
109+
}
104110
options = builder.build();
105111
}
106112

google-cloud-spanner/src/test/java/com/google/cloud/spanner/ITSessionPoolIntegrationTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
package com.google.cloud.spanner;
1818

19+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost;
1920
import static com.google.common.truth.Truth.assertThat;
21+
import static org.junit.Assume.assumeFalse;
2022

2123
import com.google.cloud.grpc.GrpcTransportOptions.ExecutorFactory;
2224
import com.google.cloud.spanner.SessionPool.PooledSessionFuture;
@@ -53,6 +55,7 @@ public class ITSessionPoolIntegrationTest {
5355

5456
@BeforeClass
5557
public static void setUpDatabase() {
58+
assumeFalse("Only Multiplexed Sessions are supported on this host", isExperimentalHost());
5659
db =
5760
env.getTestHelper()
5861
.createTestDatabase(

google-cloud-spanner/src/test/java/com/google/cloud/spanner/ITTransactionRetryTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.cloud.spanner;
1818

1919
import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator;
20+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost;
2021
import static com.google.common.truth.Truth.assertThat;
2122
import static org.junit.Assert.assertFalse;
2223
import static org.junit.Assert.assertTrue;
@@ -42,6 +43,7 @@ public void TestRetryInfo() {
4243
assumeFalse(
4344
"Skipping the test due to a known bug b/422916293",
4445
env.getTestHelper().getOptions().isEnableDirectAccess());
46+
assumeFalse("Skipping the test due to a known bug b/422916293", isExperimentalHost());
4547

4648
// Creating a database with the table which contains INT64 columns
4749
Database db =

google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.google.cloud.spanner;
1818

19+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost;
1920
import static com.google.common.base.Preconditions.checkState;
2021
import static org.junit.Assume.assumeFalse;
2122

@@ -130,6 +131,9 @@ boolean isCloudDevel() {
130131
protected void before() throws Throwable {
131132
this.initializeConfig();
132133
assumeFalse(alwaysCreateNewInstance && isCloudDevel());
134+
assumeFalse(
135+
"Creating instances is not supported in experimental host",
136+
alwaysCreateNewInstance && isExperimentalHost());
133137

134138
this.config.setUp();
135139
SpannerOptions options = config.spannerOptions();
@@ -324,7 +328,7 @@ private void cleanUpInstance() {
324328
if (isOwnedInstance) {
325329
// Delete the instance, which implicitly drops all databases in it.
326330
try {
327-
if (!EmulatorSpannerHelper.isUsingEmulator()) {
331+
if (!EmulatorSpannerHelper.isUsingEmulator() && !isExperimentalHost()) {
328332
// Backups must be explicitly deleted before the instance may be deleted.
329333
logger.log(
330334
Level.FINE, "Deleting backups on test instance {0}", testHelper.getInstanceId());

google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ITAbstractSpannerTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616

1717
package com.google.cloud.spanner.connection;
1818

19+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.appendExperimentalHost;
20+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost;
21+
1922
import com.google.cloud.NoCredentials;
2023
import com.google.cloud.spanner.Database;
2124
import com.google.cloud.spanner.ErrorCode;
@@ -236,6 +239,9 @@ public static StringBuilder extractConnectionUrl(SpannerOptions options, Databas
236239
if (options.getCredentials() == NoCredentials.getInstance()) {
237240
url.append(";usePlainText=true");
238241
}
242+
if (isExperimentalHost()) {
243+
appendExperimentalHost(url);
244+
}
239245
return url;
240246
}
241247

google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/it/ITRetryDmlAsPartitionedDmlTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.cloud.spanner.connection.it;
1818

1919
import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator;
20+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost;
2021
import static org.junit.Assert.assertEquals;
2122
import static org.junit.Assert.assertSame;
2223
import static org.junit.Assert.assertThrows;
@@ -54,6 +55,7 @@ public class ITRetryDmlAsPartitionedDmlTest extends ITAbstractSpannerTest {
5455
public static void setup() {
5556
// This shadows the setup() method in the super class and prevents it from being executed.
5657
// That allows us to have a custom setup method in this class.
58+
assumeFalse("Skipping the test due to a known bug b/422916293", isExperimentalHost());
5759
}
5860

5961
@BeforeClass

google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITAutogeneratedAdminClientTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.cloud.spanner.it;
1818

1919
import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator;
20+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost;
2021
import static com.google.common.truth.Truth.assertThat;
2122
import static org.junit.Assert.*;
2223
import static org.junit.Assume.assumeFalse;
@@ -84,6 +85,7 @@ public static List<DatabaseDialect> data() {
8485

8586
@BeforeClass
8687
public static void setUp() {
88+
assumeFalse("Experimental Host does not support database roles", isExperimentalHost());
8789
assumeFalse("Emulator does not support database roles", isUsingEmulator());
8890
testHelper = env.getTestHelper();
8991
dbAdminClient = testHelper.getClient().createDatabaseAdminClient();

google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITBatchReadTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,11 @@
1919
import static com.google.cloud.spanner.connection.ITAbstractSpannerTest.extractConnectionUrl;
2020
import static com.google.cloud.spanner.connection.ITAbstractSpannerTest.getKeyFile;
2121
import static com.google.cloud.spanner.connection.ITAbstractSpannerTest.hasValidKeyFile;
22+
import static com.google.cloud.spanner.testing.ExperimentalHostHelper.isExperimentalHost;
2223
import static com.google.common.truth.Truth.assertThat;
2324
import static org.junit.Assert.assertEquals;
2425
import static org.junit.Assert.assertTrue;
26+
import static org.junit.Assume.assumeFalse;
2527

2628
import com.google.cloud.ByteArray;
2729
import com.google.cloud.Timestamp;
@@ -247,6 +249,7 @@ public void readUsingIndex() {
247249

248250
@Test
249251
public void dataBoostRead() {
252+
assumeFalse("data boost is not supported on experimental host yet", isExperimentalHost());
250253
BitSet seenRows = new BitSet(numRows);
251254
TimestampBound bound = getRandomBound();
252255
PartitionOptions partitionParams = getRandomPartitionOptions();
@@ -299,6 +302,7 @@ private PartitionOptions getRandomPartitionOptions() {
299302

300303
@Test
301304
public void dataBoostQuery() {
305+
assumeFalse("data boost is not supported on experimental host yet", isExperimentalHost());
302306
BitSet seenRows = new BitSet(numRows);
303307
TimestampBound bound = getRandomBound();
304308
PartitionOptions partitionParams = getRandomPartitionOptions();

0 commit comments

Comments
 (0)