Skip to content

Commit 76fa04d

Browse files
committed
Add support for empty password in bitnami/postgresql
Signed-off-by: He Zean <[email protected]>
1 parent 579be1c commit 76fa04d

File tree

5 files changed

+42
-2
lines changed

5 files changed

+42
-2
lines changed

spring-boot-project/spring-boot-docker-compose/src/dockerTest/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java

+11
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
* @author Andy Wilkinson
3636
* @author Phillip Webb
3737
* @author Scott Frederick
38+
* @author He Zean
3839
*/
3940
class PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
4041

@@ -60,6 +61,16 @@ void runWithBitnamiImageCreatesConnectionDetails(JdbcConnectionDetails connectio
6061
checkDatabaseAccess(connectionDetails);
6162
}
6263

64+
@DockerComposeTest(composeFile = "postgres-bitnami-empty-password-compose.yaml",
65+
image = TestImage.BITNAMI_POSTGRESQL)
66+
void runWithBitnamiImageCreatesConnectionDetailsWithAllowEmptyPassword(JdbcConnectionDetails connectionDetails)
67+
throws ClassNotFoundException {
68+
assertThat(connectionDetails.getUsername()).isEqualTo("myuser");
69+
assertThat(connectionDetails.getPassword()).isEmpty();
70+
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:postgresql://").endsWith("/mydatabase");
71+
checkDatabaseAccess(connectionDetails);
72+
}
73+
6374
@DockerComposeTest(composeFile = "postgres-application-name-compose.yaml", image = TestImage.POSTGRESQL)
6475
void runCreatesConnectionDetailsApplicationName(JdbcConnectionDetails connectionDetails)
6576
throws ClassNotFoundException {

spring-boot-project/spring-boot-docker-compose/src/dockerTest/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests.java

+12
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
* @author Andy Wilkinson
3838
* @author Phillip Webb
3939
* @author Scott Frederick
40+
* @author He Zean
4041
*/
4142
class PostgresR2dbcDockerComposeConnectionDetailsFactoryIntegrationTests {
4243

@@ -63,6 +64,17 @@ void runWithBitnamiImageCreatesConnectionDetails(R2dbcConnectionDetails connecti
6364
checkDatabaseAccess(connectionDetails);
6465
}
6566

67+
@DockerComposeTest(composeFile = "postgres-bitnami-empty-password-compose.yaml",
68+
image = TestImage.BITNAMI_POSTGRESQL)
69+
void runWithBitnamiImageCreatesConnectionDetailsWithAllowEmptyPassword(R2dbcConnectionDetails connectionDetails) {
70+
ConnectionFactoryOptions connectionFactoryOptions = connectionDetails.getConnectionFactoryOptions();
71+
assertThat(connectionFactoryOptions.getRequiredValue(ConnectionFactoryOptions.USER)).isEqualTo("myuser");
72+
assertThat(connectionFactoryOptions.getValue(ConnectionFactoryOptions.PASSWORD)).isNull();
73+
assertThat(connectionFactoryOptions.getRequiredValue(ConnectionFactoryOptions.DATABASE))
74+
.isEqualTo("mydatabase");
75+
checkDatabaseAccess(connectionDetails);
76+
}
77+
6678
@DockerComposeTest(composeFile = "postgres-application-name-compose.yaml", image = TestImage.POSTGRESQL)
6779
void runCreatesConnectionDetailsApplicationName(R2dbcConnectionDetails connectionDetails) {
6880
assertConnectionDetails(connectionDetails);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
services:
2+
database:
3+
image: '{imageName}'
4+
ports:
5+
- '5432'
6+
environment:
7+
- 'POSTGRESQL_USERNAME=myuser'
8+
- 'POSTGRESQL_DATABASE=mydatabase'
9+
- 'ALLOW_EMPTY_PASSWORD=yes'

spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresEnvironment.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.docker.compose.service.connection.postgres;
1818

1919
import java.util.Map;
20+
import java.util.Objects;
2021

2122
import org.springframework.util.Assert;
2223
import org.springframework.util.StringUtils;
@@ -67,8 +68,9 @@ private String extractPassword(Map<String, String> env) {
6768
return null;
6869
}
6970
String password = env.getOrDefault("POSTGRES_PASSWORD", env.get("POSTGRESQL_PASSWORD"));
70-
Assert.state(StringUtils.hasLength(password), "PostgreSQL password must be provided");
71-
return password;
71+
boolean allowEmpty = env.containsKey("ALLOW_EMPTY_PASSWORD");
72+
Assert.state(allowEmpty || StringUtils.hasLength(password), "PostgreSQL password must be provided");
73+
return Objects.requireNonNullElse(password, "");
7274
}
7375

7476
private boolean isUsingTrustHostAuthMethod(Map<String, String> env) {

spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/postgres/PostgresEnvironmentTests.java

+6
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,12 @@ void getPasswordWhenHasTrustHostAuthMethod() {
9393
assertThat(environment.getPassword()).isNull();
9494
}
9595

96+
@Test
97+
void getPasswordWhenHasNoPasswordAndAllowEmptyPassword() {
98+
PostgresEnvironment environment = new PostgresEnvironment(Map.of("ALLOW_EMPTY_PASSWORD", "yes"));
99+
assertThat(environment.getPassword()).isEmpty();
100+
}
101+
96102
@Test
97103
void getDatabaseWhenNoPostgresDbOrPostgresUser() {
98104
PostgresEnvironment environment = new PostgresEnvironment(Map.of("POSTGRES_PASSWORD", "secret"));

0 commit comments

Comments
 (0)