From b03f493f8c772d9021ca88da3afb181eef67e355 Mon Sep 17 00:00:00 2001 From: taole33 Date: Tue, 9 Dec 2025 19:51:59 +0900 Subject: [PATCH] feat(module/mariadb): Add getR2dbcUrl() to MariaDBR2DBCDatabaseContainer This adds a static helper method `getR2dbcUrl(MariaDBContainer)` to generate a valid R2DBC connection string. This simplifies configuration for R2DBC users. Relates to #8797 --- .../MariaDBR2DBCDatabaseContainer.java | 11 ++++++++ .../MariaDBR2DBCDatabaseContainerTest.java | 25 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/modules/mariadb/src/main/java/org/testcontainers/containers/MariaDBR2DBCDatabaseContainer.java b/modules/mariadb/src/main/java/org/testcontainers/containers/MariaDBR2DBCDatabaseContainer.java index 99041e83e28..bf5a1404a90 100644 --- a/modules/mariadb/src/main/java/org/testcontainers/containers/MariaDBR2DBCDatabaseContainer.java +++ b/modules/mariadb/src/main/java/org/testcontainers/containers/MariaDBR2DBCDatabaseContainer.java @@ -32,4 +32,15 @@ public ConnectionFactoryOptions configure(ConnectionFactoryOptions options) { .option(ConnectionFactoryOptions.PASSWORD, container.getPassword()) .build(); } + + public static String getR2dbcUrl(MariaDBContainer container) { + return String.format( + "r2dbc:mariadb://%s:%s@%s:%d/%s", + container.getUsername(), + container.getPassword(), + container.getHost(), + container.getMappedPort(MariaDBContainer.MARIADB_PORT), + container.getDatabaseName() + ); + } } diff --git a/modules/mariadb/src/test/java/org/testcontainers/containers/MariaDBR2DBCDatabaseContainerTest.java b/modules/mariadb/src/test/java/org/testcontainers/containers/MariaDBR2DBCDatabaseContainerTest.java index 0f4acd889d5..c819b08ce94 100644 --- a/modules/mariadb/src/test/java/org/testcontainers/containers/MariaDBR2DBCDatabaseContainerTest.java +++ b/modules/mariadb/src/test/java/org/testcontainers/containers/MariaDBR2DBCDatabaseContainerTest.java @@ -1,9 +1,13 @@ package org.testcontainers.containers; import io.r2dbc.spi.ConnectionFactoryOptions; +import org.junit.jupiter.api.Test; +import org.testcontainers.MariaDBTestImages; import org.testcontainers.r2dbc.AbstractR2DBCDatabaseContainerTest; import org.testcontainers.utility.DockerImageName; +import static org.assertj.core.api.Assertions.assertThat; + public class MariaDBR2DBCDatabaseContainerTest extends AbstractR2DBCDatabaseContainerTest> { @Override @@ -20,4 +24,25 @@ protected String createR2DBCUrl() { protected MariaDBContainer createContainer() { return new MariaDBContainer<>(DockerImageName.parse("mariadb:10.3.39")); } + + @Test + public void testGetR2dbcUrl() { + try (MariaDBContainer container = new MariaDBContainer<>(MariaDBTestImages.MARIADB_IMAGE)) { + container.start(); + + String r2dbcUrl = MariaDBR2DBCDatabaseContainer.getR2dbcUrl(container); + + String user = container.getUsername(); + String password = container.getPassword(); + String host = container.getHost(); + Integer port = container.getMappedPort(MariaDBContainer.MARIADB_PORT); + String db = container.getDatabaseName(); + + String expectedPattern = String.format("^r2dbc:mariadb://%s:%s@%s:%d/%s$", user, password, host, port, db); + + assertThat(r2dbcUrl) + .as("URL must strictly match format 'r2dbc:mariadb://user:pass@host:port/db'") + .matches(expectedPattern); + } + } }