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
2 changes: 1 addition & 1 deletion docs/modules/databases/mariadb.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Testcontainers module for [MariaDB](https://hub.docker.com/_/mariadb)
You can start a MySQL container instance from any Java application by using:

<!--codeinclude-->
[Container definition](../../../modules/mariadb/src/test/java/org/testcontainers/junit/mariadb/SimpleMariaDBTest.java) inside_block:container
[Container definition](../../../modules/mariadb/src/test/java/org/testcontainers/mariadb/MariaDBContainerTest.java) inside_block:container
<!--/codeinclude-->

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 @@ -12,7 +12,10 @@
* Supported image: {@code mariadb}
* <p>
* Exposed ports: 3306
*
* @deprecated use {@link org.testcontainers.mariadb.MariaDBContainer} instead.
*/
@Deprecated
public class MariaDBContainer<SELF extends MariaDBContainer<SELF>> extends JdbcDatabaseContainer<SELF> {

private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("mariadb");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
package org.testcontainers.mariadb;

import com.google.common.collect.Sets;
import org.testcontainers.containers.ContainerLaunchException;
import org.testcontainers.containers.JdbcDatabaseContainer;
import org.testcontainers.images.builder.Transferable;
import org.testcontainers.utility.DockerImageName;

import java.util.Set;

/**
* Testcontainers implementation for MariaDB.
* <p>
* Supported image: {@code mariadb}
* <p>
* Exposed ports: 3306
*/
public class MariaDBContainer extends JdbcDatabaseContainer<MariaDBContainer> {

private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("mariadb");

public static final String NAME = "mariadb";

static final String DEFAULT_USER = "test";

static final String DEFAULT_PASSWORD = "test";

static final Integer MARIADB_PORT = 3306;

private String databaseName = "test";

private String username = DEFAULT_USER;

private String password = DEFAULT_PASSWORD;

private static final String MARIADB_ROOT_USER = "root";

private static final String MY_CNF_CONFIG_OVERRIDE_PARAM_NAME = "TC_MY_CNF";

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

public MariaDBContainer(final DockerImageName dockerImageName) {
super(dockerImageName);
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);

addExposedPort(MARIADB_PORT);
}

@Override
public Set<Integer> getLivenessCheckPortNumbers() {
return Sets.newHashSet(MARIADB_PORT);
}

@Override
protected void configure() {
optionallyMapResourceParameterAsVolume(
MY_CNF_CONFIG_OVERRIDE_PARAM_NAME,
"/etc/mysql/conf.d",
"mariadb-default-conf",
Transferable.DEFAULT_DIR_MODE
);

addEnv("MYSQL_DATABASE", databaseName);

if (!MARIADB_ROOT_USER.equalsIgnoreCase(this.username)) {
addEnv("MYSQL_USER", username);
}
if (password != null && !password.isEmpty()) {
addEnv("MYSQL_PASSWORD", password);
addEnv("MYSQL_ROOT_PASSWORD", password);
} else if (MARIADB_ROOT_USER.equalsIgnoreCase(username)) {
addEnv("MYSQL_ALLOW_EMPTY_PASSWORD", "yes");
} else {
throw new ContainerLaunchException("Empty password can be used only with the root user");
}
setStartupAttempts(3);
}

@Override
public String getDriverClassName() {
return "org.mariadb.jdbc.Driver";
}

@Override
public String getJdbcUrl() {
String additionalUrlParams = constructUrlParameters("?", "&");
return (
"jdbc:mariadb://" + getHost() + ":" + getMappedPort(MARIADB_PORT) + "/" + databaseName + additionalUrlParams
);
}

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

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

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

@Override
public String getTestQueryString() {
return "SELECT 1";
}

public MariaDBContainer withConfigurationOverride(String s) {
parameters.put(MY_CNF_CONFIG_OVERRIDE_PARAM_NAME, s);
return self();
}

@Override
public MariaDBContainer withDatabaseName(final String databaseName) {
this.databaseName = databaseName;
return self();
}

@Override
public MariaDBContainer withUsername(final String username) {
this.username = username;
return self();
}

@Override
public MariaDBContainer withPassword(final String password) {
this.password = password;
return self();
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package org.testcontainers.junit.mariadb;
package org.testcontainers.mariadb;

import org.apache.commons.lang3.SystemUtils;
import org.junit.jupiter.api.Test;
import org.testcontainers.MariaDBTestImages;
import org.testcontainers.containers.MariaDBContainer;
import org.testcontainers.db.AbstractContainerDatabaseTest;

import java.io.File;
Expand All @@ -20,12 +19,12 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assumptions.assumeThat;

class SimpleMariaDBTest extends AbstractContainerDatabaseTest {
class MariaDBContainerTest extends AbstractContainerDatabaseTest {

@Test
void testSimple() throws SQLException {
try ( // container {
MariaDBContainer<?> mariadb = new MariaDBContainer<>("mariadb:10.3.39")
MariaDBContainer mariadb = new MariaDBContainer("mariadb:10.3.39")
// }
) {
mariadb.start();
Expand All @@ -40,7 +39,7 @@ void testSimple() throws SQLException {
@Test
void testSpecificVersion() throws SQLException {
try (
MariaDBContainer<?> mariadbOldVersion = new MariaDBContainer<>(
MariaDBContainer mariadbOldVersion = new MariaDBContainer(
MariaDBTestImages.MARIADB_IMAGE.withTag("10.3.39")
)
) {
Expand All @@ -60,7 +59,7 @@ void testMariaDBWithCustomIniFile() throws SQLException {
assumeThat(SystemUtils.IS_OS_WINDOWS).isFalse();

try (
MariaDBContainer<?> mariadbCustomConfig = new MariaDBContainer<>(
MariaDBContainer mariadbCustomConfig = new MariaDBContainer(
MariaDBTestImages.MARIADB_IMAGE.withTag("10.3.39")
)
.withConfigurationOverride("somepath/mariadb_conf_override")
Expand All @@ -74,7 +73,7 @@ void testMariaDBWithCustomIniFile() throws SQLException {
@Test
void testMariaDBWithCommandOverride() throws SQLException {
try (
MariaDBContainer<?> mariadbCustomConfig = new MariaDBContainer<>(MariaDBTestImages.MARIADB_IMAGE)
MariaDBContainer mariadbCustomConfig = new MariaDBContainer(MariaDBTestImages.MARIADB_IMAGE)
.withCommand("mysqld --auto_increment_increment=10")
) {
mariadbCustomConfig.start();
Expand All @@ -87,7 +86,7 @@ void testMariaDBWithCommandOverride() throws SQLException {

@Test
void testWithAdditionalUrlParamInJdbcUrl() {
MariaDBContainer<?> mariaDBContainer = new MariaDBContainer<>(MariaDBTestImages.MARIADB_IMAGE)
MariaDBContainer mariaDBContainer = new MariaDBContainer(MariaDBTestImages.MARIADB_IMAGE)
.withUrlParam("connectTimeout", "40000")
.withUrlParam("rewriteBatchedStatements", "true");

Expand All @@ -108,7 +107,7 @@ void testWithOnlyUserReadableCustomIniFile() throws Exception {
assumeThat(FileSystems.getDefault().supportedFileAttributeViews().contains("posix")).isTrue();

try (
MariaDBContainer<?> mariadbCustomConfig = new MariaDBContainer<>(
MariaDBContainer mariadbCustomConfig = new MariaDBContainer(
MariaDBTestImages.MARIADB_IMAGE.withTag("10.3.39")
)
.withConfigurationOverride("somepath/mariadb_conf_override")
Expand Down Expand Up @@ -136,7 +135,7 @@ void testWithOnlyUserReadableCustomIniFile() throws Exception {

@Test
void testEmptyPasswordWithRootUser() throws SQLException {
try (MariaDBContainer<?> mysql = new MariaDBContainer<>("mariadb:11.2.4").withUsername("root")) {
try (MariaDBContainer mysql = new MariaDBContainer("mariadb:11.2.4").withUsername("root")) {
mysql.start();

ResultSet resultSet = performQuery(mysql, "SELECT 1");
Expand All @@ -146,7 +145,7 @@ void testEmptyPasswordWithRootUser() throws SQLException {
}
}

private void assertThatCustomIniFileWasUsed(MariaDBContainer<?> mariadb) throws SQLException {
private void assertThatCustomIniFileWasUsed(MariaDBContainer mariadb) throws SQLException {
try (ResultSet resultSet = performQuery(mariadb, "SELECT @@GLOBAL.innodb_max_undo_log_size")) {
long result = resultSet.getLong(1);
assertThat(result)
Expand Down
Loading