Skip to content

Commit e65d0f0

Browse files
committed
feat(testcontainers): add initial scripts constructor param
1 parent 94f49a0 commit e65d0f0

File tree

7 files changed

+447
-81
lines changed

7 files changed

+447
-81
lines changed

tarantool-shared-resources/server.lua

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ box.cfg {
2121
local log = require('log')
2222
local fiber = require('fiber')
2323
local socket = require('socket')
24-
local tarantool = require('tarantool')
24+
local utils = dofile('/data/utils.lua')
2525

2626
local LIMIT = 512
2727
local BIND = '0.0.0.0'
@@ -33,37 +33,10 @@ pipe_lock = false
3333
------------------------------------------------------------------------------
3434
-- UTILITY FUNCTIONS
3535
------------------------------------------------------------------------------
36-
local function get_version()
37-
local version = unpack(tarantool.version:split('-'))
38-
return version
39-
end
40-
41-
local function create_kv_space(name)
42-
local space = box.schema.space.create(name, {
43-
if_not_exists = true,
44-
format = {
45-
{ 'id', type = 'string' },
46-
{ 'value', type = 'string', is_nullable = true }
47-
}
48-
})
49-
space:create_index('pk', { parts = { 'id' } })
50-
end
51-
52-
local function create_complex_space(name)
53-
local space = box.schema.space.create(name, {
54-
if_not_exists = true,
55-
format = {
56-
{ 'id', type = 'number' },
57-
{ 'is_married', type = 'boolean', is_nullable = true },
58-
{ 'name', type = 'string' }
59-
}
60-
})
61-
space:create_index('pk', { parts = { 'id' } })
62-
end
63-
64-
local function fail()
65-
error('Fail!')
66-
end
36+
local get_version = utils.get_version
37+
local create_kv_space = utils.create_kv_space
38+
local create_complex_space = utils.create_complex_space
39+
local fail = utils.fail
6740

6841
------------------------------------------------------------------------------
6942
-- SCHEMA
@@ -207,8 +180,8 @@ end
207180
------------------------------------------------------------------------------
208181
-- PUBLIC FUNCTIONS
209182
------------------------------------------------------------------------------
210-
get_version = get_version
211-
fail = fail
183+
_G.get_version = get_version
184+
_G.fail = fail
212185

213186
function echo_with_wrapping(...)
214187
-- we use table packing because it's more popular than multi return value

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)