From 25c7a2a4d506ea0fbbff8e7b95c69a6f70437888 Mon Sep 17 00:00:00 2001 From: Georgios Andrianakis Date: Mon, 22 Jun 2020 11:19:12 +0300 Subject: [PATCH 1/2] Ensure that TestResourceManager is only closed once Without this PR the TestResourceManager gets closed 3 times, which is causing some issues with new surefire versions Relates to: https://github.com/quarkusio/quarkus/pull/10081 --- .../main/java/io/quarkus/test/junit/QuarkusTestExtension.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java index 2d22e5da6df43..dfee10dc27506 100644 --- a/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java +++ b/test-framework/junit5/src/main/java/io/quarkus/test/junit/QuarkusTestExtension.java @@ -675,7 +675,7 @@ public Object resolveParameter(ParameterContext parameterContext, ExtensionConte } } - class ExtensionState implements ExtensionContext.Store.CloseableResource { + class ExtensionState { private final Closeable testResourceManager; private final Closeable resource; @@ -685,7 +685,6 @@ class ExtensionState implements ExtensionContext.Store.CloseableResource { this.resource = resource; } - @Override public void close() throws Throwable { try { resource.close(); From 8394406e390d8411b0ee9ab5ade3a08d9e73572e Mon Sep 17 00:00:00 2001 From: Georgios Andrianakis Date: Mon, 22 Jun 2020 21:48:02 +0300 Subject: [PATCH 2/2] Avoid doing any xstream related work unless absolutely necessary Relates to: https://github.com/quarkusio/quarkus/pull/10081 --- .../test/junit/internal/XStreamDeepClone.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/test-framework/junit5/src/main/java/io/quarkus/test/junit/internal/XStreamDeepClone.java b/test-framework/junit5/src/main/java/io/quarkus/test/junit/internal/XStreamDeepClone.java index dbd6651d2a65b..82edbd3fc1f79 100644 --- a/test-framework/junit5/src/main/java/io/quarkus/test/junit/internal/XStreamDeepClone.java +++ b/test-framework/junit5/src/main/java/io/quarkus/test/junit/internal/XStreamDeepClone.java @@ -9,13 +9,17 @@ */ public class XStreamDeepClone implements DeepClone { - private final XStream xStream; + private final Supplier xStreamSupplier; public XStreamDeepClone(ClassLoader classLoader) { - xStream = new XStream(); - XStream.setupDefaultSecurity(xStream); - xStream.allowTypesByRegExp(new String[] { ".*" }); - xStream.setClassLoader(classLoader); + // avoid doing any work eagerly since the cloner is rarely used + xStreamSupplier = () -> { + XStream result = new XStream(); + XStream.setupDefaultSecurity(result); + result.allowTypesByRegExp(new String[] { ".*" }); + result.setClassLoader(classLoader); + return result; + }; } public Object clone(Object objectToClone) { @@ -40,6 +44,7 @@ public Object get() { } private Object doClone(Object objectToClone) { + XStream xStream = xStreamSupplier.get(); final String serialized = xStream.toXML(objectToClone); final Object result = xStream.fromXML(serialized); if (result == null) {