Skip to content

Commit ab1e521

Browse files
Joe Steelsnicoll
authored andcommitted
Fix password property for Oracle container
See gh-37044
1 parent 6780b80 commit ab1e521

File tree

4 files changed

+74
-29
lines changed

4 files changed

+74
-29
lines changed

spring-boot-project/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleEnvironment.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ class OracleEnvironment {
4242

4343
private String extractPassword(Map<String, String> env) {
4444
if (env.containsKey("APP_USER")) {
45-
String password = env.get("APP_PASSWORD");
45+
String password = env.get("APP_USER_PASSWORD");
4646
Assert.state(StringUtils.hasLength(password), "No Oracle app password found");
4747
return password;
4848
}
4949
Assert.state(!env.containsKey("ORACLE_RANDOM_PASSWORD"),
50-
"ORACLE_RANDOM_PASSWORD is not supported without APP_USER and APP_PASSWORD");
50+
"ORACLE_RANDOM_PASSWORD is not supported without APP_USER and APP_USER_PASSWORD");
5151
String password = env.get("ORACLE_PASSWORD");
5252
Assert.state(StringUtils.hasLength(password), "No Oracle password found");
5353
return password;

spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleEnvironmentTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class OracleEnvironmentTests {
3434

3535
@Test
3636
void getUsernameWhenHasAppUser() {
37-
OracleEnvironment environment = new OracleEnvironment(Map.of("APP_USER", "alice", "APP_PASSWORD", "secret"));
37+
OracleEnvironment environment = new OracleEnvironment(Map.of("APP_USER", "alice", "APP_USER_PASSWORD", "secret"));
3838
assertThat(environment.getUsername()).isEqualTo("alice");
3939
}
4040

@@ -46,7 +46,7 @@ void getUsernameWhenHasNoAppUser() {
4646

4747
@Test
4848
void getPasswordWhenHasAppPassword() {
49-
OracleEnvironment environment = new OracleEnvironment(Map.of("APP_USER", "alice", "APP_PASSWORD", "secret"));
49+
OracleEnvironment environment = new OracleEnvironment(Map.of("APP_USER", "alice", "APP_USER_PASSWORD", "secret"));
5050
assertThat(environment.getPassword()).isEqualTo("secret");
5151
}
5252

@@ -59,14 +59,14 @@ void getPasswordWhenHasOraclePassword() {
5959
@Test
6060
void createWhenRandomPasswordAndAppPasswordDoesNotThrow() {
6161
assertThatNoException().isThrownBy(() -> new OracleEnvironment(
62-
Map.of("APP_USER", "alice", "APP_PASSWORD", "secret", "ORACLE_RANDOM_PASSWORD", "true")));
62+
Map.of("APP_USER", "alice", "APP_USER_PASSWORD", "secret", "ORACLE_RANDOM_PASSWORD", "true")));
6363
}
6464

6565
@Test
6666
void createWhenRandomPasswordThrowsException() {
6767
assertThatIllegalStateException()
6868
.isThrownBy(() -> new OracleEnvironment(Map.of("ORACLE_RANDOM_PASSWORD", "true")))
69-
.withMessage("ORACLE_RANDOM_PASSWORD is not supported without APP_USER and APP_PASSWORD");
69+
.withMessage("ORACLE_RANDOM_PASSWORD is not supported without APP_USER and APP_USER_PASSWORD");
7070
}
7171

7272
@Test
@@ -78,7 +78,7 @@ void createWhenAppUserAndNoAppPasswordThrowsException() {
7878
@Test
7979
void createWhenAppUserAndEmptyAppPasswordThrowsException() {
8080
assertThatIllegalStateException()
81-
.isThrownBy(() -> new OracleEnvironment(Map.of("APP_USER", "alice", "APP_PASSWORD", "")))
81+
.isThrownBy(() -> new OracleEnvironment(Map.of("APP_USER", "alice", "APP_USER_PASSWORD", "")))
8282
.withMessage("No Oracle app password found");
8383
}
8484

spring-boot-project/spring-boot-docker-compose/src/test/java/org/springframework/boot/docker/compose/service/connection/oracle/OracleJdbcDockerComposeConnectionDetailsFactoryIntegrationTests.java

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.time.Duration;
2121

2222
import org.awaitility.Awaitility;
23+
import org.junit.jupiter.api.Nested;
2324
import org.junit.jupiter.api.Test;
2425
import org.junit.jupiter.api.condition.OS;
2526

@@ -41,30 +42,59 @@
4142
*/
4243
@DisabledOnOs(os = { OS.LINUX, OS.MAC }, architecture = "aarch64",
4344
disabledReason = "The Oracle image has no ARM support")
44-
class OracleJdbcDockerComposeConnectionDetailsFactoryIntegrationTests extends AbstractDockerComposeIntegrationTests {
45+
class OracleJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
4546

46-
OracleJdbcDockerComposeConnectionDetailsFactoryIntegrationTests() {
47-
super("oracle-compose.yaml", DockerImageNames.oracleXe());
48-
}
47+
@Nested
48+
class OracleJdbcDockerComposeConnectionDetailsFactoryDefaultSettingsIntegrationTests extends AbstractDockerComposeIntegrationTests {
49+
OracleJdbcDockerComposeConnectionDetailsFactoryDefaultSettingsIntegrationTests() {
50+
super("oracle-compose.yaml", DockerImageNames.oracleXe());
51+
}
4952

50-
@Test
51-
@SuppressWarnings("unchecked")
52-
void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase() throws Exception {
53-
JdbcConnectionDetails connectionDetails = run(JdbcConnectionDetails.class);
54-
assertThat(connectionDetails.getUsername()).isEqualTo("system");
55-
assertThat(connectionDetails.getPassword()).isEqualTo("secret");
56-
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:oracle:thin:@").endsWith("/xepdb1");
57-
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
58-
dataSource.setUrl(connectionDetails.getJdbcUrl());
59-
dataSource.setUsername(connectionDetails.getUsername());
60-
dataSource.setPassword(connectionDetails.getPassword());
61-
dataSource.setDriverClass((Class<? extends Driver>) ClassUtils.forName(connectionDetails.getDriverClassName(),
62-
getClass().getClassLoader()));
63-
Awaitility.await().atMost(Duration.ofMinutes(1)).ignoreExceptions().untilAsserted(() -> {
64-
JdbcTemplate template = new JdbcTemplate(dataSource);
65-
assertThat(template.queryForObject(DatabaseDriver.ORACLE.getValidationQuery(), String.class))
66-
.isEqualTo("Hello");
67-
});
53+
@Test
54+
@SuppressWarnings("unchecked")
55+
void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase() throws Exception {
56+
JdbcConnectionDetails connectionDetails = run(JdbcConnectionDetails.class);
57+
assertThat(connectionDetails.getUsername()).isEqualTo("system");
58+
assertThat(connectionDetails.getPassword()).isEqualTo("secret");
59+
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:oracle:thin:@").endsWith("/xepdb1");
60+
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
61+
dataSource.setUrl(connectionDetails.getJdbcUrl());
62+
dataSource.setUsername(connectionDetails.getUsername());
63+
dataSource.setPassword(connectionDetails.getPassword());
64+
dataSource.setDriverClass((Class<? extends Driver>) ClassUtils.forName(connectionDetails.getDriverClassName(),
65+
getClass().getClassLoader()));
66+
Awaitility.await().atMost(Duration.ofMinutes(1)).ignoreExceptions().untilAsserted(() -> {
67+
JdbcTemplate template = new JdbcTemplate(dataSource);
68+
assertThat(template.queryForObject(DatabaseDriver.ORACLE.getValidationQuery(), String.class))
69+
.isEqualTo("Hello");
70+
});
71+
}
6872
}
6973

74+
@Nested
75+
class OracleJdbcDockerComposeConnectionDetailsFactoryNonDefaultSettingsIntegrationTests extends AbstractDockerComposeIntegrationTests {
76+
protected OracleJdbcDockerComposeConnectionDetailsFactoryNonDefaultSettingsIntegrationTests() {
77+
super("oracle-non-default-compose.yaml", DockerImageNames.oracleXe());
78+
}
79+
80+
@Test
81+
@SuppressWarnings("unchecked")
82+
void runCreatesConnectionDetailsWithNonDefaultUsernameAndPasswordThatCanBeUsedToAccessDatabase() throws Exception {
83+
JdbcConnectionDetails connectionDetails = run(JdbcConnectionDetails.class);
84+
assertThat(connectionDetails.getUsername()).isEqualTo("app_user");
85+
assertThat(connectionDetails.getPassword()).isEqualTo("app_user_secret");
86+
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:oracle:thin:@").endsWith("/xepdb1");
87+
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
88+
dataSource.setUrl(connectionDetails.getJdbcUrl());
89+
dataSource.setUsername(connectionDetails.getUsername());
90+
dataSource.setPassword(connectionDetails.getPassword());
91+
dataSource.setDriverClass((Class<? extends Driver>) ClassUtils.forName(connectionDetails.getDriverClassName(),
92+
getClass().getClassLoader()));
93+
Awaitility.await().atMost(Duration.ofMinutes(1)).ignoreExceptions().untilAsserted(() -> {
94+
JdbcTemplate template = new JdbcTemplate(dataSource);
95+
assertThat(template.queryForObject(DatabaseDriver.ORACLE.getValidationQuery(), String.class))
96+
.isEqualTo("Hello");
97+
});
98+
}
99+
}
70100
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
services:
2+
database:
3+
image: '{imageName}'
4+
ports:
5+
- '1521'
6+
environment:
7+
- 'APP_USER=app_user'
8+
- 'APP_USER_PASSWORD=app_user_secret'
9+
- 'ORACLE_PASSWORD=secret'
10+
healthcheck:
11+
test: ["CMD-SHELL", "healthcheck.sh"]
12+
interval: 10s
13+
timeout: 5s
14+
retries: 10
15+

0 commit comments

Comments
 (0)