You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2015/11/12 04:08:58 UTC

svn commit: r1713963 - in /incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent: InJvmTransformerRunner.java JavaAgentRunner.java

Author: rmannibucau
Date: Thu Nov 12 03:08:58 2015
New Revision: 1713963

URL: http://svn.apache.org/viewvc?rev=1713963&view=rev
Log:
fixing out agent runner for junit 4.12 and avoid to require openjpa dependency

Modified:
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java
    incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java

Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java?rev=1713963&r1=1713962&r2=1713963&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/InJvmTransformerRunner.java Thu Nov 12 03:08:58 2015
@@ -34,6 +34,7 @@ import serp.bytecode.Project;
 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 @@ public class InJvmTransformerRunner exte
         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 @@ public class InJvmTransformerRunner exte
                         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 @@ public class InJvmTransformerRunner exte
                 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;
+        }
     }
 }

Modified: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java?rev=1713963&r1=1713962&r2=1713963&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/sirona/javaagent/JavaAgentRunner.java Thu Nov 12 03:08:58 2015
@@ -311,6 +311,9 @@ public class JavaAgentRunner extends Blo
                     url = loader.getResource(classFileName);
                 } else {
                     url = clazz.getResource(classFileName);
+                    if (url == null) {
+                        url = clazz.getResource('/' + classFileName);
+                    }
                 }
 
                 if (url == null) {
@@ -325,7 +328,7 @@ public class JavaAgentRunner extends Blo
                         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()));