Skip to content

Commit 93a8f3a

Browse files
mikebell90tomix26
authored andcommitted
Allow customize working directory (#99)
1 parent edfbd98 commit 93a8f3a

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

src/main/java/io/zonky/test/db/postgres/embedded/EmbeddedPostgres.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import java.util.Map;
4949
import java.util.Map.Entry;
5050
import java.util.Objects;
51+
import java.util.Optional;
5152
import java.util.UUID;
5253
import java.util.concurrent.Phaser;
5354
import java.util.concurrent.TimeUnit;
@@ -111,19 +112,22 @@ public class EmbeddedPostgres implements Closeable
111112
Map<String, String> postgresConfig, Map<String, String> localeConfig, int port, Map<String, String> connectConfig,
112113
PgBinaryResolver pgBinaryResolver, ProcessBuilder.Redirect errorRedirector, ProcessBuilder.Redirect outputRedirector) throws IOException
113114
{
114-
this(parentDirectory, dataDirectory, cleanDataDirectory, postgresConfig, localeConfig, port, connectConfig, pgBinaryResolver, errorRedirector, outputRedirector, DEFAULT_PG_STARTUP_WAIT);
115+
this(parentDirectory, dataDirectory, cleanDataDirectory, postgresConfig, localeConfig, port, connectConfig,
116+
pgBinaryResolver, errorRedirector, outputRedirector, DEFAULT_PG_STARTUP_WAIT, null);
115117
}
116118

117119
EmbeddedPostgres(File parentDirectory, File dataDirectory, boolean cleanDataDirectory,
118120
Map<String, String> postgresConfig, Map<String, String> localeConfig, int port, Map<String, String> connectConfig,
119-
PgBinaryResolver pgBinaryResolver, ProcessBuilder.Redirect errorRedirector, ProcessBuilder.Redirect outputRedirector, Duration pgStartupWait) throws IOException
121+
PgBinaryResolver pgBinaryResolver, ProcessBuilder.Redirect errorRedirector,
122+
ProcessBuilder.Redirect outputRedirector, Duration pgStartupWait,
123+
File overrideWorkingDirectory) throws IOException
120124
{
121125
this.cleanDataDirectory = cleanDataDirectory;
122126
this.postgresConfig = new HashMap<>(postgresConfig);
123127
this.localeConfig = new HashMap<>(localeConfig);
124128
this.connectConfig = new HashMap<>(connectConfig);
125129
this.port = port;
126-
this.pgDir = prepareBinaries(pgBinaryResolver);
130+
this.pgDir = prepareBinaries(pgBinaryResolver, overrideWorkingDirectory);
127131
this.errorRedirector = errorRedirector;
128132
this.outputRedirector = outputRedirector;
129133
this.pgStartupWait = pgStartupWait;
@@ -475,6 +479,7 @@ public static EmbeddedPostgres.Builder builder()
475479
public static class Builder
476480
{
477481
private final File parentDirectory = getWorkingDirectory();
482+
private File overrideWorkingDirectory;
478483
private File builderDataDirectory;
479484
private final Map<String, String> config = new HashMap<>();
480485
private final Map<String, String> localeConfig = new HashMap<>();
@@ -535,6 +540,11 @@ public Builder setConnectConfig(String key, String value) {
535540
return this;
536541
}
537542

543+
public Builder setOverrideWorkingDirectory(File workingDirectory) {
544+
overrideWorkingDirectory = workingDirectory;
545+
return this;
546+
}
547+
538548
public Builder setPort(int port) {
539549
builderPort = port;
540550
return this;
@@ -564,7 +574,9 @@ public EmbeddedPostgres start() throws IOException {
564574
if (builderDataDirectory == null) {
565575
builderDataDirectory = Files.createTempDirectory("epg").toFile();
566576
}
567-
return new EmbeddedPostgres(parentDirectory, builderDataDirectory, builderCleanDataDirectory, config, localeConfig, builderPort, connectConfig, pgBinaryResolver, errRedirector, outRedirector, pgStartupWait);
577+
return new EmbeddedPostgres(parentDirectory, builderDataDirectory, builderCleanDataDirectory, config,
578+
localeConfig, builderPort, connectConfig, pgBinaryResolver, errRedirector, outRedirector,
579+
pgStartupWait, overrideWorkingDirectory);
568580
}
569581

570582
@Override
@@ -730,7 +742,7 @@ private void closeChannel(Channel channel) {
730742
}
731743
}
732744

733-
private static File prepareBinaries(PgBinaryResolver pgBinaryResolver)
745+
private static File prepareBinaries(PgBinaryResolver pgBinaryResolver, File overrideWorkingDirectory)
734746
{
735747
PREPARE_BINARIES_LOCK.lock();
736748
try {
@@ -760,7 +772,8 @@ private static File prepareBinaries(PgBinaryResolver pgBinaryResolver)
760772
pgArchiveData.close();
761773

762774
String pgDigest = Hex.encodeHexString(pgArchiveData.getMessageDigest().digest());
763-
pgDir = new File(getWorkingDirectory(), String.format("PG-%s", pgDigest));
775+
File workingDirectory = Optional.ofNullable(overrideWorkingDirectory).orElse(getWorkingDirectory());
776+
pgDir = new File(workingDirectory, String.format("PG-%s", pgDigest));
764777

765778
mkdirs(pgDir);
766779
final File unpackLockFile = new File(pgDir, LOCK_FILE_NAME);

0 commit comments

Comments
 (0)