package org.testcontainers.junit;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import lombok.NonNull;
import org.apache.commons.lang.SystemUtils;
import org.junit.Test;
import org.testcontainers.containers.MariaDBContainer;
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;
import static org.junit.Assume.assumeFalse;
/**
* @author Miguel Gonzalez Sanchez
*/
public class SimpleMariaDBTest {
@Test
public void testSimple() throws SQLException {
MariaDBContainer mariadb = new MariaDBContainer();
mariadb.start();
try {
ResultSet resultSet = performQuery(mariadb, "SELECT 1");
int resultSetInt = resultSet.getInt(1);
assertEquals("A basic SELECT query succeeds", 1, resultSetInt);
} finally {
mariadb.stop();
}
}
@Test
public void testSpecificVersion() throws SQLException {
MariaDBContainer mariadbOldVersion = new MariaDBContainer("mariadb:5.5.51");
mariadbOldVersion.start();
try {
ResultSet resultSet = performQuery(mariadbOldVersion, "SELECT VERSION()");
String resultSetString = resultSet.getString(1);
assertTrue("The database version can be set using a container rule parameter", resultSetString.startsWith("5.5.51"));
} finally {
mariadbOldVersion.stop();
}
}
@Test
public void testMariaDBWithCustomIniFile() throws SQLException {
assumeFalse(SystemUtils.IS_OS_WINDOWS);
MariaDBContainer mariadbCustomConfig = new MariaDBContainer("mariadb:10.1.16")
.withConfigurationOverride("somepath/mariadb_conf_override");
mariadbCustomConfig.start();
try {
ResultSet resultSet = performQuery(mariadbCustomConfig, "SELECT @@GLOBAL.innodb_file_format");
String result = resultSet.getString(1);
assertEquals("The InnoDB file format has been set by the ini file content", "Barracuda", result);
} finally {
mariadbCustomConfig.stop();
}
}
@NonNull
protected ResultSet performQuery(MariaDBContainer containerRule, String sql) throws SQLException {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl(containerRule.getJdbcUrl());
hikariConfig.setUsername(containerRule.getUsername());
hikariConfig.setPassword(containerRule.getPassword());
HikariDataSource ds = new HikariDataSource(hikariConfig);
Statement statement = ds.getConnection().createStatement();
statement.execute(sql);
ResultSet resultSet = statement.getResultSet();
resultSet.next();
return resultSet;
}
}