Skip to content

Commit 00336f0

Browse files
authored
Fix support to set a custom database name in Host-less JDBC urls (#10603)
Fixes #8319
1 parent d3e2248 commit 00336f0

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-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: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,20 @@ public void testDaemonCapture() {
111111

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

0 commit comments

Comments
 (0)