Skip to content

Commit a31913e

Browse files
committed
Add getR2dbcUrl to postgres
1 parent 6433278 commit a31913e

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

modules/postgresql/src/main/java/org/testcontainers/postgresql/PostgreSQLR2DBCDatabaseContainer.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,24 @@ public static ConnectionFactoryOptions getOptions(PostgreSQLContainer container)
2424
return new PostgreSQLR2DBCDatabaseContainer(container).configure(options);
2525
}
2626

27+
/**
28+
* Returns the R2DBC URL for connecting to the PostgreSQL database.
29+
*
30+
* @param container the PostgreSQL container instance
31+
* @return the R2DBC URL in the format: r2dbc:postgresql://username:password@host:port/database
32+
*/
33+
public static String getR2dbcUrl(PostgreSQLContainer container) {
34+
return String.format(
35+
"r2dbc:%s://%s:%s@%s:%d/%s",
36+
PostgresqlConnectionFactoryProvider.POSTGRESQL_DRIVER,
37+
container.getUsername(),
38+
container.getPassword(),
39+
container.getHost(),
40+
container.getMappedPort(PostgreSQLContainer.POSTGRESQL_PORT),
41+
container.getDatabaseName()
42+
);
43+
}
44+
2745
@Override
2846
public ConnectionFactoryOptions configure(ConnectionFactoryOptions options) {
2947
return options
@@ -55,4 +73,9 @@ public void stop() {
5573
public void close() {
5674
this.container.close();
5775
}
76+
77+
@Override
78+
public String getR2dbcUrl() {
79+
return getR2dbcUrl(this.container);
80+
}
5881
}

modules/postgresql/src/test/java/org/testcontainers/postgresql/PostgreSQLR2DBCDatabaseContainerTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,39 @@ protected ConnectionFactoryOptions getOptions(PostgreSQLContainer container) {
2727
protected String createR2DBCUrl() {
2828
return "r2dbc:tc:postgresql:///db?TC_IMAGE_TAG=10-alpine";
2929
}
30+
31+
@org.junit.jupiter.api.Test
32+
void testGetR2dbcUrl() {
33+
try (PostgreSQLContainer container = createContainer()) {
34+
container.start();
35+
36+
// Test static method
37+
String r2dbcUrlStatic = PostgreSQLR2DBCDatabaseContainer.getR2dbcUrl(container);
38+
39+
org.assertj.core.api.Assertions.assertThat(r2dbcUrlStatic).isNotNull();
40+
org.assertj.core.api.Assertions.assertThat(r2dbcUrlStatic).startsWith("r2dbc:postgresql://");
41+
org.assertj.core.api.Assertions.assertThat(r2dbcUrlStatic).contains(container.getHost());
42+
org.assertj.core.api.Assertions.assertThat(r2dbcUrlStatic).contains(String.valueOf(container.getMappedPort(PostgreSQLContainer.POSTGRESQL_PORT)));
43+
org.assertj.core.api.Assertions.assertThat(r2dbcUrlStatic).contains(container.getDatabaseName());
44+
org.assertj.core.api.Assertions.assertThat(r2dbcUrlStatic).contains(container.getUsername());
45+
org.assertj.core.api.Assertions.assertThat(r2dbcUrlStatic).contains(container.getPassword());
46+
47+
// Verify the format: r2dbc:postgresql://username:password@host:port/database
48+
String expectedUrl = String.format(
49+
"r2dbc:postgresql://%s:%s@%s:%d/%s",
50+
container.getUsername(),
51+
container.getPassword(),
52+
container.getHost(),
53+
container.getMappedPort(PostgreSQLContainer.POSTGRESQL_PORT),
54+
container.getDatabaseName()
55+
);
56+
org.assertj.core.api.Assertions.assertThat(r2dbcUrlStatic).isEqualTo(expectedUrl);
57+
58+
// Test instance method
59+
PostgreSQLR2DBCDatabaseContainer r2dbcContainer = new PostgreSQLR2DBCDatabaseContainer(container);
60+
String r2dbcUrlInstance = r2dbcContainer.getR2dbcUrl();
61+
62+
org.assertj.core.api.Assertions.assertThat(r2dbcUrlInstance).isEqualTo(r2dbcUrlStatic);
63+
}
64+
}
3065
}

0 commit comments

Comments
 (0)