fixing out agent runner for junit 4.12 and avoid to require openjpa dependency
git-svn-id: https://svn.apache.org/repos/asf/incubator/sirona/trunk@1713963 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java b/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java
index 99304e9..39a7d56 100644
--- a/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java
+++ b/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java
@@ -34,6 +34,7 @@
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.InputStream;
import java.lang.instrument.ClassFileTransformer;
import java.lang.reflect.Field;
@@ -59,9 +60,14 @@
Thread.currentThread().setContextClassLoader(getTestLoader());
try {
final Class<?> testTransformedClass = testLoader.loadClass(getTestClass().getName());
- final Field f = ParentRunner.class.getDeclaredField("fTestClass");
- f.setAccessible(true);
- f.set(this, new TestClass(testTransformedClass));
+ Field field;
+ try { // junit 4.11
+ field = ParentRunner.class.getDeclaredField("fTestClass");
+ } catch (final NoSuchFieldException nsfe) { // junit 4.12
+ field = ParentRunner.class.getDeclaredField("testClass");
+ }
+ field.setAccessible(true);
+ field.set(this, new TestClass(testTransformedClass));
} catch (final Exception e) {
throw new RuntimeException(e);
} finally {
@@ -151,28 +157,7 @@
final SironaTransformer transformer = new SironaTransformer(false, null);
buffer = transformer.transform(this, className, null, null, buffer);
} else if (PCClassFileTransformer.class.equals(t)) {
- if (name.endsWith("Entity")) {
- // hacky but avoid to build a full openjpa project/context
- final PersistenceMetaDataFactory factory = new PersistenceMetaDataFactory();
- factory.setTypes("org.apache.test.sirona.javaagent.OpenJPATest$ServiceSquareEntity");
-
- final MetaDataRepository repos = new MetaDataRepository();
- repos.setConfiguration(new OpenJPAConfigurationImpl());
- repos.setMetaDataFactory(factory);
-
- final BCClass type = new Project().loadClass(new ByteArrayInputStream(buffer), new URLClassLoader(new URL[0], getParent()));
- final PCEnhancer enhancer = new PCEnhancer(repos.getConfiguration(), type, repos, this);
- enhancer.setAddDefaultConstructor(true);
- enhancer.setEnforcePropertyRestrictions(true);
-
- if (enhancer.run() != PCEnhancer.ENHANCE_NONE) {
- final BCClass pcb = enhancer.getPCBytecode();
- final byte[] transformed = AsmAdaptor.toByteArray(pcb, pcb.toByteArray());
- if (transformed != null) {
- buffer = transformed;
- }
- }
- }
+ buffer = handleJpa(name, buffer);
} else {
buffer = ClassFileTransformer.class.cast(t.newInstance()).transform(this, className, null, null, buffer);
}
@@ -198,5 +183,41 @@
throw new ClassNotFoundException(t.getMessage(), t);
}
}
+
+ private byte[] handleJpa(final String name, final byte[] buffer) throws IOException {
+ return Jpa.handleJpa(name, buffer, this);
+ }
+ }
+
+ private static class Jpa {
+ private Jpa() {
+ // no-op
+ }
+
+ public static byte[] handleJpa(final String name, final byte[] buffer, final ClassLoader loader) throws IOException {
+ if (name.endsWith("Entity")) {
+ // hacky but avoid to build a full openjpa project/context
+ final PersistenceMetaDataFactory factory = new PersistenceMetaDataFactory();
+ factory.setTypes("org.apache.test.sirona.javaagent.OpenJPATest$ServiceSquareEntity");
+
+ final MetaDataRepository repos = new MetaDataRepository();
+ repos.setConfiguration(new OpenJPAConfigurationImpl());
+ repos.setMetaDataFactory(factory);
+
+ final BCClass type = new Project().loadClass(new ByteArrayInputStream(buffer), new URLClassLoader(new URL[0], loader.getParent()));
+ final PCEnhancer enhancer = new PCEnhancer(repos.getConfiguration(), type, repos, loader);
+ enhancer.setAddDefaultConstructor(true);
+ enhancer.setEnforcePropertyRestrictions(true);
+
+ if (enhancer.run() != PCEnhancer.ENHANCE_NONE) {
+ final BCClass pcb = enhancer.getPCBytecode();
+ final byte[] transformed = AsmAdaptor.toByteArray(pcb, pcb.toByteArray());
+ if (transformed != null) {
+ return transformed;
+ }
+ }
+ }
+ return buffer;
+ }
}
}
diff --git a/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java b/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java
index be2ec34..30ecf2f 100644
--- a/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java
+++ b/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java
@@ -311,6 +311,9 @@
url = loader.getResource(classFileName);
} else {
url = clazz.getResource(classFileName);
+ if (url == null) {
+ url = clazz.getResource('/' + classFileName);
+ }
}
if (url == null) {
@@ -325,7 +328,7 @@
throw new MalformedURLException("no ! found in jar url spec:" + spec);
}
- url = new URL(spec.substring(0, separator++));
+ url = new URL(spec.substring(0, separator));
return new File(decode(url.getFile()));