@@ -12,6 +12,7 @@ import org.junit.jupiter.params.provider.Arguments.arguments
1212import org.junit.jupiter.params.provider.MethodSource
1313import org.testcontainers.containers.JdbcDatabaseContainer
1414import org.testcontainers.containers.MSSQLServerContainer
15+ import org.testcontainers.containers.MariaDBContainer
1516import org.testcontainers.containers.MySQLContainer
1617import org.testcontainers.containers.PostgreSQLContainer
1718import org.testcontainers.oracle.OracleContainer
@@ -52,6 +53,10 @@ abstract class AbstractDbTests {
5253 .also { it.start() }
5354 }
5455
56+ private val mariadb by lazy {
57+ MariaDBContainer (" mariadb:11.7" ).also { it.start() }
58+ }
59+
5560 private val msSqlServer by lazy {
5661 MSSQLServerContainer (" mcr.microsoft.com/mssql/server:2017-CU12" )
5762 .acceptLicense()
@@ -63,29 +68,37 @@ abstract class AbstractDbTests {
6368 }
6469 }
6570
66- private val connections = ConcurrentHashMap <DbFlavour , Connection >()
71+ private val connections = ConcurrentHashMap <String , Connection >()
6772
6873 private fun getConnection (container : JdbcDatabaseContainer <* >): Connection {
6974 Class .forName(container.driverClassName)
7075 return DriverManager .getConnection(container.jdbcUrl, container.username, container.password)
7176 }
7277
73- val dbs =
78+ // Use string keys so that MariaDB (which resolves to DbFlavour.MYSQL) can be a separate entry
79+ private val selectedDb = System .getProperty(" db" , " " ).trim().uppercase()
80+ private val allDbs =
7481 mapOf (
75- DbFlavour .POSTGRESQL to { getConnection(postgresql) },
76- DbFlavour .MYSQL to { getConnection(mysql) },
77- DbFlavour .SQLITE to { DriverManager .getConnection(" jdbc:sqlite::memory:" ) },
78- DbFlavour .DUCKDB to { DriverManager .getConnection(" jdbc:duckdb:" ) },
79- DbFlavour .MSSQLSERVER to { getConnection(msSqlServer) },
80- DbFlavour .ORACLE to { getConnection(oracle) },
81- ).filter {
82- // by default run against SQLite, PG and DuckDB only
83- // this allows parallel runs for different int tests.
84- when (System .getProperty(" db" , " " ).uppercase()) {
85- " " -> it.key == DbFlavour .SQLITE || it.key == DbFlavour .POSTGRESQL || it.key == DbFlavour .DUCKDB
86- " ALL" -> true
87- else -> it.key == DbFlavour .valueOf(System .getProperty(" db" ).uppercase())
88- }
82+ " POSTGRESQL" to { getConnection(postgresql) },
83+ " MYSQL" to { getConnection(mysql) },
84+ " SQLITE" to { DriverManager .getConnection(" jdbc:sqlite::memory:" ) },
85+ " DUCKDB" to { DriverManager .getConnection(" jdbc:duckdb:" ) },
86+ " MSSQLSERVER" to { getConnection(msSqlServer) },
87+ " ORACLE" to { getConnection(oracle) },
88+ " MARIADB" to { getConnection(mariadb) },
89+ )
90+
91+ val dbs =
92+ when (selectedDb) {
93+ " " -> allDbs.filterKeys { it == " SQLITE" || it == " POSTGRESQL" || it == " DUCKDB" }
94+ " ALL" -> allDbs
95+ else ->
96+ mapOf (
97+ selectedDb to
98+ requireNotNull(allDbs[selectedDb]) {
99+ " Unsupported db '$selectedDb '. Expected one of ${allDbs.keys.sorted().joinToString()} "
100+ },
101+ )
89102 }
90103
91104 @JvmStatic
@@ -96,7 +109,7 @@ abstract class AbstractDbTests {
96109 connections
97110 .map {
98111 println (" ${it.key} " )
99- arguments(named(it.key.toString() , it.value))
112+ arguments(named(it.key, it.value))
100113 }
101114 println (" --------------------------------" )
102115 return connections
0 commit comments