DBZ-3929 Docker tests for Oracle

This commit is contained in:
jcechace 2021-10-20 14:47:51 +02:00 committed by Gunnar Morling
parent cbdbfec27a
commit e402afd84a
6 changed files with 181 additions and 4 deletions

View File

@ -11,7 +11,7 @@ public abstract class AbstractDockerSqlDatabaseController<C extends JdbcDatabase
extends AbstractDockerDatabaseController<C, SqlDatabaseClient>
implements SqlDatabaseController {
private final C container;
protected final C container;
public AbstractDockerSqlDatabaseController(C container) {
super(container);

View File

@ -0,0 +1,60 @@
/*
* 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.oracle;
import io.debezium.testing.system.tools.databases.AbstractDockerSqlDatabaseController;
import io.debezium.testing.system.tools.databases.db2.OcpDB2Controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.OracleContainer;
import org.testcontainers.images.builder.Transferable;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_ORACLE_PASSWORD;
import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_ORACLE_PDBNAME;
import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_ORACLE_USERNAME;
public class DockerOracleController extends AbstractDockerSqlDatabaseController<OracleContainer> {
private static final String DB_INIT_SCRIPT_PATH = "/database-resources/oracle/inventory.sql";
private static final String DB_INIT_SCRIPT_PATH_CONTAINER = "/home/oracle/inventory.sql";
private static final Logger LOGGER = LoggerFactory.getLogger(DockerOracleController.class);
private final Path initScript;
public DockerOracleController(OracleContainer container) {
super(container);
try {
initScript = Paths.get(getClass().getResource(DB_INIT_SCRIPT_PATH).toURI());
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
@Override
public int getDatabasePort() {
return 1521;
}
@Override
public void initialize() throws InterruptedException {
try {
container.copyFileToContainer(Transferable.of(Files.readAllBytes(initScript)), DB_INIT_SCRIPT_PATH_CONTAINER);
container.execInContainer(
"sqlplus", "-S",
DATABASE_ORACLE_USERNAME + "/" + DATABASE_ORACLE_PASSWORD + "@//localhost:1521/" + DATABASE_ORACLE_PDBNAME,
"@" + DB_INIT_SCRIPT_PATH_CONTAINER
);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -0,0 +1,63 @@
/*
* 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.oracle;
import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_ORACLE_PASSWORD;
import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_ORACLE_PDBNAME;
import static io.debezium.testing.system.tools.ConfigProperties.DATABASE_ORACLE_USERNAME;
import static io.debezium.testing.system.tools.ConfigProperties.DOCKER_IMAGE_ORACLE;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.OracleContainer;
import org.testcontainers.utility.DockerImageName;
import io.debezium.testing.system.tools.AbstractDockerDeployer;
/**
* @author Jakub Cechacek
*/
public final class DockerOracleDeployer
extends AbstractDockerDeployer<DockerOracleController, OracleContainer> {
private static final Logger LOGGER = LoggerFactory.getLogger(DockerOracleDeployer.class);
private DockerOracleDeployer(OracleContainer container) {
super(container);
}
@Override
protected DockerOracleController getController(OracleContainer container) {
return new DockerOracleController(container);
}
public static class Builder
extends DockerBuilder<Builder, OracleContainer, DockerOracleDeployer> {
public Builder() {
this(new OracleContainer(
DockerImageName.parse(DOCKER_IMAGE_ORACLE).asCompatibleSubstituteFor("gvenzl/oracle-xe")));
}
public Builder(OracleContainer container) {
super(container);
}
@Override
public DockerOracleDeployer build() {
container
.withDatabaseName(DATABASE_ORACLE_PDBNAME)
.withUsername(DATABASE_ORACLE_USERNAME)
.withPassword(DATABASE_ORACLE_PASSWORD)
.withStartupTimeout(Duration.of(15, ChronoUnit.MINUTES));
return new DockerOracleDeployer(container);
}
}
}

View File

@ -24,11 +24,8 @@ public class DockerSqlServerController extends AbstractDockerSqlDatabaseControll
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());
}

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.oracle.DockerOracleDeployer;
public interface DockerOracle
extends TestSetupFixture, SqlDatabaseFixture, DockerNetwork {
default void setupDatabase() throws Exception {
Class.forName("oracle.jdbc.OracleDriver");
DockerOracleDeployer deployer = new DockerOracleDeployer.Builder()
.withNetwork(getNetwork())
.build();
SqlDatabaseController controller = deployer.deploy();
controller.initialize();
setDbController(controller);
}
default void teardownDatabase() throws Exception {
getDbController().reload();
}
}

View File

@ -0,0 +1,27 @@
/*
* 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.oracle;
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.OracleConnector;
import io.debezium.testing.system.fixtures.databases.DockerOracle;
import io.debezium.testing.system.fixtures.kafka.DockerKafka;
import io.debezium.testing.system.tests.DockerConnectorTest;
import io.debezium.testing.system.tools.databases.SqlDatabaseController;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@Tag("acceptance")
@Tag("oracle ")
@Tag("docker")
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class DockerOracleConnectorIT
extends DockerConnectorTest<SqlDatabaseController>
implements DockerKafka, DockerOracle, OracleConnector, OracleTestCases {
}