Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,14 @@ public String getDriverClassName() {

@Override
public String getJdbcUrl() {
return JDBC_URL_PREFIX + "://" + getContainerIpAddress() + ":" + getMappedPort(DB_PORT) + "/" + databaseName;
return String.format(
"%s://%s:%s/%s%s",
JDBC_URL_PREFIX,
getContainerIpAddress(),
getMappedPort(DB_PORT),
databaseName,
buildUrlParams("?", "&")
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,13 @@ public String getDriverClassName() {

@Override
public String getJdbcUrl() {
return "jdbc:db2://" + getContainerIpAddress() + ":" + getMappedPort(DB2_PORT) + "/" + databaseName;
return String.format(
"jdbc:db2://%s:%s/%s%s",
getContainerIpAddress(),
getMappedPort(DB2_PORT),
databaseName,
buildUrlParams(":", ";")
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.logging.Level;
import java.util.logging.LogManager;

import static org.junit.Assert.assertTrue;
import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals;

public class SimpleCockroachDBTest extends AbstractContainerDatabaseTest {
Expand Down Expand Up @@ -41,4 +42,17 @@ public void testExplicitInitScript() throws SQLException {
assertEquals("Value from init script should equal real value", "hello world", firstColumnValue);
}
}

@Test
public void testCreateJdbcUrlWithUrlParam() {
CockroachContainer container = new CockroachContainer()
.withUrlParam("sslmode", "disable");
try {
container.start();
String actual = container.getJdbcUrl();
assertTrue("Jdbc url should contains params", actual.contains("?sslmode=disable"));
} finally {
container.stop();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
import org.junit.Rule;
import org.junit.Test;
import org.testcontainers.containers.Db2Container;
import org.testcontainers.containers.JdbcDatabaseContainer;

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

import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals;
import static org.rnorth.visibleassertions.VisibleAssertions.assertTrue;


public class SimpleDb2Test {
Expand All @@ -36,4 +38,16 @@ public void testSimple() throws SQLException {
assertEquals("A basic SELECT query succeeds", 1, resultSetInt);
}

@Test
public void testCreateJdbcUrlWithUrlParam() {
JdbcDatabaseContainer container = new Db2Container()
.withUrlParam("traceLevel", "TRACE_ALL");
try {
container.start();
String actual = container.getJdbcUrl();
assertTrue("Jdbc url should contains params", actual.contains(":traceLevel=TRACE_ALL"));
} finally {
container.stop();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

import org.junit.Rule;
import org.junit.Test;
import org.testcontainers.containers.JdbcDatabaseContainer;
import org.testcontainers.containers.MSSQLServerContainer;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import static junit.framework.TestCase.assertTrue;
import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals;

/**
Expand Down Expand Up @@ -44,4 +46,17 @@ public void testSetupDatabase() throws SQLException {
int resultSetInt = resultSet.getInt("ID");
assertEquals("A basic SELECT query succeeds", 3, resultSetInt);
}

@Test
public void testCreateJdbcUrlWithUrlParam() {
JdbcDatabaseContainer container = new MSSQLServerContainer()
.withUrlParam("integratedSecurity", "false");
try {
container.start();
String actual = container.getJdbcUrl();
assertTrue("Jdbc url should contains params", actual.contains(";integratedSecurity=false"));
} finally {
container.stop();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import org.apache.commons.lang.SystemUtils;
import org.junit.Test;
import org.testcontainers.containers.JdbcDatabaseContainer;
import org.testcontainers.containers.MariaDBContainer;

import java.sql.ResultSet;
Expand Down Expand Up @@ -80,4 +81,18 @@ public void testMariaDBWithCommandOverride() throws SQLException {
mariadbCustomConfig.stop();
}
}

@Test
public void testCreateJdbcUrlWithUrlParam() {
JdbcDatabaseContainer container = new MariaDBContainer("mariadb:10.1.16")
.withDatabaseName("TEST")
.withUrlParam("TZ", "Europe/Zurich");
try {
container.start();
String actual = container.getJdbcUrl();
assertTrue("Jdbc url should contains params", actual.contains("?TZ=Europe/Zurich"));
} finally {
container.stop();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.ContainerLaunchException;
import org.testcontainers.containers.JdbcDatabaseContainer;
import org.testcontainers.containers.MySQLContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;

Expand Down Expand Up @@ -136,4 +137,18 @@ public void testEmptyPasswordWithNonRootUser() {
container.stop();
}
}

@Test
public void testCreateJdbcUrlWithUrlParam() {
JdbcDatabaseContainer container = new MySQLContainer("mysql:5.5")
.withDatabaseName("TEST")
.withUrlParam("TZ", "Europe/Zurich");
try {
container.start();
String actual = container.getJdbcUrl();
assertTrue("Jdbc url should contains params", actual.contains("?TZ=Europe/Zurich"));
} finally {
container.stop();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package org.testcontainers.junit;

import org.junit.Test;
import org.testcontainers.containers.JdbcDatabaseContainer;
import org.testcontainers.containers.PostgreSQLContainer;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.LogManager;

import static org.junit.Assert.assertTrue;
import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals;
import static org.rnorth.visibleassertions.VisibleAssertions.assertNotEquals;

Expand Down Expand Up @@ -62,4 +64,18 @@ public void testExplicitInitScript() throws SQLException {
assertEquals("Value from init script should equal real value", "hello world", firstColumnValue);
}
}

@Test
public void testCreateJdbcUrlWithUrlParam() {
JdbcDatabaseContainer container = new PostgreSQLContainer()
.withDatabaseName("TEST")
.withUrlParam("ssl", "false");
try {
container.start();
String actual = container.getJdbcUrl();
assertTrue("Jdbc url should contains params", actual.contains("?loggerLevel=OFF&ssl=false"));
} finally {
container.stop();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.Future;
import java.util.stream.Collectors;

/**
* Base class for containers that expose a JDBC connection
Expand Down Expand Up @@ -112,6 +113,21 @@ public SELF withInitScript(String initScriptPath) {
return self();
}

public SELF withUrlParam(String key, String value) {
this.parameters.put(key, value);
return self();
}

protected String buildUrlParams(String firstSymbol, String paramDelimiter) {
if (parameters.isEmpty()) {
return "";
}
return firstSymbol + parameters.entrySet()
.stream()
.map(entry -> String.format("%s=%s", entry.getKey(), entry.getValue()))
.collect(Collectors.joining(paramDelimiter));
}

@Override
protected void waitUntilContainerStarted() {
logger().info("Waiting for database connection to become available at {} using query '{}'", getJdbcUrl(), getTestQueryString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,13 @@ public String getDriverClassName() {

@Override
public String getJdbcUrl() {
return "jdbc:mariadb://" + getContainerIpAddress() + ":" + getMappedPort(MARIADB_PORT) + "/" + databaseName;
return String.format(
"jdbc:mariadb://%s:%s/%s%s",
getContainerIpAddress(),
getMappedPort(MARIADB_PORT),
databaseName,
buildUrlParams("?", "&")
);
}

@Override
Expand All @@ -83,7 +89,7 @@ public SELF withConfigurationOverride(String s) {
parameters.put(MY_CNF_CONFIG_OVERRIDE_PARAM_NAME, s);
return self();
}

@Override
public SELF withDatabaseName(final String databaseName) {
this.databaseName = databaseName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,12 @@ public String getDriverClassName() {

@Override
public String getJdbcUrl() {
return "jdbc:sqlserver://" + getContainerIpAddress() + ":" + getMappedPort(MS_SQL_SERVER_PORT);
return String.format(
"jdbc:sqlserver://%s:%s%s",
getContainerIpAddress(),
getMappedPort(MS_SQL_SERVER_PORT),
buildUrlParams(";", ";")
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,13 @@ public String getDriverClassName() {

@Override
public String getJdbcUrl() {
return "jdbc:mysql://" + getContainerIpAddress() + ":" + getMappedPort(MYSQL_PORT) + "/" + databaseName;
return String.format(
"jdbc:mysql://%s:%s/%s%s",
getContainerIpAddress(),
getMappedPort(MYSQL_PORT),
databaseName,
buildUrlParams("?", "&")
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,13 @@ public String getDriverClassName() {
@Override
public String getJdbcUrl() {
// Disable Postgres driver use of java.util.logging to reduce noise at startup time
return "jdbc:postgresql://" + getContainerIpAddress() + ":" + getMappedPort(POSTGRESQL_PORT) + "/" + databaseName + "?loggerLevel=OFF";
return String.format(
"jdbc:postgresql://%s:%s/%s?loggerLevel=OFF%s",
getContainerIpAddress(),
getMappedPort(POSTGRESQL_PORT),
databaseName,
buildUrlParams("&","&")
);
}

@Override
Expand Down