From 3ea2362f4a059c2ba77491916905055c591eaa76 Mon Sep 17 00:00:00 2001 From: maxhov <14804474+maxhov@users.noreply.github.com> Date: Wed, 13 Aug 2025 15:38:33 +0200 Subject: [PATCH 1/2] fix(8319): Host-less JDBC urls should support setting a custom database name. Fixes #8319 --- .../org/testcontainers/jdbc/ConnectionUrl.java | 4 ++-- .../testcontainers/jdbc/ConnectionUrlTest.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/modules/jdbc/src/main/java/org/testcontainers/jdbc/ConnectionUrl.java b/modules/jdbc/src/main/java/org/testcontainers/jdbc/ConnectionUrl.java index e1309f66197..ec606f3ed32 100644 --- a/modules/jdbc/src/main/java/org/testcontainers/jdbc/ConnectionUrl.java +++ b/modules/jdbc/src/main/java/org/testcontainers/jdbc/ConnectionUrl.java @@ -107,7 +107,7 @@ private void parseUrl() { //In case it matches to the default pattern Matcher dbInstanceMatcher = Patterns.DB_INSTANCE_MATCHING_PATTERN.matcher(dbHostString); if (dbInstanceMatcher.matches()) { - databaseHost = Optional.of(dbInstanceMatcher.group("databaseHost")); + databaseHost = Optional.ofNullable(dbInstanceMatcher.group("databaseHost")); databasePort = Optional.ofNullable(dbInstanceMatcher.group("databasePort")).map(Integer::valueOf); databaseName = Optional.of(dbInstanceMatcher.group("databaseName")); } @@ -227,7 +227,7 @@ public interface Patterns { //Matches to part of string - hostname:port/databasename Pattern DB_INSTANCE_MATCHING_PATTERN = Pattern.compile( - "(?[^:]+)" + + "(?[^:]+)?" + "(:(?[0-9]+))?" + "(" + "(?[:/])" + diff --git a/modules/jdbc/src/test/java/org/testcontainers/jdbc/ConnectionUrlTest.java b/modules/jdbc/src/test/java/org/testcontainers/jdbc/ConnectionUrlTest.java index 123690d95f6..bf25620e679 100644 --- a/modules/jdbc/src/test/java/org/testcontainers/jdbc/ConnectionUrlTest.java +++ b/modules/jdbc/src/test/java/org/testcontainers/jdbc/ConnectionUrlTest.java @@ -111,4 +111,21 @@ public void testDaemonCapture() { assertThat(url.isInDaemonMode()).as("Daemon flag is set to true.").isTrue(); } + + + @Test + public void testHostLessConnectionUrl() { + String urlString = "jdbc:tc:mysql:8.0.36:///databasename?a=b&c=d"; + ConnectionUrl url = ConnectionUrl.newInstance(urlString); + + assertThat(url.getDatabaseType()).as("Database Type value is as expected").isEqualTo("mysql"); + assertThat(url.getImageTag()).as("Database Image tag value is as expected").contains("8.0.36"); + assertThat(url.getQueryString()).as("Query String value is as expected").contains("?a=b&c=d"); + assertThat(url.getDatabaseHost()).as("Database Host value is as expected").isEmpty(); + assertThat(url.getDatabasePort()).as("Database Port value is as expected").isEmpty(); + assertThat(url.getDatabaseName()).as("Database Name value is as expected").contains("databasename"); + + assertThat(url.getQueryParameters()).as("Parameter a is captured").containsEntry("a", "b"); + assertThat(url.getQueryParameters()).as("Parameter c is captured").containsEntry("c", "d"); + } } From 145268e80fdd822035b2fbaf166050ace8329915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Fri, 15 Aug 2025 13:28:59 -0600 Subject: [PATCH 2/2] Fix format --- .../test/java/org/testcontainers/jdbc/ConnectionUrlTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/jdbc/src/test/java/org/testcontainers/jdbc/ConnectionUrlTest.java b/modules/jdbc/src/test/java/org/testcontainers/jdbc/ConnectionUrlTest.java index bf25620e679..b6de810e06c 100644 --- a/modules/jdbc/src/test/java/org/testcontainers/jdbc/ConnectionUrlTest.java +++ b/modules/jdbc/src/test/java/org/testcontainers/jdbc/ConnectionUrlTest.java @@ -112,7 +112,6 @@ public void testDaemonCapture() { assertThat(url.isInDaemonMode()).as("Daemon flag is set to true.").isTrue(); } - @Test public void testHostLessConnectionUrl() { String urlString = "jdbc:tc:mysql:8.0.36:///databasename?a=b&c=d"; @@ -121,7 +120,7 @@ public void testHostLessConnectionUrl() { assertThat(url.getDatabaseType()).as("Database Type value is as expected").isEqualTo("mysql"); assertThat(url.getImageTag()).as("Database Image tag value is as expected").contains("8.0.36"); assertThat(url.getQueryString()).as("Query String value is as expected").contains("?a=b&c=d"); - assertThat(url.getDatabaseHost()).as("Database Host value is as expected").isEmpty(); + assertThat(url.getDatabaseHost()).as("Database Host value is as expected").isEmpty(); assertThat(url.getDatabasePort()).as("Database Port value is as expected").isEmpty(); assertThat(url.getDatabaseName()).as("Database Name value is as expected").contains("databasename");