From 339702b18fe1ea94af351a98a6c054dff864706c Mon Sep 17 00:00:00 2001 From: jcechace Date: Tue, 27 Jul 2021 01:39:37 +0200 Subject: [PATCH] DBZ-3724 RHEL tests for SQL Server --- .../sqlserver/DockerSqlServerController.java | 57 +++++++++++++++++++ .../sqlserver/DockerSqlServerDeployer.java | 55 ++++++++++++++++++ .../fixtures/databases/DockerSqlServer.java | 30 ++++++++++ .../DockerRhelSqlServerConnectorIT.java | 31 ++++++++++ .../container-license-acceptance.txt | 1 + 5 files changed, 174 insertions(+) create mode 100644 debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/sqlserver/DockerSqlServerController.java create mode 100644 debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/sqlserver/DockerSqlServerDeployer.java create mode 100644 debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/fixtures/databases/DockerSqlServer.java create mode 100644 debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/tests/sqlserver/DockerRhelSqlServerConnectorIT.java create mode 100644 debezium-testing/debezium-testing-system/src/test/resources/container-license-acceptance.txt diff --git a/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/sqlserver/DockerSqlServerController.java b/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/sqlserver/DockerSqlServerController.java new file mode 100644 index 000000000..be2398fae --- /dev/null +++ b/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/sqlserver/DockerSqlServerController.java @@ -0,0 +1,57 @@ +/* + * 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.sqlserver; + +import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_SQLSERVER_SA_PASSWORD; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.testcontainers.containers.MSSQLServerContainer; +import org.testcontainers.images.builder.Transferable; + +import io.debezium.testing.system.tools.databases.AbstractDockerSqlDatabaseController; + +public class DockerSqlServerController extends AbstractDockerSqlDatabaseController> { + + private static final String DB_INIT_SCRIPT_PATH = "/database-resources/sqlserver/inventory.sql"; + private static final String DB_INIT_SCRIPT_PATH_CONTAINER = "/opt/inventory.sql"; + private final Path initScript; + + private final MSSQLServerContainer container; + + public DockerSqlServerController(MSSQLServerContainer container) { + super(container); + this.container = container; + try { + initScript = Paths.get(getClass().getResource(DB_INIT_SCRIPT_PATH).toURI()); + } + catch (URISyntaxException e) { + throw new RuntimeException(e); + } + + } + + @Override + public int getDatabasePort() { + return MSSQLServerContainer.MS_SQL_SERVER_PORT; + } + + @Override + public void initialize() throws InterruptedException { + try { + container.copyFileToContainer(Transferable.of(Files.readAllBytes(initScript)), DB_INIT_SCRIPT_PATH_CONTAINER); + container.execInContainer( + "/opt/mssql-tools/bin/sqlcmd", "-U", "sa", "-P", DATABASE_SQLSERVER_SA_PASSWORD, "-i", DB_INIT_SCRIPT_PATH_CONTAINER); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/sqlserver/DockerSqlServerDeployer.java b/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/sqlserver/DockerSqlServerDeployer.java new file mode 100644 index 000000000..dde627ce5 --- /dev/null +++ b/debezium-testing/debezium-testing-system/src/main/java/io/debezium/testing/system/tools/databases/sqlserver/DockerSqlServerDeployer.java @@ -0,0 +1,55 @@ +/* + * 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.sqlserver; + +import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_SQLSERVER_SA_PASSWORD; +import static io.debezium.testing.system.tools.ConfigProperties.DOCKER_IMAGE_SQLSERVER; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.MSSQLServerContainer; + +import io.debezium.testing.system.tools.AbstractDockerDeployer; + +/** + * @author Jakub Cechacek + */ +public final class DockerSqlServerDeployer + extends AbstractDockerDeployer> { + + private static final Logger LOGGER = LoggerFactory.getLogger(DockerSqlServerDeployer.class); + + private DockerSqlServerDeployer(MSSQLServerContainer container) { + super(container); + } + + @Override + protected DockerSqlServerController getController(MSSQLServerContainer container) { + return new DockerSqlServerController(container); + } + + public static class Builder + extends DockerBuilder, DockerSqlServerDeployer> { + + public Builder() { + this(new MSSQLServerContainer<>(DOCKER_IMAGE_SQLSERVER)); + } + + public Builder(MSSQLServerContainer container) { + super(container); + } + + @Override + public DockerSqlServerDeployer build() { + container + .withPassword(DATABASE_SQLSERVER_SA_PASSWORD) + .withEnv("MSSQL_AGENT_ENABLED", "true") + .withEnv("MSSQL_PID", "Standard"); + + return new DockerSqlServerDeployer(container); + } + } +} diff --git a/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/fixtures/databases/DockerSqlServer.java b/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/fixtures/databases/DockerSqlServer.java new file mode 100644 index 000000000..9f07b3c12 --- /dev/null +++ b/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/fixtures/databases/DockerSqlServer.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.sqlserver.DockerSqlServerDeployer; + +public interface DockerSqlServer + extends TestSetupFixture, SqlDatabaseFixture, DockerNetwork { + + default void setupDatabase() throws Exception { + Class.forName("org.postgresql.Driver"); + DockerSqlServerDeployer deployer = new DockerSqlServerDeployer.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/sqlserver/DockerRhelSqlServerConnectorIT.java b/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/tests/sqlserver/DockerRhelSqlServerConnectorIT.java new file mode 100644 index 000000000..445d6817e --- /dev/null +++ b/debezium-testing/debezium-testing-system/src/test/java/io/debezium/testing/system/tests/sqlserver/DockerRhelSqlServerConnectorIT.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.sqlserver; + +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.SqlServerConnector; +import io.debezium.testing.system.fixtures.databases.DockerSqlServer; +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("sqlserver") +@Tag("docker") +@Tag("rhel") +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class DockerRhelSqlServerConnectorIT + extends DockerConnectorTest + implements DockerKafka, DockerSqlServer, SqlServerConnector, SqlServerTestCases { +} 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 new file mode 100644 index 000000000..0d03f9ac1 --- /dev/null +++ b/debezium-testing/debezium-testing-system/src/test/resources/container-license-acceptance.txt @@ -0,0 +1 @@ +mcr.microsoft.com/mssql/server:2019-latest