Skip to content

Commit ce16344

Browse files
authored
Merge pull request #117 from ebean-orm/feature/mysql-extradb
MySql MariaDB - Add support for extraDb
2 parents 9061ed4 + e8098cc commit ce16344

File tree

3 files changed

+71
-11
lines changed

3 files changed

+71
-11
lines changed

src/main/java/io/ebean/test/containers/BaseMySqlContainer.java

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.sql.Connection;
44
import java.sql.SQLException;
5+
import java.util.ArrayList;
6+
import java.util.Collections;
57
import java.util.List;
68

79
abstract class BaseMySqlContainer<C extends BaseMySqlContainer<C>> extends BaseJdbcContainer<C> {
@@ -25,6 +27,9 @@ private void createRoleAndDatabase(boolean withDrop) {
2527
if (withDrop) {
2628
dropUserIfExists(connection, dbConfig.getUsername());
2729
dropDatabaseIfExists(connection, dbConfig.getDbName());
30+
for (String extraDb : toDatabaseNames(dbConfig.getExtraDb())) {
31+
dropDatabaseIfExists(connection, extraDb);
32+
}
2833
}
2934
createDatabase(connection);
3035
createUser(connection);
@@ -34,13 +39,8 @@ private void createRoleAndDatabase(boolean withDrop) {
3439
}
3540
}
3641

37-
private void createUser(Connection connection) {
38-
createUser(connection, dbConfig.getUsername(), dbConfig.getPassword(), dbConfig.getDbName());
39-
}
40-
41-
4242
private void dropDatabaseIfExists(Connection connection, String dbName) {
43-
if (databaseExists(connection, dbName)) {
43+
if (notEmpty(dbName) && databaseExists(connection, dbName)) {
4444
sqlRun(connection, "drop database " + dbName);
4545
}
4646
}
@@ -51,22 +51,32 @@ private void dropUserIfExists(Connection connection, String username) {
5151
}
5252
}
5353

54-
private void createUser(Connection connection, String dbUser, String dbPassword, String db) {
55-
if (!userExists(connection, dbUser)) {
56-
sqlRun(connection, "create user '" + dbUser + "'@'%' identified by '" + dbPassword + "'");
57-
sqlRun(connection, "grant all on " + db + ".* to '" + dbUser + "'@'%'");
54+
private void createUser(Connection connection) {
55+
if (!userExists(connection, dbConfig.getUsername())) {
56+
sqlRun(connection, "create user '" + dbConfig.getUsername() + "'@'%' identified by '" + dbConfig.getPassword() + "'");
57+
sqlRun(connection, "grant all on " + dbConfig.getDbName() + ".* to '" + dbConfig.getUsername() + "'@'%'");
58+
for (String extraDb : toDatabaseNames(dbConfig.getExtraDb())) {
59+
sqlRun(connection, "grant all on " + extraDb + ".* to '" + dbConfig.getUsername() + "'@'%'");
60+
}
5861
}
5962
}
6063

6164
private void createDatabase(Connection connection) {
6265
if (!databaseExists(connection, dbConfig.getDbName())) {
6366
createDatabase(connection, dbConfig.getDbName());
67+
createExtraDatabases(connection);
6468
if (!dbConfig.version().startsWith("5")) {
6569
setLogBinTrustFunction(connection);
6670
}
6771
}
6872
}
6973

74+
private void createExtraDatabases(Connection connection) {
75+
for (String extraDb : toDatabaseNames(dbConfig.getExtraDb())) {
76+
createDatabase(connection, extraDb);
77+
}
78+
}
79+
7080
private void setLogBinTrustFunction(Connection connection) {
7181
sqlRun(connection, "set global log_bin_trust_function_creators=1");
7282
}
@@ -85,7 +95,6 @@ private boolean userExists(Connection connection, String dbUser) {
8595

8696
@Override
8797
protected ProcessBuilder runProcess() {
88-
8998
List<String> args = dockerRun();
9099
if (defined(dbConfig.getAdminPassword())) {
91100
args.add("-e");
@@ -116,4 +125,18 @@ protected ProcessBuilder runProcess() {
116125
return createProcessBuilder(args);
117126
}
118127

128+
static List<String> toDatabaseNames(String dbNames) {
129+
if (dbNames == null) {
130+
return Collections.emptyList();
131+
}
132+
String[] names = dbNames.split(",");
133+
List<String> dbNameList = new ArrayList<>();
134+
for (String name : names) {
135+
name = name.trim();
136+
if (!name.isEmpty()) {
137+
dbNameList.add(name);
138+
}
139+
}
140+
return dbNameList;
141+
}
119142
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.ebean.test.containers;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import java.util.List;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
class BaseMySqlContainerTest {
10+
11+
@Test
12+
void toDatabaseNames() {
13+
List<String> names = BaseMySqlContainer.toDatabaseNames("foo");
14+
assertThat(names).containsExactly("foo");
15+
16+
names = BaseMySqlContainer.toDatabaseNames("foo,");
17+
assertThat(names).containsExactly("foo");
18+
names = BaseMySqlContainer.toDatabaseNames(",foo,");
19+
assertThat(names).containsExactly("foo");
20+
names = BaseMySqlContainer.toDatabaseNames(",foo");
21+
assertThat(names).containsExactly("foo");
22+
}
23+
24+
@Test
25+
void toDatabaseNames_multiple() {
26+
List<String> names = BaseMySqlContainer.toDatabaseNames(" foo , bar ");
27+
assertThat(names).containsExactly("foo", "bar");
28+
29+
names = BaseMySqlContainer.toDatabaseNames("foo,bar");
30+
assertThat(names).containsExactly("foo", "bar");
31+
names = BaseMySqlContainer.toDatabaseNames(",foo,bar,");
32+
assertThat(names).containsExactly("foo", "bar");
33+
names = BaseMySqlContainer.toDatabaseNames(" , foo , bar , ");
34+
assertThat(names).containsExactly("foo", "bar");
35+
}
36+
}

src/test/java/io/ebean/test/containers/MariaDBContainerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ void randomPort() {
3434
void start() {
3535
MariaDBContainer container = MariaDBContainer.builder("latest")
3636
.containerName("temp_mariadb")
37+
.extraDb("foo, bar")
3738
.port(8306)
3839
.fastStartMode(true)
3940
.build();

0 commit comments

Comments
 (0)