Skip to content

Commit 3ea2362

Browse files
committed
fix(8319): Host-less JDBC urls should support setting a custom database name. Fixes #8319
1 parent 911ef5e commit 3ea2362

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

modules/jdbc/src/main/java/org/testcontainers/jdbc/ConnectionUrl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private void parseUrl() {
107107
//In case it matches to the default pattern
108108
Matcher dbInstanceMatcher = Patterns.DB_INSTANCE_MATCHING_PATTERN.matcher(dbHostString);
109109
if (dbInstanceMatcher.matches()) {
110-
databaseHost = Optional.of(dbInstanceMatcher.group("databaseHost"));
110+
databaseHost = Optional.ofNullable(dbInstanceMatcher.group("databaseHost"));
111111
databasePort = Optional.ofNullable(dbInstanceMatcher.group("databasePort")).map(Integer::valueOf);
112112
databaseName = Optional.of(dbInstanceMatcher.group("databaseName"));
113113
}
@@ -227,7 +227,7 @@ public interface Patterns {
227227

228228
//Matches to part of string - hostname:port/databasename
229229
Pattern DB_INSTANCE_MATCHING_PATTERN = Pattern.compile(
230-
"(?<databaseHost>[^:]+)" +
230+
"(?<databaseHost>[^:]+)?" +
231231
"(:(?<databasePort>[0-9]+))?" +
232232
"(" +
233233
"(?<sidOrServiceName>[:/])" +

modules/jdbc/src/test/java/org/testcontainers/jdbc/ConnectionUrlTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,21 @@ public void testDaemonCapture() {
111111

112112
assertThat(url.isInDaemonMode()).as("Daemon flag is set to true.").isTrue();
113113
}
114+
115+
116+
@Test
117+
public void testHostLessConnectionUrl() {
118+
String urlString = "jdbc:tc:mysql:8.0.36:///databasename?a=b&c=d";
119+
ConnectionUrl url = ConnectionUrl.newInstance(urlString);
120+
121+
assertThat(url.getDatabaseType()).as("Database Type value is as expected").isEqualTo("mysql");
122+
assertThat(url.getImageTag()).as("Database Image tag value is as expected").contains("8.0.36");
123+
assertThat(url.getQueryString()).as("Query String value is as expected").contains("?a=b&c=d");
124+
assertThat(url.getDatabaseHost()).as("Database Host value is as expected").isEmpty();
125+
assertThat(url.getDatabasePort()).as("Database Port value is as expected").isEmpty();
126+
assertThat(url.getDatabaseName()).as("Database Name value is as expected").contains("databasename");
127+
128+
assertThat(url.getQueryParameters()).as("Parameter a is captured").containsEntry("a", "b");
129+
assertThat(url.getQueryParameters()).as("Parameter c is captured").containsEntry("c", "d");
130+
}
114131
}

0 commit comments

Comments
 (0)