Skip to content

Commit 3d48b93

Browse files
committed
More improvements
1 parent ec310b1 commit 3d48b93

File tree

4 files changed

+68
-16
lines changed

4 files changed

+68
-16
lines changed

modules/application-server-commons/src/main/java/org/testcontainers/applicationserver/ApplicationServerContainer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ protected boolean isHttpPortSet() {
304304
*
305305
* @return - The temporary directory path
306306
*/
307-
private static Path getTempDirectory() {
307+
protected static Path getTempDirectory() {
308308
if( Objects.nonNull(tempDirectory) ) {
309309
return tempDirectory;
310310
}

modules/liberty/src/main/java/org/testcontainers/containers/LibertyServerContainer.java

+66-9
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,16 @@
55
import org.testcontainers.utility.MountableFile;
66
import org.testcontainers.applicationserver.ApplicationServerContainer;
77

8+
import java.io.IOException;
9+
import java.nio.charset.StandardCharsets;
10+
import java.nio.file.Files;
11+
import java.nio.file.Path;
12+
import java.nio.file.Paths;
13+
import java.nio.file.StandardOpenOption;
814
import java.time.Duration;
15+
import java.util.ArrayList;
16+
import java.util.Arrays;
17+
import java.util.List;
918
import java.util.Objects;
1019

1120
/**
@@ -18,8 +27,6 @@ public class LibertyServerContainer extends ApplicationServerContainer {
1827
// About the image
1928
public static final String IMAGE = "open-liberty";
2029

21-
public static final String DEFAULT_TAG = "23.0.0.3-full-java17-openj9";
22-
2330
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(IMAGE);
2431

2532
// Container defaults
@@ -33,9 +40,12 @@ public class LibertyServerContainer extends ApplicationServerContainer {
3340

3441
private static final String APPLICATION_DROPIN_DIR = "/config/dropins/";
3542

43+
private static final List<String> DEFAULT_FEATURES = Arrays.asList("webProfile-10.0");
44+
3645
// Container fields
37-
@NonNull
38-
private MountableFile serverConfiguration = MountableFile.forClasspathResource("default/config/defaultServer.xml");
46+
private MountableFile serverConfiguration;
47+
48+
private List<String> features = new ArrayList<>();
3949

4050
// Constructors
4151
public LibertyServerContainer(String imageName) {
@@ -62,9 +72,19 @@ private void preconfigure() {
6272
public void configure() {
6373
super.configure();
6474

65-
// Copy default server configuration
66-
Objects.requireNonNull(serverConfiguration);
67-
withCopyFileToContainer(serverConfiguration, SERVER_CONFIG_DIR + "server.xml");
75+
// Copy server configuration
76+
if( Objects.nonNull(serverConfiguration) ) {
77+
withCopyFileToContainer(serverConfiguration, SERVER_CONFIG_DIR + "server.xml");
78+
return;
79+
}
80+
81+
if ( ! features.isEmpty() ) {
82+
withCopyFileToContainer(generateServerConfiguration(features), SERVER_CONFIG_DIR + "server.xml");
83+
return;
84+
}
85+
86+
withCopyFileToContainer(generateServerConfiguration(DEFAULT_FEATURES), SERVER_CONFIG_DIR + "server.xml");
87+
6888
}
6989

7090
@Override
@@ -75,14 +95,51 @@ protected String getApplicationInstallDirectory() {
7595
// Configuration
7696

7797
/**
78-
* The server configuration file that will be copied to the Liberty container
98+
* The server configuration file that will be copied to the Liberty container.
99+
*
100+
* Calling this method more than once will replace the existing serverConfig if set.
79101
*
80102
* @param serverConfig - server.xml
81103
* @return self
82104
*/
83105
public LibertyServerContainer withServerConfiguration(@NonNull MountableFile serverConfig) {
84-
System.out.println("KJA1017 serverConfig called: " + serverConfig.getFilesystemPath());
85106
this.serverConfiguration = serverConfig;
86107
return this;
87108
}
109+
110+
/**
111+
* A list of Liberty features to configure on the Liberty container.
112+
*
113+
* These features will be ignored if a serverConfig file is set.
114+
*
115+
* @param features - The list of features
116+
* @return self
117+
*/
118+
public LibertyServerContainer withFeatures(String... features) {
119+
this.features.addAll(Arrays.asList(features));
120+
return this;
121+
}
122+
123+
// Helpers
124+
125+
private static final MountableFile generateServerConfiguration(List<String> features) {
126+
String configContents = "";
127+
configContents += "<server><featureManager>";
128+
for(String feature : features) {
129+
configContents += "<feature>" + feature + "</feature>";
130+
}
131+
configContents += "</featureManager></server>";
132+
configContents += System.lineSeparator();
133+
134+
Path generatedConfigPath = Paths.get(getTempDirectory().toString(), "generatedServer.xml");
135+
136+
try {
137+
Files.write(generatedConfigPath, configContents.getBytes(StandardCharsets.UTF_8),
138+
StandardOpenOption.CREATE, StandardOpenOption.WRITE);
139+
} catch (IOException ioe) {
140+
throw new RuntimeException("Unable to generate server configuration at runtime", ioe);
141+
}
142+
143+
return MountableFile.forHostPath(generatedConfigPath);
144+
}
88145
}

modules/liberty/src/main/resources/default/config/defaultServer.xml

-5
This file was deleted.

modules/liberty/src/test/java/org/testcontainers/containers/LibertyContainerTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
public class LibertyContainerTest {
1919

2020
private static final DockerImageName libertyImage = DockerImageName.parse(LibertyServerContainer.IMAGE)
21-
.withTag(LibertyServerContainer.DEFAULT_TAG);
21+
.withTag("23.0.0.3-full-java17-openj9");
2222

2323
private static ApplicationServerContainer testContainer = new LibertyServerContainer(libertyImage)
2424
.withArchvies(createDeployment())

0 commit comments

Comments
 (0)