DBZ-3724 RHEL tests for SQL Server

This commit is contained in:
jcechace 2021-07-27 01:39:37 +02:00 committed by Jiri Pechanec
parent 6f3f2db076
commit 339702b18f
5 changed files with 174 additions and 0 deletions

View File

@ -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<MSSQLServerContainer<?>> {
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);
}
}
}

View File

@ -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<DockerSqlServerController, MSSQLServerContainer<?>> {
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<Builder, MSSQLServerContainer<?>, 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);
}
}
}

View File

@ -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();
}
}

View File

@ -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<SqlDatabaseController>
implements DockerKafka, DockerSqlServer, SqlServerConnector, SqlServerTestCases {
}

View File

@ -0,0 +1 @@
mcr.microsoft.com/mssql/server:2019-latest