Skip to content

Commit f118fc5

Browse files
committed
feat(spanner): added default port value and unit tests
1 parent 844b642 commit f118fc5

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,7 @@ private Builder() {}
635635
@VisibleForTesting
636636
static final Pattern SPANNER_URI_PATTERN = Pattern.compile(SPANNER_URI_REGEX);
637637

638+
@VisibleForTesting
638639
static final Pattern EXTERNAL_HOST_PATTERN = Pattern.compile(EXTERNAL_HOST_FORMAT);
639640

640641
private static final String HOST_GROUP = "HOSTGROUP";
@@ -1004,6 +1005,10 @@ static String determineHost(
10041005
// The leading '//' is already included in the regex for the connection URL, so we don't need
10051006
// to add the leading '//' to the host name here.
10061007
host = matcher.group(Builder.HOST_GROUP);
1008+
if (ConnectionOptions.Builder.EXTERNAL_HOST_FORMAT.equals(matcher.pattern().pattern())
1009+
&& !host.matches(".*:\\d+$")) {
1010+
host = String.format("%s:15000", host);
1011+
}
10071012
}
10081013
if (usePlainText) {
10091014
return PLAIN_TEXT_PROTOCOL + host;

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

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

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

19+
import static com.google.cloud.spanner.connection.ConnectionOptions.Builder.EXTERNAL_HOST_PATTERN;
1920
import static com.google.cloud.spanner.connection.ConnectionOptions.Builder.SPANNER_URI_PATTERN;
2021
import static com.google.cloud.spanner.connection.ConnectionOptions.DEFAULT_ENDPOINT;
2122
import static com.google.cloud.spanner.connection.ConnectionOptions.determineHost;
@@ -1211,4 +1212,40 @@ public void testEnableApiTracing() {
12111212
.build()
12121213
.isEnableApiTracing());
12131214
}
1215+
1216+
@Test
1217+
public void testExternalHostPatterns() {
1218+
Matcher matcherWithoutInstance =
1219+
EXTERNAL_HOST_PATTERN.matcher("cloudspanner://localhost:15000/databases/test-db");
1220+
assertTrue(matcherWithoutInstance.matches());
1221+
assertNull(matcherWithoutInstance.group("INSTANCEGROUP"));
1222+
assertEquals("test-db", matcherWithoutInstance.group("DATABASEGROUP"));
1223+
Matcher matcherWithProperty =
1224+
EXTERNAL_HOST_PATTERN.matcher(
1225+
"cloudspanner://localhost:15000/instances/default/databases/singers-db?usePlainText=true");
1226+
assertTrue(matcherWithProperty.matches());
1227+
assertEquals("default", matcherWithProperty.group("INSTANCEGROUP"));
1228+
assertEquals("singers-db", matcherWithProperty.group("DATABASEGROUP"));
1229+
Matcher matcherWithoutPort =
1230+
EXTERNAL_HOST_PATTERN.matcher(
1231+
"cloudspanner://localhost/instances/default/databases/test-db");
1232+
assertTrue(matcherWithoutPort.matches());
1233+
assertEquals("default", matcherWithoutPort.group("INSTANCEGROUP"));
1234+
assertEquals("test-db", matcherWithoutPort.group("DATABASEGROUP"));
1235+
assertEquals(
1236+
"http://localhost:15000",
1237+
determineHost(
1238+
matcherWithoutPort,
1239+
DEFAULT_ENDPOINT,
1240+
/* autoConfigEmulator= */ true,
1241+
/* usePlainText= */ true,
1242+
ImmutableMap.of()));
1243+
Matcher matcherWithProject =
1244+
EXTERNAL_HOST_PATTERN.matcher(
1245+
"cloudspanner://localhost:15000/projects/default/instances/default/databases/singers-db");
1246+
assertFalse(matcherWithProject.matches());
1247+
Matcher matcherWithoutHost =
1248+
EXTERNAL_HOST_PATTERN.matcher("cloudspanner:/instances/default/databases/singers-db");
1249+
assertFalse(matcherWithoutHost.matches());
1250+
}
12141251
}

0 commit comments

Comments
 (0)