Skip to content

Commit 50b0ec1

Browse files
committed
feat(testcontainers): add initial scripts constructor param
1 parent 65b4e94 commit 50b0ec1

File tree

5 files changed

+382
-46
lines changed

5 files changed

+382
-46
lines changed

testcontainers/src/main/java/org/testcontainers/containers/cluster/cartridge/CartridgeClusterContainer.java

Lines changed: 108 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
package org.testcontainers.containers.cluster.cartridge;
77

88
import java.net.URL;
9+
import java.nio.file.Path;
910
import java.util.Arrays;
1011
import java.util.Collections;
1112
import java.util.HashMap;
@@ -70,19 +71,48 @@ public class CartridgeClusterContainer extends GenericContainer<CartridgeCluster
7071
protected String topologyConfigurationFile;
7172
protected String instancesFile;
7273
protected SslContext sslContext;
74+
protected final List<String> additionalScriptPaths;
7375

7476
public CartridgeClusterContainer(String instancesFile, String topologyConfigurationFile) {
75-
this(DOCKERFILE, instancesFile, topologyConfigurationFile);
77+
this(DOCKERFILE, instancesFile, topologyConfigurationFile, Collections.emptyList());
78+
}
79+
80+
public CartridgeClusterContainer(
81+
String instancesFile, String topologyConfigurationFile, List<String> additionalScriptPaths) {
82+
this(DOCKERFILE, instancesFile, topologyConfigurationFile, additionalScriptPaths);
7683
}
7784

7885
public CartridgeClusterContainer(
7986
String instancesFile, String topologyConfigurationFile, Map<String, String> buildArgs) {
80-
this(DOCKERFILE, "", instancesFile, topologyConfigurationFile, buildArgs);
87+
this(
88+
DOCKERFILE,
89+
"",
90+
instancesFile,
91+
topologyConfigurationFile,
92+
buildArgs,
93+
Collections.emptyList());
94+
}
95+
96+
public CartridgeClusterContainer(
97+
String instancesFile,
98+
String topologyConfigurationFile,
99+
Map<String, String> buildArgs,
100+
List<String> additionalScriptPaths) {
101+
this(
102+
DOCKERFILE, "", instancesFile, topologyConfigurationFile, buildArgs, additionalScriptPaths);
81103
}
82104

83105
public CartridgeClusterContainer(
84106
String dockerFile, String instancesFile, String topologyConfigurationFile) {
85-
this(dockerFile, "", instancesFile, topologyConfigurationFile);
107+
this(dockerFile, "", instancesFile, topologyConfigurationFile, Collections.emptyList());
108+
}
109+
110+
public CartridgeClusterContainer(
111+
String dockerFile,
112+
String instancesFile,
113+
String topologyConfigurationFile,
114+
List<String> additionalScriptPaths) {
115+
this(dockerFile, "", instancesFile, topologyConfigurationFile, additionalScriptPaths);
86116
}
87117

88118
public CartridgeClusterContainer(
@@ -95,7 +125,23 @@ public CartridgeClusterContainer(
95125
buildImageName,
96126
instancesFile,
97127
topologyConfigurationFile,
98-
Collections.emptyMap());
128+
Collections.emptyMap(),
129+
Collections.emptyList());
130+
}
131+
132+
public CartridgeClusterContainer(
133+
String dockerFile,
134+
String buildImageName,
135+
String instancesFile,
136+
String topologyConfigurationFile,
137+
List<String> additionalScriptPaths) {
138+
this(
139+
dockerFile,
140+
buildImageName,
141+
instancesFile,
142+
topologyConfigurationFile,
143+
Collections.emptyMap(),
144+
additionalScriptPaths);
99145
}
100146

101147
public CartridgeClusterContainer(
@@ -105,17 +151,34 @@ public CartridgeClusterContainer(
105151
String topologyConfigurationFile,
106152
final Map<String, String> buildArgs) {
107153
this(
108-
buildImage(dockerFile, buildImageName, buildArgs),
154+
buildImage(dockerFile, buildImageName, buildArgs, Collections.emptyList()),
109155
instancesFile,
110156
topologyConfigurationFile,
111-
buildArgs);
157+
buildArgs,
158+
Collections.emptyList());
159+
}
160+
161+
public CartridgeClusterContainer(
162+
String dockerFile,
163+
String buildImageName,
164+
String instancesFile,
165+
String topologyConfigurationFile,
166+
final Map<String, String> buildArgs,
167+
final List<String> additionalScriptPaths) {
168+
this(
169+
buildImage(dockerFile, buildImageName, buildArgs, additionalScriptPaths),
170+
instancesFile,
171+
topologyConfigurationFile,
172+
buildArgs,
173+
additionalScriptPaths);
112174
}
113175

114176
protected CartridgeClusterContainer(
115177
ImageFromDockerfile image,
116178
String instancesFile,
117179
String topologyConfigurationFile,
118-
Map<String, String> buildArgs) {
180+
Map<String, String> buildArgs,
181+
List<String> additionalScriptPaths) {
119182
super(withBuildArgs(image, buildArgs));
120183

121184
TARANTOOL_RUN_DIR =
@@ -129,6 +192,10 @@ protected CartridgeClusterContainer(
129192
}
130193
this.instancesFile = instancesFile;
131194
this.topologyConfigurationFile = topologyConfigurationFile;
195+
this.additionalScriptPaths =
196+
additionalScriptPaths == null
197+
? Collections.emptyList()
198+
: List.copyOf(additionalScriptPaths);
132199
this.instanceFileParser = new CartridgeConfigParser(instancesFile);
133200
this.configurator = new CartridgeClusterConfigurator(this);
134201
}
@@ -179,20 +246,46 @@ protected static Map<String, String> mergeBuildArguments(Map<String, String> bui
179246
}
180247

181248
protected static ImageFromDockerfile buildImage(
182-
String dockerFile, String buildImageName, final Map<String, String> buildArgs) {
249+
String dockerFile,
250+
String buildImageName,
251+
final Map<String, String> buildArgs,
252+
final List<String> additionalScriptPaths) {
183253
ImageFromDockerfile image;
184254
if (buildImageName != null && !buildImageName.isEmpty()) {
185255
image = new ImageFromDockerfile(buildImageName, false);
186256
} else {
187257
image = new ImageFromDockerfile();
188258
}
189-
return image
190-
.withFileFromClasspath("Dockerfile", dockerFile)
191-
.withFileFromClasspath(
192-
"cartridge",
193-
buildArgs.get("CARTRIDGE_SRC_DIR") == null
194-
? "cartridge"
195-
: buildArgs.get("CARTRIDGE_SRC_DIR"));
259+
ImageFromDockerfile imageFromDockerfile =
260+
image
261+
.withFileFromClasspath("Dockerfile", dockerFile)
262+
.withFileFromClasspath(
263+
"cartridge",
264+
buildArgs.get("CARTRIDGE_SRC_DIR") == null
265+
? "cartridge"
266+
: buildArgs.get("CARTRIDGE_SRC_DIR"));
267+
return withAdditionalScripts(imageFromDockerfile, "cartridge", additionalScriptPaths);
268+
}
269+
270+
private static ImageFromDockerfile withAdditionalScripts(
271+
ImageFromDockerfile image, String targetDirectory, List<String> additionalScriptPaths) {
272+
if (additionalScriptPaths == null || additionalScriptPaths.isEmpty()) {
273+
return image;
274+
}
275+
for (String scriptPath : additionalScriptPaths) {
276+
if (scriptPath == null || scriptPath.isBlank()) {
277+
throw new IllegalArgumentException("Additional script path must not be null or blank");
278+
}
279+
Path scriptFilePath = Path.of(scriptPath);
280+
Path scriptFileName = scriptFilePath.getFileName();
281+
if (scriptFileName == null) {
282+
throw new IllegalArgumentException(
283+
String.format("Cannot resolve file name for additional script path '%s'", scriptPath));
284+
}
285+
image.withFileFromClasspath(
286+
Path.of(targetDirectory, scriptFileName.toString()).toString(), scriptPath);
287+
}
288+
return image;
196289
}
197290

198291
public String getRouterHost() {

0 commit comments

Comments
 (0)