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); + } } }