Skip to content

Commit 9b130b8

Browse files
authored
Merge pull request #182 from zonkyio/custom-docker-images
#181 Add support for using custom docker images
2 parents 1e7c0ec + b173315 commit 9b130b8

File tree

4 files changed

+37
-7
lines changed

4 files changed

+37
-7
lines changed

embedded-database-spring-test/src/main/java/io/zonky/test/db/provider/mariadb/DockerMariaDBDatabaseProvider.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,22 @@
2525
import com.google.common.collect.ImmutableMap;
2626
import com.google.common.util.concurrent.UncheckedExecutionException;
2727
import io.zonky.test.db.preparer.DatabasePreparer;
28-
import io.zonky.test.db.provider.support.BlockingDatabaseWrapper;
2928
import io.zonky.test.db.provider.DatabaseProvider;
3029
import io.zonky.test.db.provider.EmbeddedDatabase;
3130
import io.zonky.test.db.provider.ProviderException;
31+
import io.zonky.test.db.provider.support.BlockingDatabaseWrapper;
3232
import io.zonky.test.db.util.PropertyUtils;
3333
import org.mariadb.jdbc.MariaDbDataSource;
3434
import org.slf4j.LoggerFactory;
3535
import org.springframework.beans.BeanWrapper;
3636
import org.springframework.beans.BeanWrapperImpl;
3737
import org.springframework.beans.factory.ObjectProvider;
3838
import org.springframework.core.env.Environment;
39+
import org.springframework.util.ClassUtils;
3940
import org.testcontainers.containers.Container.ExecResult;
4041
import org.testcontainers.containers.MariaDBContainer;
4142
import org.testcontainers.containers.output.Slf4jLogConsumer;
43+
import org.testcontainers.utility.DockerImageName;
4244

4345
import javax.sql.DataSource;
4446
import java.sql.Connection;
@@ -142,7 +144,7 @@ protected static class DatabaseInstance {
142144

143145
private DatabaseInstance(DatabaseConfig config, DatabasePool pool) {
144146
databasePool = pool;
145-
container = new MariaDBContainer(config.dockerImage);
147+
container = createContainer(config.dockerImage);
146148

147149
if (config.tmpfsEnabled) {
148150
Consumer<CreateContainerCmd> consumer = cmd -> cmd.getHostConfig()
@@ -161,6 +163,14 @@ private DatabaseInstance(DatabaseConfig config, DatabasePool pool) {
161163
semaphore = new Semaphore(150);
162164
}
163165

166+
private MariaDBContainer createContainer(String dockerImage) {
167+
if (ClassUtils.hasMethod(DockerImageName.class, "asCompatibleSubstituteFor", String.class)) {
168+
return new MariaDBContainer(DockerImageName.parse(dockerImage).asCompatibleSubstituteFor("mariadb"));
169+
} else {
170+
return new MariaDBContainer(dockerImage);
171+
}
172+
}
173+
164174
public EmbeddedDatabase createDatabase(ClientConfig config, DatabasePreparer preparer) throws SQLException {
165175
String databaseName = container.getDatabaseName();
166176
executeStatement(config, String.format("CREATE DATABASE IF NOT EXISTS %s", databaseName));

embedded-database-spring-test/src/main/java/io/zonky/test/db/provider/mssql/DockerMSSQLDatabaseProvider.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,10 @@
4141
import org.springframework.beans.BeanWrapperImpl;
4242
import org.springframework.beans.factory.ObjectProvider;
4343
import org.springframework.core.env.Environment;
44+
import org.springframework.util.ClassUtils;
4445
import org.testcontainers.containers.MSSQLServerContainer;
4546
import org.testcontainers.containers.output.Slf4jLogConsumer;
47+
import org.testcontainers.utility.DockerImageName;
4648

4749
import javax.sql.DataSource;
4850
import java.sql.Connection;
@@ -129,7 +131,7 @@ protected static class DatabaseInstance {
129131
private final Semaphore semaphore;
130132

131133
private DatabaseInstance(DatabaseConfig config) {
132-
container = new MSSQLServerContainer(config.dockerImage);
134+
container = createContainer(config.dockerImage);
133135
config.customizers.forEach(c -> c.customize(container));
134136

135137
container.start();
@@ -138,6 +140,14 @@ private DatabaseInstance(DatabaseConfig config) {
138140
semaphore = new Semaphore(32767);
139141
}
140142

143+
private MSSQLServerContainer createContainer(String dockerImage) {
144+
if (ClassUtils.hasMethod(DockerImageName.class, "asCompatibleSubstituteFor", String.class)) {
145+
return new MSSQLServerContainer(DockerImageName.parse(dockerImage).asCompatibleSubstituteFor("mcr.microsoft.com/mssql/server"));
146+
} else {
147+
return new MSSQLServerContainer(dockerImage);
148+
}
149+
}
150+
141151
public EmbeddedDatabase createDatabase(ClientConfig config, DatabaseRequest request) throws SQLException {
142152
DatabaseTemplate template = request.getTemplate();
143153
DatabasePreparer preparer = request.getPreparer();

embedded-database-spring-test/src/main/java/io/zonky/test/db/provider/mysql/DockerMySQLDatabaseProvider.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,21 @@
2626
import com.google.common.util.concurrent.UncheckedExecutionException;
2727
import com.mysql.cj.jdbc.MysqlDataSource;
2828
import io.zonky.test.db.preparer.DatabasePreparer;
29-
import io.zonky.test.db.provider.support.BlockingDatabaseWrapper;
3029
import io.zonky.test.db.provider.DatabaseProvider;
3130
import io.zonky.test.db.provider.EmbeddedDatabase;
3231
import io.zonky.test.db.provider.ProviderException;
32+
import io.zonky.test.db.provider.support.BlockingDatabaseWrapper;
3333
import io.zonky.test.db.util.PropertyUtils;
3434
import org.slf4j.LoggerFactory;
3535
import org.springframework.beans.BeanWrapper;
3636
import org.springframework.beans.BeanWrapperImpl;
3737
import org.springframework.beans.factory.ObjectProvider;
3838
import org.springframework.core.env.Environment;
39+
import org.springframework.util.ClassUtils;
3940
import org.testcontainers.containers.Container.ExecResult;
4041
import org.testcontainers.containers.MySQLContainer;
4142
import org.testcontainers.containers.output.Slf4jLogConsumer;
43+
import org.testcontainers.utility.DockerImageName;
4244

4345
import javax.sql.DataSource;
4446
import java.sql.Connection;
@@ -142,7 +144,7 @@ protected static class DatabaseInstance {
142144

143145
private DatabaseInstance(DatabaseConfig config, DatabasePool pool) {
144146
databasePool = pool;
145-
container = new MySQLContainer(config.dockerImage);
147+
container = createContainer(config.dockerImage);
146148

147149
if (config.tmpfsEnabled) {
148150
Consumer<CreateContainerCmd> consumer = cmd -> cmd.getHostConfig()
@@ -161,6 +163,14 @@ private DatabaseInstance(DatabaseConfig config, DatabasePool pool) {
161163
semaphore = new Semaphore(150);
162164
}
163165

166+
private MySQLContainer createContainer(String dockerImage) {
167+
if (ClassUtils.hasMethod(DockerImageName.class, "asCompatibleSubstituteFor", String.class)) {
168+
return new MySQLContainer(DockerImageName.parse(dockerImage).asCompatibleSubstituteFor("mysql"));
169+
} else {
170+
return new MySQLContainer(dockerImage);
171+
}
172+
}
173+
164174
public EmbeddedDatabase createDatabase(ClientConfig config, DatabasePreparer preparer) throws SQLException {
165175
String databaseName = container.getDatabaseName();
166176
executeStatement(config, String.format("CREATE DATABASE IF NOT EXISTS %s", databaseName));

embedded-database-spring-test/src/main/java/io/zonky/test/db/provider/postgres/DockerPostgresDatabaseProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ private DatabaseInstance(DatabaseConfig config) {
154154
.map(e -> String.format("-c %s=%s", e.getKey(), e.getValue()))
155155
.collect(Collectors.joining(" "));
156156

157-
container = createPostgreSQLContainer(config.dockerImage, container -> {
157+
container = createContainer(config.dockerImage, container -> {
158158
container.addEnv("POSTGRES_INITDB_ARGS", "--nosync " + initdbArgs);
159159
container.setCommand("postgres " + postgresArgs);
160160
});
@@ -176,7 +176,7 @@ private DatabaseInstance(DatabaseConfig config) {
176176
semaphore = new Semaphore(Integer.parseInt(serverProperties.get("max_connections")));
177177
}
178178

179-
private PostgreSQLContainer createPostgreSQLContainer(String dockerImage, Consumer<PostgreSQLContainer> configAction) {
179+
private PostgreSQLContainer createContainer(String dockerImage, Consumer<PostgreSQLContainer> configAction) {
180180
if (ClassUtils.hasMethod(DockerImageName.class, "asCompatibleSubstituteFor", String.class)) {
181181
return new PostgreSQLContainer(DockerImageName.parse(dockerImage).asCompatibleSubstituteFor("postgres")) {
182182
@Override

0 commit comments

Comments
 (0)