Skip to content

Commit a8b0f5c

Browse files
authored
Add PostgreSQLR2DBCDatabaseContainer compatible with org.testcontainers.postgresql.PostgreSQLContainer (#11120)
1 parent 546fa4a commit a8b0f5c

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package org.testcontainers.postgresql;
2+
3+
import io.r2dbc.postgresql.PostgresqlConnectionFactoryProvider;
4+
import io.r2dbc.spi.ConnectionFactoryOptions;
5+
import org.testcontainers.lifecycle.Startable;
6+
import org.testcontainers.r2dbc.R2DBCDatabaseContainer;
7+
8+
import java.util.Set;
9+
10+
public final class PostgreSQLR2DBCDatabaseContainer implements R2DBCDatabaseContainer {
11+
12+
private final PostgreSQLContainer container;
13+
14+
public PostgreSQLR2DBCDatabaseContainer(PostgreSQLContainer container) {
15+
this.container = container;
16+
}
17+
18+
public static ConnectionFactoryOptions getOptions(PostgreSQLContainer container) {
19+
ConnectionFactoryOptions options = ConnectionFactoryOptions
20+
.builder()
21+
.option(ConnectionFactoryOptions.DRIVER, PostgresqlConnectionFactoryProvider.POSTGRESQL_DRIVER)
22+
.build();
23+
24+
return new PostgreSQLR2DBCDatabaseContainer(container).configure(options);
25+
}
26+
27+
@Override
28+
public ConnectionFactoryOptions configure(ConnectionFactoryOptions options) {
29+
return options
30+
.mutate()
31+
.option(ConnectionFactoryOptions.HOST, container.getHost())
32+
.option(ConnectionFactoryOptions.PORT, container.getMappedPort(PostgreSQLContainer.POSTGRESQL_PORT))
33+
.option(ConnectionFactoryOptions.DATABASE, container.getDatabaseName())
34+
.option(ConnectionFactoryOptions.USER, container.getUsername())
35+
.option(ConnectionFactoryOptions.PASSWORD, container.getPassword())
36+
.build();
37+
}
38+
39+
@Override
40+
public Set<Startable> getDependencies() {
41+
return this.container.getDependencies();
42+
}
43+
44+
@Override
45+
public void start() {
46+
this.container.start();
47+
}
48+
49+
@Override
50+
public void stop() {
51+
this.container.stop();
52+
}
53+
54+
@Override
55+
public void close() {
56+
this.container.close();
57+
}
58+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.testcontainers.postgresql;
2+
3+
import io.r2dbc.spi.ConnectionFactoryOptions;
4+
import org.testcontainers.PostgreSQLTestImages;
5+
import org.testcontainers.r2dbc.AbstractR2DBCDatabaseContainerTest;
6+
7+
public class PostgreSQLR2DBCDatabaseContainerTest extends AbstractR2DBCDatabaseContainerTest<PostgreSQLContainer> {
8+
9+
@Override
10+
protected PostgreSQLContainer createContainer() {
11+
return new PostgreSQLContainer(PostgreSQLTestImages.POSTGRES_TEST_IMAGE);
12+
}
13+
14+
@Override
15+
protected ConnectionFactoryOptions getOptions(PostgreSQLContainer container) {
16+
// spotless:off
17+
// get_options {
18+
ConnectionFactoryOptions options = PostgreSQLR2DBCDatabaseContainer.getOptions(
19+
container
20+
);
21+
// }
22+
// spotless:on
23+
24+
return options;
25+
}
26+
27+
protected String createR2DBCUrl() {
28+
return "r2dbc:tc:postgresql:///db?TC_IMAGE_TAG=10-alpine";
29+
}
30+
}

0 commit comments

Comments
 (0)