Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions docs/modules/databases/db2.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
# DB2 Module

Testcontainers module for [DB2](https://hub.docker.com/r/ibmcom/db2)
Testcontainers module for [DB2](https://www.ibm.com/docs/en/db2/11.5.x?topic=deployments-db2-community-edition-docker)

## Usage example

You can start a DB2 container instance from any Java application by using:

<!--codeinclude-->
[Container definition](../../../modules/db2/src/test/java/org/testcontainers/junit/db2/SimpleDb2Test.java) inside_block:container
[Container definition](../../../modules/db2/src/test/java/org/testcontainers/db2/Db2ContainerTest.java) inside_block:container
<!--/codeinclude-->

!!! warning "EULA Acceptance"
Due to licencing restrictions you are required to accept an EULA for this container image. To indicate that you accept the DB2 image EULA, call the `acceptLicense()` method, or place a file at the root of the classpath named `container-license-acceptance.txt`, e.g. at `src/test/resources/container-license-acceptance.txt`. This file should contain the line: `ibmcom/db2:11.5.0.0a` (or, if you are overriding the docker image name/tag, update accordingly).

Please see the [`ibmcom/db2` image documentation](https://hub.docker.com/r/ibmcom/db2) for a link to the EULA document.

See [Database containers](./index.md) for documentation and usage that is common to all relational database container types.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@
* <ul>
* <li>Database: 50000</li>
* </ul>
* @deprecated use {@link org.testcontainers.db2.Db2Container} instead.
*/
@Deprecated
public class Db2Container extends JdbcDatabaseContainer<Db2Container> {

public static final String NAME = "db2";
Expand Down
143 changes: 143 additions & 0 deletions modules/db2/src/main/java/org/testcontainers/db2/Db2Container.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package org.testcontainers.db2;

import com.github.dockerjava.api.model.Capability;
import org.testcontainers.containers.JdbcDatabaseContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.utility.DockerImageName;
import org.testcontainers.utility.LicenseAcceptance;

import java.time.Duration;
import java.util.Set;

/**
* Testcontainers implementation for IBM DB2.
* <p>
* Supported images: {@code icr.io/db2_community/db2}, {@code ibmcom/db2}
* <p>
* Exposed ports:
* <ul>
* <li>Database: 50000</li>
* </ul>
*/
public class Db2Container extends JdbcDatabaseContainer<Db2Container> {

public static final String NAME = "db2";

private static final DockerImageName DEFAULT_NEW_IMAGE_NAME = DockerImageName.parse("icr.io/db2_community/db2");

public static final int DB2_PORT = 50000;

private String databaseName = "test";

private String username = "db2inst1";

private String password = "foobar1234";

public Db2Container(String dockerImageName) {
this(DockerImageName.parse(dockerImageName));
}

public Db2Container(final DockerImageName dockerImageName) {
super(dockerImageName);
dockerImageName.assertCompatibleWith(DEFAULT_NEW_IMAGE_NAME);

withCreateContainerCmdModifier(cmd -> cmd.withCapAdd(Capability.IPC_LOCK).withCapAdd(Capability.IPC_OWNER));
waitingFor(Wait.forLogMessage(".*Setup has completed\\..*", 1).withStartupTimeout(Duration.ofMinutes(10)));

addExposedPort(DB2_PORT);
}

/**
* @return the ports on which to check if the container is ready
* @deprecated use {@link #getLivenessCheckPortNumbers()} instead
*/
@Override
@Deprecated
protected Set<Integer> getLivenessCheckPorts() {
return super.getLivenessCheckPorts();
}

@Override
protected void configure() {
// If license was not accepted programmatically, check if it was accepted via resource file
if (!getEnvMap().containsKey("LICENSE")) {
LicenseAcceptance.assertLicenseAccepted(this.getDockerImageName());
acceptLicense();
}

addEnv("DBNAME", databaseName);
addEnv("DB2INSTANCE", username);
addEnv("DB2INST1_PASSWORD", password);

// These settings help the DB2 container start faster
if (!getEnvMap().containsKey("AUTOCONFIG")) {
addEnv("AUTOCONFIG", "false");
}
if (!getEnvMap().containsKey("ARCHIVE_LOGS")) {
addEnv("ARCHIVE_LOGS", "false");
}
}

/**
* Accepts the license for the DB2 container by setting the LICENSE=accept
* variable as described at <a href="https://hub.docker.com/r/ibmcom/db2">https://hub.docker.com/r/ibmcom/db2</a>
*/
public Db2Container acceptLicense() {
addEnv("LICENSE", "accept");
return this;
}

@Override
public String getDriverClassName() {
return "com.ibm.db2.jcc.DB2Driver";
}

@Override
public String getJdbcUrl() {
String additionalUrlParams = constructUrlParameters(":", ";", ";");
return "jdbc:db2://" + getHost() + ":" + getMappedPort(DB2_PORT) + "/" + databaseName + additionalUrlParams;
}

@Override
public String getUsername() {
return username;
}

@Override
public String getPassword() {
return password;
}

@Override
public String getDatabaseName() {
return databaseName;
}

@Override
public Db2Container withUsername(String username) {
this.username = username;
return this;
}

@Override
public Db2Container withPassword(String password) {
this.password = password;
return this;
}

@Override
public Db2Container withDatabaseName(String dbName) {
this.databaseName = dbName;
return this;
}

@Override
protected void waitUntilContainerStarted() {
getWaitStrategy().waitUntilReady(this);
}

@Override
protected String getTestQueryString() {
return "SELECT 1 FROM SYSIBM.SYSDUMMY1";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
import org.testcontainers.utility.DockerImageName;

public interface Db2TestImages {
DockerImageName DB2_IMAGE = DockerImageName.parse("ibmcom/db2:11.5.0.0a");
DockerImageName DB2_IMAGE = DockerImageName.parse("icr.io/db2_community/db2:11.5.8.0");
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
package org.testcontainers.junit.db2;
package org.testcontainers.db2;

import org.junit.jupiter.api.Test;
import org.testcontainers.Db2TestImages;
import org.testcontainers.containers.Db2Container;
import org.testcontainers.db.AbstractContainerDatabaseTest;

import java.sql.ResultSet;
import java.sql.SQLException;

import static org.assertj.core.api.Assertions.assertThat;

class SimpleDb2Test extends AbstractContainerDatabaseTest {
class Db2ContainerTest extends AbstractContainerDatabaseTest {

@Test
void testSimple() throws SQLException {
try ( // container {
Db2Container db2 = new Db2Container("ibmcom/db2:11.5.0.0a").acceptLicense()
Db2Container db2 = new Db2Container("icr.io/db2_community/db2:11.5.8.0").acceptLicense()
// }
) {
db2.start();
Expand Down
Loading