You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2017/11/08 07:59:28 UTC
svn commit: r1814559 - in /openwebbeans/meecrowave/trunk:
meecrowave-junit/src/main/java/org/apache/meecrowave/junit/
meecrowave-junit/src/main/java/org/apache/meecrowave/testing/
meecrowave-junit/src/test/java/org/apache/meecrowave/junit/ meecrowave-o...
Author: struberg
Date: Wed Nov 8 07:59:27 2017
New Revision: 1814559
URL: http://svn.apache.org/viewvc?rev=1814559&view=rev
Log:
MEECROWAVE-77 wrap unit tests runs in separate ClassLoader
Modified:
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRule.java
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java
openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java
openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java
openwebbeans/meecrowave/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java
Modified: openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRule.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRule.java?rev=1814559&r1=1814558&r2=1814559&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRule.java (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRule.java Wed Nov 8 07:59:27 2017
@@ -18,12 +18,17 @@
*/
package org.apache.meecrowave.junit;
+import java.net.URL;
+import java.net.URLClassLoader;
+
import org.apache.meecrowave.Meecrowave;
public class MeecrowaveRule extends MeecrowaveRuleBase<MeecrowaveRule> {
private final Meecrowave.Builder configuration;
private final String context;
+ private ClassLoader meecrowaveCL;
+
public MeecrowaveRule() {
this(new Meecrowave.Builder().randomHttpPort(), "");
}
@@ -42,4 +47,17 @@ public class MeecrowaveRule extends Meec
protected AutoCloseable onStart() {
return new Meecrowave(configuration).bake(context);
}
+
+ @Override
+ protected ClassLoader getClassLoader() {
+ if (meecrowaveCL == null) {
+ ClassLoader currentCL = Thread.currentThread().getContextClassLoader();
+ if (currentCL == null) {
+ this.getClass().getClassLoader();
+ }
+
+ meecrowaveCL = new URLClassLoader(new URL[0], currentCL);
+ }
+ return meecrowaveCL;
+ }
}
Modified: openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java?rev=1814559&r1=1814558&r2=1814559&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java Wed Nov 8 07:59:27 2017
@@ -43,6 +43,11 @@ public abstract class MeecrowaveRuleBase
return new Statement() {
@Override
public void evaluate() throws Throwable {
+ ClassLoader oldCL = Thread.currentThread().getContextClassLoader();
+ ClassLoader newCl = getClassLoader();
+ if (newCl != null) {
+ Thread.currentThread().setContextClassLoader(newCl);
+ }
try (final AutoCloseable closeable = onStart()) {
started.set(true);
final Collection<CreationalContext<?>> contexts = toInject.stream().map(MeecrowaveRuleBase::doInject).collect(toList());
@@ -53,6 +58,9 @@ public abstract class MeecrowaveRuleBase
started.set(false);
}
}
+ finally {
+ Thread.currentThread().setContextClassLoader(oldCL);
+ }
}
};
}
@@ -78,4 +86,8 @@ public abstract class MeecrowaveRuleBase
public abstract Meecrowave.Builder getConfiguration();
protected abstract AutoCloseable onStart();
+
+ protected ClassLoader getClassLoader() {
+ return null;
+ }
}
Modified: openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java?rev=1814559&r1=1814558&r2=1814559&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java Wed Nov 8 07:59:27 2017
@@ -21,6 +21,8 @@ package org.apache.meecrowave.testing;
import org.apache.meecrowave.Meecrowave;
import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
import java.util.Comparator;
import java.util.ServiceLoader;
import java.util.concurrent.atomic.AtomicReference;
@@ -29,11 +31,15 @@ import java.util.stream.StreamSupport;
public class MonoBase {
private static final AtomicReference<Meecrowave> CONTAINER = new AtomicReference<>();
private static final AtomicReference<Meecrowave.Builder> CONFIGURATION = new AtomicReference<>();
+ private static ClassLoader monoClassLoader = null;
public Meecrowave.Builder doBoot() {
final Meecrowave.Builder configuration = new Meecrowave.Builder().randomHttpPort().noShutdownHook(/*the rule does*/);
CONFIGURATION.compareAndSet(null, configuration);
+ ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
+ monoClassLoader = new URLClassLoader(new URL[0], originalCL);
+
final Meecrowave meecrowave = new Meecrowave(CONFIGURATION.get());
if (CONTAINER.compareAndSet(null, meecrowave)) {
final Configuration runnerConfig = StreamSupport.stream(ServiceLoader.load(Configuration.class).spliterator(), false)
Modified: openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java?rev=1814559&r1=1814558&r2=1814559&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java Wed Nov 8 07:59:27 2017
@@ -19,23 +19,36 @@
package org.apache.meecrowave.junit;
import org.apache.meecrowave.io.IO;
+import org.app.MyAppClass;
import org.junit.ClassRule;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.TestRule;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import javax.inject.Inject;
+
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
public class MeecrowaveRuleTest {
@ClassRule
public static final MeecrowaveRule RULE = new MeecrowaveRule();
+ @Rule
+ public final TestRule injectRule = new InjectRule(this);
+
+ private @Inject MyAppClass myApp;
+
@Test
public void test() throws IOException {
assertEquals("simple", slurp(new URL("http://localhost:" + RULE.getConfiguration().getHttpPort() + "/api/test")));
+
+ assertNotNull(myApp);
}
private String slurp(final URL url) {
Modified: openwebbeans/meecrowave/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java
URL: http://svn.apache.org/viewvc/openwebbeans/meecrowave/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java?rev=1814559&r1=1814558&r2=1814559&view=diff
==============================================================================
--- openwebbeans/meecrowave/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java (original)
+++ openwebbeans/meecrowave/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java Wed Nov 8 07:59:27 2017
@@ -206,7 +206,7 @@ public class OAuth2Test {
final CachingProvider provider = Caching.getCachingProvider();
final CacheManager cacheManager = provider.getCacheManager(
ClassLoaderUtils.getResource("default-oauth2.jcs", OAuth2Test.class).toURI(),
- provider.getDefaultClassLoader());
+ Thread.currentThread().getContextClassLoader());
Cache<String, org.apache.cxf.rs.security.oauth2.common.Client> cache;
try {
cache = cacheManager