Skip to content

Commit

Permalink
DB tests using docker
Browse files Browse the repository at this point in the history
Change-Id: I903b9f5bcb66f6cf41bea3f487351b15a62736b3
Signed-off-by: Stéphane Thibaudeau <stephane.thibaudeau@obeo.fr>
  • Loading branch information
sthibaudeau committed Jul 8, 2019
1 parent 5b645fc commit edf16ec
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 88 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ docker run --name oracletest --shm-size=1g -p 1521:1521 -e ORACLE_PWD=oracleserv
docker run --name oracletest --shm-size=1g -p 1521:1521 -e ORACLE_PWD=oracleserver -v /d/temp/oradata:/u01/app/oracle/oradata -d oracle/database:11.2.0.2-xe
docker run --name oracletest --shm-size=1g -p 1521:1521 -e ORACLE_PWD=oracleserver -v temp/oradata:/u01/app/oracle/oradata -d oracle/database:11.2.0.2-xe

docker run --name oracletest --shm-size=1g -p 1521:1521 -e ORACLE_PWD=oracleserver -v oradata:/u01/app/oracle/oradata -d oracle/database:11.2.0.2-xe
docker run --name oracletest --shm-size=1g -p 1521:1521 -e ORACLE_PWD=oracleserver -v oradataxyz:/u01/app/oracle/oradata -d oracle/database:11.2.0.2-xe

Arrêt :

- docker stop oracletest
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package org.obeonetwork.dsl.database.tests.mariadb;

import static org.junit.Assert.fail;

import java.time.Duration;
import java.time.Instant;
import java.util.Date;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.obeonetwork.docker.common.DockerUtils;
import org.obeonetwork.dsl.database.DataBase;
import org.obeonetwork.dsl.database.reverse.DatabaseReverser;
import org.obeonetwork.dsl.database.reverse.source.DataSource;
Expand All @@ -11,6 +19,12 @@
import org.obeonetwork.dsl.database.tests.utils.TestUtils;
import org.obeonetwork.dsl.typeslibrary.util.TypesLibraryUtil;

import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Ports;
import com.github.dockerjava.api.model.Ports.Binding;

import liquibase.exception.DatabaseException;

public class MariaDBTests extends AbstractTests {
Expand All @@ -27,11 +41,72 @@ public class MariaDBTests extends AbstractTests {
private static final String MARIADB_USERNAME_DEFAULT = "test";

private static final String MARIADB_PASSWORD_DEFAULT = "test";

private static DockerUtils docker = null;

private static String containerID;

@BeforeClass
public static void setUpBeforeClass() throws DatabaseException {
// Create and start container
docker = new DockerUtils("tcp://192.168.99.100:2376", true);

containerID = createMariaDBContainer("mariadbtest_junit");
docker.startContainer(containerID);

String url = String.format(JDBC_MARIADB_URL_PATTERN, MARIADB_HOST_DEFAULT, MARIADB_PORT_DEFAULT, DATABASE_NAME_DEFAULT, true);
database = TestUtils.openDatabaseConnection(url, MARIADB_USERNAME_DEFAULT, MARIADB_PASSWORD_DEFAULT);

Instant start = Instant.now();
boolean timeoutOccured = false;
while (database == null && timeoutOccured == false) {
System.out.println(new Date());


try {
database = TestUtils.openDatabaseConnection(url, MARIADB_USERNAME_DEFAULT, MARIADB_PASSWORD_DEFAULT);
} catch (DatabaseException e) {
// Do nothing
// Database is probably not fully started yet
}
timeoutOccured = Duration.between(start, Instant.now()).toMillis() > 30000;
}

if (database == null) {
fail("Unable to connect to database within " + 30000 + " ms");
}
}

@AfterClass
public static void tearDownAfterClass() throws DatabaseException {
AbstractTests.tearDownAfterClass();

// Stop and remove container
docker.stopContainer(containerID);
docker.removeContainer(containerID);
}

private static String createMariaDBContainer(String containerName) {
ExposedPort tcp3306 = ExposedPort.tcp(3306);

Ports portBindings = new Ports();
portBindings.bind(tcp3306, Binding.bindPort(tcp3306.getPort()));

CreateContainerResponse exec = docker.createContainerCmd("mariadb/server:10.2")
.withName(containerName)
.withImage("mariadb/server:10.2")
.withAttachStdin(Boolean.FALSE)
.withAttachStdout(Boolean.FALSE)
.withAttachStderr(Boolean.FALSE)
.withEnv("MYSQL_ROOT_PASSWORD=root",
"MYSQL_DATABASE=northwind",
"MYSQL_USER=test",
"MYSQL_PASSWORD=test")
.withExposedPorts(tcp3306)
.withHostConfig(HostConfig.newHostConfig().
withPortBindings(portBindings)
)
.exec();
return exec.getId();
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@

import java.time.Duration;
import java.time.Instant;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
Expand All @@ -23,9 +21,9 @@
import org.obeonetwork.dsl.typeslibrary.util.TypesLibraryUtil;

import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Image;
import com.github.dockerjava.api.model.Ports;
import com.github.dockerjava.api.model.Ports.Binding;

Expand Down Expand Up @@ -60,8 +58,6 @@ public static void setupBeforeClass() throws DatabaseException {
containerID = createMySQLContainer("mysqltest_junit");
docker.startContainer(containerID);

listContainers(docker.getContainers(false));

String url = String.format(JDBC_MYSQL_URL_PATTERN, MYSQL_HOST_DEFAULT, MYSQL_PORT_DEFAULT, DATABASE_NAME_DEFAULT, true);

Instant start = Instant.now();
Expand Down Expand Up @@ -93,35 +89,39 @@ public static void tearDownAfterClass() throws DatabaseException {
docker.removeContainer(containerID);
}

private static void listContainers(List<Container> containers) {
for (Container container : containers) {
System.out.println("ID=" + container.getId());
System.out.println("Names=" + StringUtils.join(Arrays.asList(container.getNames()), ","));
}
private static Image loadMySQLImage() {
// Check if image already exists
List<Image> images = docker.getImages("mysql:5.7");
//docker.pullImage("mysql:5.7");
return images.isEmpty() ? null : images.get(0);
}

private static String createMySQLContainer(String containerName) {
ExposedPort tcp3306 = ExposedPort.tcp(3306);

Ports portBindings = new Ports();
portBindings.bind(tcp3306, Binding.bindPort(tcp3306.getPort()));

CreateContainerResponse exec = docker.createContainerCmd("mysql:5.7")
.withName(containerName)
.withImage("mysql:5.7")
.withAttachStdin(Boolean.FALSE)
.withAttachStdout(Boolean.FALSE)
.withAttachStderr(Boolean.FALSE)
.withEnv("MYSQL_ROOT_PASSWORD=root",
"MYSQL_DATABASE=northwind",
"MYSQL_USER=test",
"MYSQL_PASSWORD=test")
.withExposedPorts(tcp3306)
.withHostConfig(HostConfig.newHostConfig().
withPortBindings(portBindings)
)
.exec();
return exec.getId();
Image image = loadMySQLImage();
if (image != null) {
ExposedPort tcp3306 = ExposedPort.tcp(3306);

Ports portBindings = new Ports();
portBindings.bind(tcp3306, Binding.bindPort(tcp3306.getPort()));

CreateContainerResponse exec = docker.createContainerCmd("mysql:5.7")
.withName(containerName)
.withImage("mysql:5.7")
.withAttachStdin(Boolean.FALSE)
.withAttachStdout(Boolean.FALSE)
.withAttachStderr(Boolean.FALSE)
.withEnv("MYSQL_ROOT_PASSWORD=root",
"MYSQL_DATABASE=northwind",
"MYSQL_USER=test",
"MYSQL_PASSWORD=test")
.withExposedPorts(tcp3306)
.withHostConfig(HostConfig.newHostConfig().
withPortBindings(portBindings)
)
.exec();
return exec.getId();
}
return null;
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,14 @@
import static org.junit.Assert.fail;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.sql.Connection;
import java.sql.SQLException;
import java.time.Duration;
import java.time.Instant;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
Expand All @@ -26,13 +22,11 @@
import org.obeonetwork.dsl.database.reverse.source.DataSourceException;
import org.obeonetwork.dsl.database.reverse.utils.MultiDataBaseQueries;
import org.obeonetwork.dsl.database.spec.DatabaseConstants;
import org.obeonetwork.dsl.database.tests.AbstractTests;
import org.obeonetwork.dsl.database.tests.utils.TestUtils;
import org.obeonetwork.dsl.typeslibrary.util.TypesLibraryUtil;

import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.model.Bind;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.HostConfig;
import com.github.dockerjava.api.model.Image;
Expand Down Expand Up @@ -133,8 +127,9 @@ private static Image loadOracleImage() {
if (images.isEmpty()) {
// Load image
try {
docker.loadImage("D:/temp/docker/oracle11G-XE/oracle-xe-docker.tar");
} catch (FileNotFoundException e) {
//docker.loadImage("D:/temp/docker/oracle11G-XE/oracle-xe-docker.tar");
docker.loadImage(new URL("http://update.obeo.fr/livraisonsClients/Minist%c3%a8re%20de%20la%20d%c3%a9fense/Docker/oracle/oracle-xe-docker.tar"));
} catch (IOException e) {
fail("load oracle image failed : " + e.getMessage());
}
images = docker.getImages("oracle/database:11.2.0.2-xe");
Expand All @@ -146,21 +141,21 @@ private static String createOracleContainer(String containerName) {
Image image = loadOracleImage();
if (image != null) {


// docker run --name oracletest --shm-size=1g -p 1521:1521 -e ORACLE_PWD=oracleserver -v temp/oradata:/u01/app/oracle/oradata -d oracle/database:11.2.0.2-xe
// docker run --name orcl --shm-size=1g -p 1521:1521 -p 8080:8080 -e ORACLE_PWD=oracleserver oracle/database:11.2.0.2-xe
ExposedPort tcp1521 = ExposedPort.tcp(1521);
ExposedPort tcp8080 = ExposedPort.tcp(8080);

Ports portBindings = new Ports();
portBindings.bind(tcp1521, Binding.bindPort(tcp1521.getPort()));
portBindings.bind(tcp8080, Binding.bindPort(tcp8080.getPort()));

CreateContainerResponse exec = docker.createContainerCmd("oracle/database:11.2.0.2-xe")
.withName(containerName)
.withImage("oracle/database:11.2.0.2-xe")
.withAttachStdin(Boolean.FALSE)
.withAttachStdout(Boolean.FALSE)
.withAttachStderr(Boolean.FALSE)
.withEnv("ORACLE_PWD=oracleserver",
"ORACLE_ALLOW_REMOTE=true")
.withEnv("ORACLE_PWD=oracleserver")
// .withVolumes(new Volume("oradata:/u01/app/oracle/oradata"))
.withExposedPorts(tcp1521)
.withHostConfig(HostConfig.newHostConfig()
Expand All @@ -181,50 +176,9 @@ private static void initializeContainer() {
containerID = createOracleContainer("oracletest_junit");
docker.startContainer(containerID);

listContainers(docker.getContainers(false));

String url = String.format(JDBC_ORACLE_URL_PATTERN, ORACLE_HOST_DEFAULT, ORACLE_PORT_DEFAULT, ORACLE_SID);

// DataSource tempDS = new DataSource(ORACLE_SID, ORACLE_SYSTEM_USER);
// tempDS.setJdbcUrl(url);
// tempDS.setJdbcUsername(ORACLE_SYSTEM_USER);
// tempDS.setJdbcPassword(ORACLE_SYSTEM_USER_PASSWORD);
// tempDS.setVendor(DatabaseConstants.DB_ORACLE_11G);

// Connection connection = null;
Database database = null;
Instant start = Instant.now();
boolean timeoutOccured = false;
while (database == null && timeoutOccured == false) {
System.out.println(new Date());
// connection = tempDS.getConnection();
try {
database = TestUtils.openDatabaseConnectionWithDriver(url, ORACLE_SYSTEM_USER, ORACLE_SYSTEM_USER_PASSWORD, "oracle.jdbc.OracleDriver");
} catch (DatabaseException e) {
// Do nothing but retry
System.out.println(e.getMessage());
}

timeoutOccured = Duration.between(start, Instant.now()).toMillis() > FIRST_CONNECTION_TIMEOUT;
}
boolean started = docker.waitUntilContainerIsStarted(containerID, FIRST_CONNECTION_TIMEOUT);

if (database == null) {
fail("Unable to connect to database within " + FIRST_CONNECTION_TIMEOUT + " ms");
} else {
try {
database.close();
} catch (DatabaseException e) {
// Do nothing
}

}
}

private static void listContainers(List<Container> containers) {
for (Container container : containers) {
System.out.println("ID=" + container.getId());
System.out.println("Names=" + StringUtils.join(Arrays.asList(container.getNames()), ","));
}
System.out.println("started = " + started);
}

@BeforeClass
Expand Down

0 comments on commit edf16ec

Please sign in to comment.