Skip to content

Commit 99b91b8

Browse files
kiviewPiotrbsideup
authored
Update OracleContainer and re-activate on CI (#4298)
Will now use "gvenzl/oracle-xe:18.4.0-slim" by default. Co-authored-by: Piotr <[email protected]> Co-authored-by: Sergei Egorov <[email protected]>
1 parent 5b66056 commit 99b91b8

File tree

4 files changed

+47
-28
lines changed

4 files changed

+47
-28
lines changed

core/src/main/java/org/testcontainers/utility/TestcontainersConfiguration.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.net.MalformedURLException;
2525
import java.net.URL;
2626
import java.util.Map;
27-
import java.util.Objects;
2827
import java.util.Optional;
2928
import java.util.Properties;
3029
import java.util.concurrent.atomic.AtomicReference;
@@ -61,6 +60,7 @@ public class TestcontainersConfiguration {
6160
private static final String PULSAR_IMAGE = "apachepulsar/pulsar";
6261
private static final String LOCALSTACK_IMAGE = "localstack/localstack";
6362
private static final String SSHD_IMAGE = "testcontainers/sshd";
63+
private static final String ORACLE_IMAGE = "gvenzl/oracle-xe";
6464

6565
private static final ImmutableMap<DockerImageName, String> CONTAINER_MAPPING = ImmutableMap.<DockerImageName, String>builder()
6666
.put(DockerImageName.parse(AMBASSADOR_IMAGE), "ambassador.container.image")
@@ -73,6 +73,7 @@ public class TestcontainersConfiguration {
7373
.put(DockerImageName.parse(PULSAR_IMAGE), "pulsar.container.image")
7474
.put(DockerImageName.parse(LOCALSTACK_IMAGE), "localstack.container.image")
7575
.put(DockerImageName.parse(SSHD_IMAGE), "sshd.container.image")
76+
.put(DockerImageName.parse(ORACLE_IMAGE), "oracle.container.image")
7677
.build();
7778

7879
@Getter(lazy = true)
@@ -146,7 +147,7 @@ public String getKafkaImage() {
146147

147148
@Deprecated
148149
public String getOracleImage() {
149-
return getEnvVarOrProperty("oracle.container.image", null);
150+
return getImage(ORACLE_IMAGE).asCanonicalNameString();
150151
}
151152

152153
@Deprecated

modules/oracle-xe/src/main/java/org/testcontainers/containers/OracleContainer.java

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,39 @@
11
package org.testcontainers.containers;
22

33
import com.google.common.collect.Sets;
4+
import org.apache.commons.lang.StringUtils;
45
import org.testcontainers.utility.DockerImageName;
5-
import org.testcontainers.utility.TestcontainersConfiguration;
66

7+
import java.util.Arrays;
8+
import java.util.List;
79
import java.util.Set;
810
import java.util.concurrent.Future;
911

10-
/**
11-
* @author gusohal
12-
*/
1312
public class OracleContainer extends JdbcDatabaseContainer<OracleContainer> {
1413

1514
public static final String NAME = "oracle";
15+
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("gvenzl/oracle-xe");
16+
17+
18+
static final String DEFAULT_TAG = "18.4.0-slim";
19+
static final String IMAGE = DEFAULT_IMAGE_NAME.getUnversionedPart();
1620

1721
private static final int ORACLE_PORT = 1521;
1822
private static final int APEX_HTTP_PORT = 8080;
1923

2024
private static final int DEFAULT_STARTUP_TIMEOUT_SECONDS = 240;
2125
private static final int DEFAULT_CONNECT_TIMEOUT_SECONDS = 120;
26+
private static final List<String> ORACLE_SYSTEM_USERS = Arrays.asList("system", "sys");
2227

23-
private String username = "system";
24-
private String password = "oracle";
25-
26-
private static String resolveImageName() {
27-
String image = TestcontainersConfiguration.getInstance().getOracleImage();
28-
29-
if (image == null) {
30-
throw new IllegalStateException("An image to use for Oracle containers must be configured. " +
31-
"To do this, please place a file on the classpath named `testcontainers.properties`, " +
32-
"containing `oracle.container.image=IMAGE`, where IMAGE is a suitable image name and tag.");
33-
}
34-
return image;
35-
}
28+
private String username = "test";
29+
private String password = "test";
3630

3731
/**
3832
* @deprecated use {@link OracleContainer(DockerImageName)} instead
3933
*/
4034
@Deprecated
4135
public OracleContainer() {
42-
this(resolveImageName());
36+
this(DEFAULT_IMAGE_NAME.withTag(DEFAULT_TAG));
4337
}
4438

4539
public OracleContainer(String dockerImageName) {
@@ -74,7 +68,7 @@ public String getDriverClassName() {
7468

7569
@Override
7670
public String getJdbcUrl() {
77-
return "jdbc:oracle:thin:" + getUsername() + "/" + getPassword() + "@" + getHost() + ":" + getOraclePort() + ":" + getSid();
71+
return "jdbc:oracle:thin:" + getUsername() + "/" + getPassword() + "@" + getHost() + ":" + getOraclePort() + "/xepdb1";
7872
}
7973

8074
@Override
@@ -89,12 +83,21 @@ public String getPassword() {
8983

9084
@Override
9185
public OracleContainer withUsername(String username) {
86+
if (StringUtils.isEmpty(username)) {
87+
throw new IllegalArgumentException("Username cannot be null or empty");
88+
}
89+
if (ORACLE_SYSTEM_USERS.contains(username.toLowerCase())) {
90+
throw new IllegalArgumentException("Username cannot be one of " + ORACLE_SYSTEM_USERS);
91+
}
9292
this.username = username;
9393
return self();
9494
}
9595

9696
@Override
9797
public OracleContainer withPassword(String password) {
98+
if (StringUtils.isEmpty(password)) {
99+
throw new IllegalArgumentException("Password cannot be null or empty");
100+
}
98101
this.password = password;
99102
return self();
100103
}
@@ -122,4 +125,11 @@ public Integer getWebPort() {
122125
public String getTestQueryString() {
123126
return "SELECT 1 FROM DUAL";
124127
}
128+
129+
@Override
130+
protected void configure() {
131+
withEnv("ORACLE_PASSWORD", password);
132+
withEnv("APP_USER", username);
133+
withEnv("APP_USER_PASSWORD", password);
134+
}
125135
}
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.testcontainers.containers;
22

3+
import org.testcontainers.utility.DockerImageName;
4+
35
/**
46
* Factory for Oracle containers.
57
*/
@@ -11,15 +13,14 @@ public boolean supports(String databaseType) {
1113

1214
@Override
1315
public JdbcDatabaseContainer newInstance() {
14-
return new OracleContainer();
16+
return newInstance(OracleContainer.DEFAULT_TAG);
1517
}
1618

1719
@Override
1820
public JdbcDatabaseContainer newInstance(String tag) {
1921
if (tag != null) {
20-
throw new UnsupportedOperationException("Oracle database tag should be set in the configured image name");
22+
return new OracleContainer(DockerImageName.parse(OracleContainer.IMAGE).withTag(tag));
2123
}
22-
23-
return new OracleContainer();
24+
return newInstance();
2425
}
2526
}

modules/oracle-xe/src/test/java/org/testcontainers/junit/oracle/SimpleOracleTest.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
11
package org.testcontainers.junit.oracle;
22

3-
import org.junit.Ignore;
43
import org.junit.Test;
54
import org.testcontainers.containers.OracleContainer;
65
import org.testcontainers.db.AbstractContainerDatabaseTest;
6+
import org.testcontainers.utility.DockerImageName;
77

88
import java.sql.ResultSet;
99
import java.sql.SQLException;
1010

1111
import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals;
1212

13-
@Ignore
1413
public class SimpleOracleTest extends AbstractContainerDatabaseTest {
1514

15+
public static final DockerImageName ORACLE_DOCKER_IMAGE_NAME = DockerImageName.parse("gvenzl/oracle-xe:18.4.0-slim");
16+
1617
@Test
1718
public void testSimple() throws SQLException {
18-
try (OracleContainer oracle = new OracleContainer()) {
19+
20+
try (
21+
OracleContainer oracle = new OracleContainer(ORACLE_DOCKER_IMAGE_NAME)
22+
.withUsername("baz")
23+
.withPassword("bar")
24+
) {
25+
oracle.start();
1926
ResultSet resultSet = performQuery(oracle, "SELECT 1 FROM dual");
2027

2128
int resultSetInt = resultSet.getInt(1);

0 commit comments

Comments
 (0)