Skip to content

Commit 7c6e231

Browse files
committed
Use org.testcontainers:testcontainers instead of per database specializations.
Motivation: Test containers specializations for database do have a split package with the main test containers jars, preventing running tests in IDE. Since the benefit of these specialization is very thin, the tradeof is not worth and we should use basic testcontainers. Changes: Use org.testcontainers:testcontainers everywhere.
1 parent 96eb1c0 commit 7c6e231

File tree

5 files changed

+61
-21
lines changed

5 files changed

+61
-21
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
<unix.socket.directory/>
5454
<unix.socket.port/>
5555
<jar.manifest>${project.basedir}/src/main/resources/META-INF/MANIFEST.MF</jar.manifest>
56-
<testcontainers.version>1.17.6</testcontainers.version>
56+
<testcontainers.version>1.20.1</testcontainers.version>
5757
</properties>
5858

5959
<dependencyManagement>

vertx-db2-client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
<!-- Testing purposes -->
5151
<dependency>
5252
<groupId>org.testcontainers</groupId>
53-
<artifactId>db2</artifactId>
53+
<artifactId>testcontainers</artifactId>
5454
<version>${testcontainers.version}</version>
5555
<scope>test</scope>
5656
</dependency>

vertx-db2-client/src/test/java/io/vertx/db2client/junit/DB2Resource.java

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@
1919
import io.vertx.core.net.JksOptions;
2020
import io.vertx.db2client.DB2ConnectOptions;
2121
import org.junit.rules.ExternalResource;
22-
import org.testcontainers.containers.Db2Container;
22+
import org.testcontainers.containers.GenericContainer;
23+
import org.testcontainers.containers.InternetProtocol;
2324
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
2425

2526
import java.nio.file.Files;
@@ -45,12 +46,25 @@ public class DB2Resource extends ExternalResource {
4546
private boolean started = false;
4647
private boolean isDb2OnZ = false;
4748
private DB2ConnectOptions options;
48-
private final Db2Container instance = new Db2Container("ibmcom/db2:11.5.0.0a")
49-
.acceptLicense()
49+
private final String database = "vertx";
50+
private final String user = "vertx";
51+
private final String password = "vertx";
52+
private final ServerContainer instance = new ServerContainer("ibmcom/db2:11.5.0.0a") {
53+
@Override
54+
protected void configure() {
55+
this.addEnv("LICENSE", "accept");
56+
this.addEnv("DBNAME", database);
57+
this.addEnv("DB2INSTANCE", user);
58+
this.addEnv("DB2INST1_PASSWORD", password);
59+
if (!this.getEnvMap().containsKey("AUTOCONFIG")) {
60+
this.addEnv("AUTOCONFIG", "false");
61+
}
62+
if (!this.getEnvMap().containsKey("ARCHIVE_LOGS")) {
63+
this.addEnv("ARCHIVE_LOGS", "false");
64+
}
65+
}
66+
}
5067
.withLogConsumer(out -> System.out.print("[DB2] " + out.getUtf8String()))
51-
.withUsername("vertx")
52-
.withPassword("vertx")
53-
.withDatabaseName("vertx")
5468
.withExposedPorts(50000, 50001)
5569
.withFileSystemBind("src/test/resources/tls/server/", "/certs/")
5670
.withFileSystemBind("src/test/resources/tls/db2_tls_setup.sh", "/var/custom/db2_tls_setup.sh")
@@ -69,9 +83,9 @@ protected void before() throws Throwable {
6983
options = new DB2ConnectOptions()
7084
.setHost(instance.getHost())
7185
.setPort(instance.getMappedPort(50000))
72-
.setDatabase(instance.getDatabaseName())
73-
.setUser(instance.getUsername())
74-
.setPassword(instance.getPassword());
86+
.setDatabase(database)
87+
.setUser(user)
88+
.setPassword(password);
7589
} else {
7690
System.out.println("Using custom DB2 instance as requested via DB2_HOST=" + get("DB2_HOST"));
7791
Objects.requireNonNull(get("DB2_PORT"), "Must set DB2_PORT to a non-null value if DB2_HOST is set");
@@ -143,4 +157,15 @@ private void runInitSql(Connection con) throws Exception {
143157
}
144158
}
145159

160+
private class ServerContainer extends GenericContainer<ServerContainer> {
161+
162+
public ServerContainer(String dockerImageName) {
163+
super(dockerImageName);
164+
}
165+
166+
public ServerContainer withFixedExposedPort(int hostPort, int containerPort) {
167+
super.addFixedExposedPort(hostPort, containerPort, InternetProtocol.TCP);
168+
return self();
169+
}
170+
}
146171
}

vertx-pg-client/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585

8686
<dependency>
8787
<groupId>org.testcontainers</groupId>
88-
<artifactId>postgresql</artifactId>
88+
<artifactId>testcontainers</artifactId>
8989
<version>${testcontainers.version}</version>
9090
<scope>test</scope>
9191
</dependency>

vertx-pg-client/src/test/java/io/vertx/pgclient/junit/ContainerPgRule.java

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@
2020
import io.vertx.sqlclient.PoolOptions;
2121
import org.junit.rules.ExternalResource;
2222
import org.testcontainers.containers.BindMode;
23+
import org.testcontainers.containers.GenericContainer;
2324
import org.testcontainers.containers.InternetProtocol;
24-
import org.testcontainers.containers.PostgreSQLContainer;
25+
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
2526

26-
import static org.testcontainers.containers.PostgreSQLContainer.POSTGRESQL_PORT;
27+
import java.time.Duration;
28+
import java.time.temporal.ChronoUnit;
2729

2830
/**
2931
* Postgresql test database based on https://www.testcontainers.org
@@ -34,11 +36,13 @@
3436
*/
3537
public class ContainerPgRule extends ExternalResource {
3638

39+
private static final int POSTGRESQL_PORT = 5432;
40+
3741
private static final String connectionUri = System.getProperty("connection.uri");
3842
private static final String tlsConnectionUri = System.getProperty("tls.connection.uri");
3943
private static final String tlsForceConnectionUri = System.getProperty("tls.force.connection.uri");
4044

41-
private ServerContainer<?> server;
45+
private ServerContainer server;
4246
private PgConnectOptions options;
4347
private String databaseVersion;
4448
private boolean ssl;
@@ -72,10 +76,7 @@ public ContainerPgRule user(String user) {
7276
}
7377

7478
private void initServer(String version) throws Exception {
75-
server = new ServerContainer<>("postgres:" + version)
76-
.withDatabaseName("postgres")
77-
.withUsername(user)
78-
.withPassword("postgres")
79+
server = new ServerContainer("postgres:" + version)
7980
.withClasspathResourceMapping("create-postgres.sql", "/docker-entrypoint-initdb.d/create-postgres.sql", BindMode.READ_ONLY);
8081
if (ssl) {
8182
server
@@ -183,15 +184,29 @@ protected void after() {
183184
}
184185
}
185186

186-
private static class ServerContainer<SELF extends ServerContainer<SELF>> extends PostgreSQLContainer<SELF> {
187+
private class ServerContainer extends GenericContainer<ServerContainer> {
187188

188189
public ServerContainer(String dockerImageName) {
189190
super(dockerImageName);
191+
this.waitStrategy = (new LogMessageWaitStrategy()).withRegEx(".*database system is ready to accept connections.*\\s").withTimes(2).withStartupTimeout(Duration.of(60L, ChronoUnit.SECONDS));
192+
this.setCommand("postgres", "-c", "fsync=off");
193+
this.addExposedPort(POSTGRESQL_PORT);
194+
}
195+
196+
@Override
197+
protected void configure() {
198+
this.addEnv("POSTGRES_DB", "postgres");
199+
this.addEnv("POSTGRES_USER", user);
200+
this.addEnv("POSTGRES_PASSWORD", "postgres");
190201
}
191202

192-
public SELF withFixedExposedPort(int hostPort, int containerPort) {
203+
public ServerContainer withFixedExposedPort(int hostPort, int containerPort) {
193204
super.addFixedExposedPort(hostPort, containerPort, InternetProtocol.TCP);
194205
return self();
195206
}
207+
208+
protected void waitUntilContainerStarted() {
209+
this.getWaitStrategy().waitUntilReady(this);
210+
}
196211
}
197212
}

0 commit comments

Comments
 (0)