diff --git a/pom.xml b/pom.xml
index 140b04bc7..bee4462dd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -53,7 +53,7 @@
${project.basedir}/src/main/resources/META-INF/MANIFEST.MF
- 1.17.6
+ 1.20.1
diff --git a/vertx-db2-client/pom.xml b/vertx-db2-client/pom.xml
index ab34d7be0..61845a14e 100644
--- a/vertx-db2-client/pom.xml
+++ b/vertx-db2-client/pom.xml
@@ -50,7 +50,7 @@
org.testcontainers
- db2
+ testcontainers
${testcontainers.version}
test
diff --git a/vertx-db2-client/src/test/java/io/vertx/db2client/junit/DB2Resource.java b/vertx-db2-client/src/test/java/io/vertx/db2client/junit/DB2Resource.java
index 4efd195c8..1fd4e52b0 100644
--- a/vertx-db2-client/src/test/java/io/vertx/db2client/junit/DB2Resource.java
+++ b/vertx-db2-client/src/test/java/io/vertx/db2client/junit/DB2Resource.java
@@ -19,7 +19,8 @@
import io.vertx.core.net.JksOptions;
import io.vertx.db2client.DB2ConnectOptions;
import org.junit.rules.ExternalResource;
-import org.testcontainers.containers.Db2Container;
+import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.InternetProtocol;
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
import java.nio.file.Files;
@@ -45,12 +46,25 @@ public class DB2Resource extends ExternalResource {
private boolean started = false;
private boolean isDb2OnZ = false;
private DB2ConnectOptions options;
- private final Db2Container instance = new Db2Container("ibmcom/db2:11.5.0.0a")
- .acceptLicense()
+ private final String database = "vertx";
+ private final String user = "vertx";
+ private final String password = "vertx";
+ private final ServerContainer instance = new ServerContainer("ibmcom/db2:11.5.0.0a") {
+ @Override
+ protected void configure() {
+ this.addEnv("LICENSE", "accept");
+ this.addEnv("DBNAME", database);
+ this.addEnv("DB2INSTANCE", user);
+ this.addEnv("DB2INST1_PASSWORD", password);
+ if (!this.getEnvMap().containsKey("AUTOCONFIG")) {
+ this.addEnv("AUTOCONFIG", "false");
+ }
+ if (!this.getEnvMap().containsKey("ARCHIVE_LOGS")) {
+ this.addEnv("ARCHIVE_LOGS", "false");
+ }
+ }
+ }
.withLogConsumer(out -> System.out.print("[DB2] " + out.getUtf8String()))
- .withUsername("vertx")
- .withPassword("vertx")
- .withDatabaseName("vertx")
.withExposedPorts(50000, 50001)
.withFileSystemBind("src/test/resources/tls/server/", "/certs/")
.withFileSystemBind("src/test/resources/tls/db2_tls_setup.sh", "/var/custom/db2_tls_setup.sh")
@@ -69,9 +83,9 @@ protected void before() throws Throwable {
options = new DB2ConnectOptions()
.setHost(instance.getHost())
.setPort(instance.getMappedPort(50000))
- .setDatabase(instance.getDatabaseName())
- .setUser(instance.getUsername())
- .setPassword(instance.getPassword());
+ .setDatabase(database)
+ .setUser(user)
+ .setPassword(password);
} else {
System.out.println("Using custom DB2 instance as requested via DB2_HOST=" + get("DB2_HOST"));
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 {
}
}
+ private class ServerContainer extends GenericContainer {
+
+ public ServerContainer(String dockerImageName) {
+ super(dockerImageName);
+ }
+
+ public ServerContainer withFixedExposedPort(int hostPort, int containerPort) {
+ super.addFixedExposedPort(hostPort, containerPort, InternetProtocol.TCP);
+ return self();
+ }
+ }
}
diff --git a/vertx-pg-client/pom.xml b/vertx-pg-client/pom.xml
index 5580e95e4..5f2b8ea60 100644
--- a/vertx-pg-client/pom.xml
+++ b/vertx-pg-client/pom.xml
@@ -85,7 +85,7 @@
org.testcontainers
- postgresql
+ testcontainers
${testcontainers.version}
test
diff --git a/vertx-pg-client/src/test/java/io/vertx/pgclient/junit/ContainerPgRule.java b/vertx-pg-client/src/test/java/io/vertx/pgclient/junit/ContainerPgRule.java
index 24ee60dd0..7263d8fc7 100644
--- a/vertx-pg-client/src/test/java/io/vertx/pgclient/junit/ContainerPgRule.java
+++ b/vertx-pg-client/src/test/java/io/vertx/pgclient/junit/ContainerPgRule.java
@@ -20,10 +20,12 @@
import io.vertx.sqlclient.PoolOptions;
import org.junit.rules.ExternalResource;
import org.testcontainers.containers.BindMode;
+import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.InternetProtocol;
-import org.testcontainers.containers.PostgreSQLContainer;
+import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
-import static org.testcontainers.containers.PostgreSQLContainer.POSTGRESQL_PORT;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
/**
* Postgresql test database based on https://www.testcontainers.org
@@ -34,11 +36,13 @@
*/
public class ContainerPgRule extends ExternalResource {
+ private static final int POSTGRESQL_PORT = 5432;
+
private static final String connectionUri = System.getProperty("connection.uri");
private static final String tlsConnectionUri = System.getProperty("tls.connection.uri");
private static final String tlsForceConnectionUri = System.getProperty("tls.force.connection.uri");
- private ServerContainer> server;
+ private ServerContainer server;
private PgConnectOptions options;
private String databaseVersion;
private boolean ssl;
@@ -72,10 +76,7 @@ public ContainerPgRule user(String user) {
}
private void initServer(String version) throws Exception {
- server = new ServerContainer<>("postgres:" + version)
- .withDatabaseName("postgres")
- .withUsername(user)
- .withPassword("postgres")
+ server = new ServerContainer("postgres:" + version)
.withClasspathResourceMapping("create-postgres.sql", "/docker-entrypoint-initdb.d/create-postgres.sql", BindMode.READ_ONLY);
if (ssl) {
server
@@ -183,15 +184,29 @@ protected void after() {
}
}
- private static class ServerContainer> extends PostgreSQLContainer {
+ private class ServerContainer extends GenericContainer {
public ServerContainer(String dockerImageName) {
super(dockerImageName);
+ this.waitStrategy = (new LogMessageWaitStrategy()).withRegEx(".*database system is ready to accept connections.*\\s").withTimes(2).withStartupTimeout(Duration.of(60L, ChronoUnit.SECONDS));
+ this.setCommand("postgres", "-c", "fsync=off");
+ this.addExposedPort(POSTGRESQL_PORT);
+ }
+
+ @Override
+ protected void configure() {
+ this.addEnv("POSTGRES_DB", "postgres");
+ this.addEnv("POSTGRES_USER", user);
+ this.addEnv("POSTGRES_PASSWORD", "postgres");
}
- public SELF withFixedExposedPort(int hostPort, int containerPort) {
+ public ServerContainer withFixedExposedPort(int hostPort, int containerPort) {
super.addFixedExposedPort(hostPort, containerPort, InternetProtocol.TCP);
return self();
}
+
+ protected void waitUntilContainerStarted() {
+ this.getWaitStrategy().waitUntilReady(this);
+ }
}
}