Skip to content

Commit 1104494

Browse files
committed
Simplify Extentions api - Remove overhead with id
1 parent a32e96d commit 1104494

File tree

4 files changed

+41
-49
lines changed

4 files changed

+41
-49
lines changed

src/main/java/org/wiremock/integrations/testcontainers/WireMockContainer.java

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@
3030
import java.nio.charset.StandardCharsets;
3131
import java.nio.file.Files;
3232
import java.nio.file.Path;
33-
import java.util.ArrayList;
3433
import java.util.Collection;
3534
import java.util.Collections;
3635
import java.util.HashMap;
36+
import java.util.LinkedHashSet;
3737
import java.util.List;
3838
import java.util.Map;
39+
import java.util.Set;
3940
import java.util.stream.Collectors;
4041
import java.util.stream.Stream;
4142

@@ -65,7 +66,8 @@ public class WireMockContainer extends GenericContainer<WireMockContainer> {
6566
private final StringBuilder wireMockArgs;
6667
private final Map<String, Stub> mappingStubs = new HashMap<>();
6768
private final Map<String, MountableFile> mappingFiles = new HashMap<>();
68-
private final Map<String, Extension> extensions = new HashMap<>();
69+
private final Set<String> extensionClassNames = new LinkedHashSet<>();
70+
private final Set<File> extensionJars = new LinkedHashSet<>();
6971
private boolean isBannerDisabled = true;
7072

7173
/**
@@ -111,7 +113,7 @@ public WireMockContainer withBanner() {
111113
isBannerDisabled = false;
112114
return this;
113115
}
114-
116+
115117
/**
116118
* Adds CLI argument to the WireMock call.
117119
* @param arg Argument
@@ -170,51 +172,59 @@ public WireMockContainer withFileFromResource(String name, Class<?> resource, St
170172

171173
/**
172174
* Add extension that will be loaded from the specified JAR file.
173-
* @param id Unique ID of the extension, for logging purposes
175+
* @param classNames Class names of the extension to be included
176+
* @param jar JAR to be included into the container
177+
* @return this instance
178+
*/
179+
public WireMockContainer withExtension(Collection<String> classNames, File jar) {
180+
return withExtension(classNames, Collections.singleton(jar));
181+
}
182+
183+
/**
184+
* Add extension that will be loaded from the specified JAR file.
174185
* @param classNames Class names of the extension to be included
175186
* @param jars JARs to be included into the container
176187
* @return this instance
177188
*/
178-
public WireMockContainer withExtension(String id, Collection<String> classNames, Collection<File> jars) {
179-
final Extension extension = new Extension(id);
180-
extension.extensionClassNames.addAll(classNames);
181-
extension.jars.addAll(jars);
182-
extensions.put(id, extension);
189+
public WireMockContainer withExtension(Collection<String> classNames, Collection<File> jars) {
190+
extensionClassNames.addAll(classNames);
191+
extensionJars.addAll(jars);
183192
return this;
184193
}
185194

186195
/**
187196
* Add extension that will be loaded from the specified directory with JAR files.
188-
* @param id Unique ID of the extension, for logging purposes
189197
* @param classNames Class names of the extension to be included
190-
* @param jarDirectory Directory that stores all JARs
198+
* @param jarsDirectory Directory that stores all JARs
191199
* @return this instance
192200
*/
193-
public WireMockContainer withExtension(String id, Collection<String> classNames, File jarDirectory) {
194-
final List<File> jarsInTheDirectory;
195-
try (Stream<Path> walk = Files.walk(jarDirectory.toPath())) {
196-
jarsInTheDirectory = walk
201+
public WireMockContainer withExtension(Collection<String> classNames, Path jarsDirectory) {
202+
if (!Files.isDirectory(jarsDirectory)) {
203+
throw new IllegalArgumentException("Path must refers to directory " + jarsDirectory);
204+
}
205+
try (Stream<Path> walk = Files.walk(jarsDirectory)) {
206+
207+
final List<File> jarsInTheDirectory = walk
197208
.filter(p -> !Files.isDirectory(p))
198209
.map(Path::toFile)
199210
.filter(f -> f.toString().endsWith(".jar"))
200211
.collect(Collectors.toList());
212+
return withExtension(classNames, jarsInTheDirectory);
213+
201214
} catch (IOException e) {
202-
throw new IllegalArgumentException("Cannot list JARs in the directory " + jarDirectory, e);
215+
throw new IllegalArgumentException("Cannot list JARs in the directory " + jarsDirectory, e);
203216
}
204-
205-
return withExtension(id, classNames, jarsInTheDirectory);
206217
}
207218

208219
/**
209220
* Add extension that will be loaded from the classpath.
210221
* This method can be used if the extension is a part of the WireMock bundle,
211-
* or a Jar is already added via {@link #withExtension(String, Collection, Collection)}}
212-
* @param id Unique ID of the extension, for logging purposes
222+
* or a Jar is already added via {@link #withExtension(Collection, Collection)}}
213223
* @param className Class name of the extension
214224
* @return this instance
215225
*/
216-
public WireMockContainer withExtension(String id, String className) {
217-
return withExtension(id, Collections.singleton(className), Collections.emptyList());
226+
public WireMockContainer withExtension(String className) {
227+
return withExtension(Collections.singleton(className), Collections.emptyList());
218228
}
219229

220230
public String getBaseUrl() {
@@ -244,13 +254,8 @@ protected void configure() {
244254
withCopyToContainer(mount.getValue(), FILES_DIR + mount.getKey());
245255
}
246256

247-
final ArrayList<String> extensionClassNames = new ArrayList<>();
248-
for (Map.Entry<String, Extension> entry : extensions.entrySet()) {
249-
final Extension ext = entry.getValue();
250-
extensionClassNames.addAll(ext.extensionClassNames);
251-
for (File jar : ext.jars) {
252-
withCopyToContainer(MountableFile.forHostPath(jar.toPath()), EXTENSIONS_DIR + jar.getName());
253-
}
257+
for (File jar : extensionJars) {
258+
withCopyToContainer(MountableFile.forHostPath(jar.toPath()), EXTENSIONS_DIR + jar.getName());
254259
}
255260
if (!extensionClassNames.isEmpty()) {
256261
wireMockArgs.append(" --extensions ");
@@ -274,14 +279,4 @@ public Stub(String name, String json) {
274279
this.json = json;
275280
}
276281
}
277-
278-
private static final class Extension {
279-
final String id;
280-
final List<File> jars = new ArrayList<>();
281-
final List<String> extensionClassNames = new ArrayList<>();
282-
283-
public Extension(String id) {
284-
this.id = id;
285-
}
286-
}
287282
}

src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ class WireMockContainerExtensionTest {
4444
.withLogConsumer(new Slf4jLogConsumer(LOGGER))
4545
.withStartupTimeout(Duration.ofSeconds(60))
4646
.withMapping("json-body-transformer", WireMockContainerExtensionTest.class, "json-body-transformer.json")
47-
.withExtension("JSON Body Transformer",
47+
.withExtension(
4848
Collections.singleton("com.ninecookies.wiremock.extensions.JsonBodyTransformer"),
49-
Collections.singleton(Paths.get("target", "test-wiremock-extension", "wiremock-extensions-0.4.1-jar-with-dependencies.jar").toFile()));
49+
Paths.get("target", "test-wiremock-extension", "wiremock-extensions-0.4.1-jar-with-dependencies.jar").toFile());
5050

5151
@Test
5252
void testJSONBodyTransformer() throws Exception {

src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsCombinationTest.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.wiremock.integrations.testcontainers.testsupport.http.TestHttpClient;
2626

2727
import java.nio.file.Paths;
28-
import java.util.Collections;
28+
import java.util.Arrays;
2929

3030
import static org.assertj.core.api.Assertions.assertThat;
3131

@@ -42,12 +42,9 @@ class WireMockContainerExtensionsCombinationTest {
4242
WireMockContainer wiremockServer = new WireMockContainer(WireMockContainer.WIREMOCK_2_LATEST)
4343
.withLogConsumer(new Slf4jLogConsumer(LOGGER))
4444
.withMapping("json-body-transformer", WireMockContainerExtensionsCombinationTest.class, "json-body-transformer.json")
45-
.withExtension("Webhook",
46-
Collections.singleton("org.wiremock.webhooks.Webhooks"),
47-
Collections.singleton(Paths.get("target", "test-wiremock-extension", "wiremock-webhooks-extension-2.35.0.jar").toFile()))
48-
.withExtension("JSON Body Transformer",
49-
Collections.singleton("com.ninecookies.wiremock.extensions.JsonBodyTransformer"),
50-
Collections.singleton(Paths.get("target", "test-wiremock-extension", "wiremock-extensions-0.4.1-jar-with-dependencies.jar").toFile()));
45+
.withExtension(
46+
Arrays.asList("org.wiremock.webhooks.Webhooks", "com.ninecookies.wiremock.extensions.JsonBodyTransformer"),
47+
Paths.get("target", "test-wiremock-extension"));
5148

5249
@Test
5350
void testJSONBodyTransformer() throws Exception {

src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsWebhookTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class WireMockContainerExtensionsWebhookTest {
6060
.withLogConsumer(new Slf4jLogConsumer(LOGGER))
6161
.withCliArg("--global-response-templating")
6262
.withMapping("webhook-callback-template", WireMockContainerExtensionsWebhookTest.class, "webhook-callback-template.json")
63-
.withExtension("Webhook",
63+
.withExtension(
6464
Collections.singleton("org.wiremock.webhooks.Webhooks"),
6565
Collections.singleton(Paths.get("target", "test-wiremock-extension", "wiremock-webhooks-extension-2.35.0.jar").toFile()))
6666
.withAccessToHost(true); // Force the host access mechanism

0 commit comments

Comments
 (0)