Skip to content

Commit 09edd03

Browse files
committed
Allows to set environment variables of Postgres
On some misconfigured linux systems we've encountered "error: invalid locale settings; check LANG and LC_* environment variables". Since we intend to use Postgres in our application on customer machines, we want Postgres to work even in those conditions.
1 parent ed189ed commit 09edd03

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public class EmbeddedPostgres implements Closeable
101101
private final Map<String, String> postgresConfig;
102102
private final Map<String, String> localeConfig;
103103
private final Map<String, String> connectConfig;
104+
private final Map<String, String> environmentVariables;
104105

105106
private volatile FileOutputStream lockStream;
106107
private volatile FileLock lock;
@@ -111,14 +112,15 @@ public class EmbeddedPostgres implements Closeable
111112

112113
EmbeddedPostgres(File parentDirectory, File dataDirectory, boolean cleanDataDirectory,
113114
Map<String, String> postgresConfig, Map<String, String> localeConfig, int port, Map<String, String> connectConfig,
114-
PgBinaryResolver pgBinaryResolver, ProcessBuilder.Redirect errorRedirector, ProcessBuilder.Redirect outputRedirector) throws IOException
115+
Map<String, String> environmentVariables, PgBinaryResolver pgBinaryResolver, ProcessBuilder.Redirect errorRedirector, ProcessBuilder.Redirect outputRedirector) throws IOException
115116
{
116-
this(parentDirectory, dataDirectory, cleanDataDirectory, postgresConfig, localeConfig, port, connectConfig,
117+
this(parentDirectory, dataDirectory, cleanDataDirectory, postgresConfig, localeConfig, port, connectConfig, environmentVariables,
117118
pgBinaryResolver, errorRedirector, outputRedirector, DEFAULT_PG_STARTUP_WAIT, null);
118119
}
119120

120121
EmbeddedPostgres(File parentDirectory, File dataDirectory, boolean cleanDataDirectory,
121122
Map<String, String> postgresConfig, Map<String, String> localeConfig, int port, Map<String, String> connectConfig,
123+
Map<String, String> environmentVariables,
122124
PgBinaryResolver pgBinaryResolver, ProcessBuilder.Redirect errorRedirector,
123125
ProcessBuilder.Redirect outputRedirector, Duration pgStartupWait,
124126
File overrideWorkingDirectory) throws IOException
@@ -127,6 +129,7 @@ public class EmbeddedPostgres implements Closeable
127129
this.postgresConfig = new HashMap<>(postgresConfig);
128130
this.localeConfig = new HashMap<>(localeConfig);
129131
this.connectConfig = new HashMap<>(connectConfig);
132+
this.environmentVariables = new HashMap<>(environmentVariables);
130133
this.port = port;
131134
this.pgDir = prepareBinaries(pgBinaryResolver, overrideWorkingDirectory);
132135
this.errorRedirector = errorRedirector;
@@ -490,6 +493,7 @@ public static class Builder
490493
private File builderDataDirectory;
491494
private final Map<String, String> config = new HashMap<>();
492495
private final Map<String, String> localeConfig = new HashMap<>();
496+
private final Map<String, String> environmentVariables = new HashMap<>();
493497
private boolean builderCleanDataDirectory = true;
494498
private int builderPort = 0;
495499
private final Map<String, String> connectConfig = new HashMap<>();
@@ -546,6 +550,11 @@ public Builder setConnectConfig(String key, String value) {
546550
connectConfig.put(key, value);
547551
return this;
548552
}
553+
554+
public Builder setEnvironmentVariable(String key, String value) {
555+
environmentVariables.put(key, value);
556+
return this;
557+
}
549558

550559
public Builder setOverrideWorkingDirectory(File workingDirectory) {
551560
overrideWorkingDirectory = workingDirectory;
@@ -582,7 +591,7 @@ public EmbeddedPostgres start() throws IOException {
582591
builderDataDirectory = Files.createTempDirectory("epg").toFile();
583592
}
584593
return new EmbeddedPostgres(parentDirectory, builderDataDirectory, builderCleanDataDirectory, config,
585-
localeConfig, builderPort, connectConfig, pgBinaryResolver, errRedirector, outRedirector,
594+
localeConfig, builderPort, connectConfig, environmentVariables, pgBinaryResolver, errRedirector, outRedirector,
586595
pgStartupWait, overrideWorkingDirectory);
587596
}
588597

@@ -602,6 +611,7 @@ public boolean equals(Object o) {
602611
Objects.equals(config, builder.config) &&
603612
Objects.equals(localeConfig, builder.localeConfig) &&
604613
Objects.equals(connectConfig, builder.connectConfig) &&
614+
Objects.equals(environmentVariables, builder.environmentVariables) &&
605615
Objects.equals(pgBinaryResolver, builder.pgBinaryResolver) &&
606616
Objects.equals(pgStartupWait, builder.pgStartupWait) &&
607617
Objects.equals(errRedirector, builder.errRedirector) &&
@@ -610,7 +620,7 @@ public boolean equals(Object o) {
610620

611621
@Override
612622
public int hashCode() {
613-
return Objects.hash(parentDirectory, builderDataDirectory, config, localeConfig, builderCleanDataDirectory, builderPort, connectConfig, pgBinaryResolver, pgStartupWait, errRedirector, outRedirector);
623+
return Objects.hash(parentDirectory, builderDataDirectory, config, localeConfig, builderCleanDataDirectory, builderPort, connectConfig, environmentVariables, pgBinaryResolver, pgStartupWait, errRedirector, outRedirector);
614624
}
615625
}
616626

@@ -894,6 +904,8 @@ public void applyTo(ProcessBuilder builder, List<String> arguments) {
894904
command.addAll(arguments);
895905

896906
builder.command(command);
907+
908+
builder.environment().putAll(environmentVariables);
897909
}
898910
}
899911
}

0 commit comments

Comments
 (0)