Skip to content

Commit 6ed1753

Browse files
committed
add dbInitScriptPath
1 parent 689f472 commit 6ed1753

File tree

4 files changed

+55
-14
lines changed

4 files changed

+55
-14
lines changed

testcontainers-concord-core/src/main/java/ca/ibodrov/concord/testcontainers/Concord.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class Concord<T extends Concord<T>> implements AutoCloseable {
3636

3737
private boolean startAgent = true;
3838
private boolean streamAgentLogs;
39+
private boolean streamDbLogs;
3940
private boolean streamServerLogs;
4041

4142
private boolean useMavenCentral = true;
@@ -317,6 +318,18 @@ public T extraMavenRepositories(List<Map<String, Object>> extraMavenRepositories
317318
return (T) this;
318319
}
319320

321+
public boolean streamDbLogs() {
322+
return streamDbLogs;
323+
}
324+
325+
/**
326+
* Stream the database logs to the console.
327+
*/
328+
public T streamDbLogs(boolean streamDbLogs) {
329+
this.streamDbLogs = streamDbLogs;
330+
return (T) this;
331+
}
332+
320333
public boolean streamServerLogs() {
321334
return streamServerLogs;
322335
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package ca.ibodrov.concord.testcontainers;
2+
3+
import org.testcontainers.containers.GenericContainer;
4+
import org.testcontainers.images.builder.Transferable;
5+
6+
import java.io.IOException;
7+
import java.io.InputStream;
8+
9+
public final class DatabaseInit {
10+
11+
public static void addInitScriptFromClassPath(GenericContainer<?> db, String dbInitScriptPath, String containerName) {
12+
try (InputStream in = DatabaseInit.class.getResourceAsStream(dbInitScriptPath)) {
13+
if (in == null) {
14+
throw new IllegalArgumentException("Can't find the DB init script: " + dbInitScriptPath);
15+
}
16+
17+
byte[] ab = in.readAllBytes();
18+
db.withCopyToContainer(Transferable.of(ab), "/docker-entrypoint-initdb.d/" + containerName);
19+
} catch (IOException e) {
20+
throw new RuntimeException("Error while reading the DB init script: " + e.getMessage(), e);
21+
}
22+
}
23+
24+
private DatabaseInit() {
25+
}
26+
}

testcontainers-concord-core/src/main/java/ca/ibodrov/concord/testcontainers/DockerConcordEnvironment.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,10 @@
3535
import org.testcontainers.containers.wait.strategy.Wait;
3636
import org.testcontainers.images.ImagePullPolicy;
3737
import org.testcontainers.images.PullPolicy;
38-
import org.testcontainers.images.builder.Transferable;
3938
import org.testcontainers.lifecycle.Startable;
4039
import org.testcontainers.utility.MountableFile;
4140

4241
import java.io.IOException;
43-
import java.io.InputStream;
4442
import java.nio.file.Files;
4543
import java.nio.file.Path;
4644
import java.nio.file.StandardOpenOption;
@@ -82,16 +80,12 @@ public DockerConcordEnvironment(Concord<?> opts) {
8280

8381
String dbInitScriptPath = opts.dbInitScriptPath();
8482
if (dbInitScriptPath != null) {
85-
try(InputStream in = getClass().getResourceAsStream(dbInitScriptPath)) {
86-
if (in == null) {
87-
throw new IllegalArgumentException("Can't find the DB init script: " + dbInitScriptPath);
88-
}
83+
DatabaseInit.addInitScriptFromClassPath(db, dbInitScriptPath, "init.sql");
84+
}
8985

90-
byte[] ab = in.readAllBytes();
91-
this.db.withCopyToContainer(Transferable.of())
92-
} catch (IOException e) {
93-
throw new RuntimeException("Error while reading the DB init script: " + e.getMessage(), e);
94-
}
86+
if (opts.streamDbLogs()) {
87+
Slf4jLogConsumer dbLogConsumer = new Slf4jLogConsumer(log);
88+
db.withLogConsumer(dbLogConsumer);
9589
}
9690

9791
this.server = new GenericContainer<>(opts.serverImage())

testcontainers-concord-core/src/main/java/ca/ibodrov/concord/testcontainers/LocalConcordEnvironment.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,13 @@
2828
import org.slf4j.Logger;
2929
import org.slf4j.LoggerFactory;
3030
import org.testcontainers.containers.GenericContainer;
31+
import org.testcontainers.containers.output.Slf4jLogConsumer;
3132
import org.testcontainers.lifecycle.Startable;
3233

3334
import java.io.IOException;
3435
import java.net.ConnectException;
3536
import java.net.HttpURLConnection;
36-
import java.net.URI;
3737
import java.net.URL;
38-
import java.net.http.HttpClient;
39-
import java.net.http.HttpRequest;
4038
import java.nio.file.Files;
4139
import java.nio.file.Path;
4240
import java.nio.file.Paths;
@@ -70,6 +68,16 @@ public LocalConcordEnvironment(Concord<?> opts) {
7068
.withNetworkAliases("db")
7169
.withExposedPorts(5432);
7270

71+
String dbInitScriptPath = opts.dbInitScriptPath();
72+
if (dbInitScriptPath != null) {
73+
DatabaseInit.addInitScriptFromClassPath(db, dbInitScriptPath, "init.sql");
74+
}
75+
76+
if (opts.streamDbLogs()) {
77+
Slf4jLogConsumer dbLogConsumer = new Slf4jLogConsumer(log);
78+
db.withLogConsumer(dbLogConsumer);
79+
}
80+
7381
// in the LOCAL mode there's only one container - the DB
7482
// so it's the only thing that can "depend on" anything
7583
List<Startable> dependsOn = opts.dependsOn();

0 commit comments

Comments
 (0)