diff --git a/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/db2/DockerDB2Controller.java b/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/db2/DockerDB2Controller.java new file mode 100644 index 000000000..e851bd706 --- /dev/null +++ b/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/db2/DockerDB2Controller.java @@ -0,0 +1,45 @@ +/* + * Copyright Debezium Authors. + * + * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.debezium.testing.system.tools.databases.db2; + +import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_DB2_DBZ_PASSWORD; +import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_DB2_DBZ_USERNAME; + +import java.sql.Connection; +import java.sql.SQLException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.Db2Container; + +import io.debezium.testing.system.tools.databases.AbstractDockerSqlDatabaseController; +import io.debezium.testing.system.tools.databases.SqlDatabaseClient; + +public class DockerDB2Controller extends AbstractDockerSqlDatabaseController { + + private static final Logger LOGGER = LoggerFactory.getLogger(OcpDB2Controller.class); + + public DockerDB2Controller(Db2Container container) { + super(container); + } + + @Override + public int getDatabasePort() { + return Db2Container.DB2_PORT; + } + + @Override + public void initialize() throws InterruptedException { + LOGGER.info("Waiting until DB2 instance is ready"); + SqlDatabaseClient client = getDatabaseClient(DATABASE_DB2_DBZ_USERNAME, DATABASE_DB2_DBZ_PASSWORD); + try (Connection connection = client.connect()) { + LOGGER.info("Database connection established successfully!"); + } + catch (SQLException e) { + throw new RuntimeException(e); + } + } +} diff --git a/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/db2/DockerDB2Deployer.java b/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/db2/DockerDB2Deployer.java new file mode 100644 index 000000000..4d3e2093f --- /dev/null +++ b/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/db2/DockerDB2Deployer.java @@ -0,0 +1,67 @@ +/* + * Copyright Debezium Authors. + * + * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.debezium.testing.system.tools.databases.db2; + +import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_DB2_DBZ_DBNAME; +import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_DB2_PASSWORD; +import static io.debezium.testing.system.tools.ConfigProperties.DOCKER_IMAGE_DB2; + +import java.time.Duration; +import java.time.temporal.ChronoUnit; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.Db2Container; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.DockerImageName; + +import io.debezium.testing.system.tools.AbstractDockerDeployer; + +/** + * @author Jakub Cechacek + */ +public final class DockerDB2Deployer + extends AbstractDockerDeployer { + + private static final Logger LOGGER = LoggerFactory.getLogger(DockerDB2Deployer.class); + + private DockerDB2Deployer(Db2Container container) { + super(container); + } + + @Override + protected DockerDB2Controller getController(Db2Container container) { + return new DockerDB2Controller(container); + } + + public static class Builder + extends DockerBuilder { + + public Builder() { + this(new Db2Container( + DockerImageName.parse(DOCKER_IMAGE_DB2).asCompatibleSubstituteFor("ibmcom/db2"))); + } + + public Builder(Db2Container container) { + super(container); + } + + @Override + public DockerDB2Deployer build() { + container + .withDatabaseName(DATABASE_DB2_DBZ_DBNAME) + .withPassword(DATABASE_DB2_PASSWORD) + .acceptLicense() + .withEnv("ARCHIVE_LOGS", "true") + .withEnv("AUTOCONFIG", "true") + .withPrivilegedMode(true) + .waitingFor(Wait.forLogMessage(".*CDC setup completed.*", 1)) + .withStartupTimeout(Duration.of(15, ChronoUnit.MINUTES)); + + return new DockerDB2Deployer(container); + } + } +} diff --git a/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/fixtures/databases/DockerDb2.java b/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/fixtures/databases/DockerDb2.java new file mode 100644 index 000000000..947121f61 --- /dev/null +++ b/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/fixtures/databases/DockerDb2.java @@ -0,0 +1,30 @@ +/* + * Copyright Debezium Authors. + * + * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.debezium.testing.system.fixtures.databases; + +import io.debezium.testing.system.fixtures.DockerNetwork; +import io.debezium.testing.system.fixtures.TestSetupFixture; +import io.debezium.testing.system.tools.databases.SqlDatabaseController; +import io.debezium.testing.system.tools.databases.db2.DockerDB2Deployer; + +public interface DockerDb2 + extends TestSetupFixture, SqlDatabaseFixture, DockerNetwork { + + default void setupDatabase() throws Exception { + Class.forName("org.postgresql.Driver"); + DockerDB2Deployer deployer = new DockerDB2Deployer.Builder() + .withNetwork(getNetwork()) + .build(); + SqlDatabaseController controller = deployer.deploy(); + controller.initialize(); + setDbController(controller); + } + + default void teardownDatabase() throws Exception { + getDbController().reload(); + } + +} diff --git a/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/tests/db2/DockerRhelDB2ConnectorIT.java b/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/tests/db2/DockerRhelDB2ConnectorIT.java new file mode 100644 index 000000000..59aa31549 --- /dev/null +++ b/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/tests/db2/DockerRhelDB2ConnectorIT.java @@ -0,0 +1,31 @@ +/* + * Copyright Debezium Authors. + * + * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package io.debezium.testing.system.tests.db2; + +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestMethodOrder; + +import io.debezium.testing.system.fixtures.connectors.DB2Connector; +import io.debezium.testing.system.fixtures.databases.DockerDb2; +import io.debezium.testing.system.fixtures.kafka.DockerKafka; +import io.debezium.testing.system.tests.DockerConnectorTest; +import io.debezium.testing.system.tools.databases.SqlDatabaseController; + +/** + * @author Jakub Cechacek + */ +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +@Tag("acceptance") +@Tag("db2 ") +@Tag("docker") +@Tag("rhel") +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class DockerRhelDB2ConnectorIT + extends DockerConnectorTest + implements DockerKafka, DockerDb2, DB2Connector, DB2TestCases { +} diff --git a/debezium-testing/debezium-testing-system/src/test/resources/container-license-acceptance.txt b/debezium-testing/debezium-testing-system/src/test/resources/container-license-acceptance.txt index 0d03f9ac1..2f5b4100a 100644 --- a/debezium-testing/debezium-testing-system/src/test/resources/container-license-acceptance.txt +++ b/debezium-testing/debezium-testing-system/src/test/resources/container-license-acceptance.txt @@ -1 +1,2 @@ mcr.microsoft.com/mssql/server:2019-latest +quay.io/debezium/db2-cdc:latest