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 2013/11/26 12:18:09 UTC
svn commit: r1545618 - in /incubator/sirona/trunk/agent/javaagent/src:
main/java/org/apache/sirona/javaagent/SironaAgent.java
test/java/org/apache/test/sirona/javaagent/IncludeExcludeTest.java
Author: rmannibucau
Date: Tue Nov 26 11:18:09 2013
New Revision: 1545618
URL: http://svn.apache.org/r1545618
Log:
adding excludes to javaagent config
Added:
incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/IncludeExcludeTest.java
Modified:
incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java?rev=1545618&r1=1545617&r2=1545618&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaAgent.java Tue Nov 26 11:18:09 2013
@@ -35,7 +35,7 @@ public class SironaAgent {
AgentContext.touch(); // important otherwise we can get NoClassDefFound if initialized lazily
Configuration.is("", true); // a touch to force eager init
- instrumentation.addTransformer(new SironaTransformer(agentArgs));
+ instrumentation.addTransformer(new SironaTransformer(agentArgs), true);
}
@@ -57,7 +57,14 @@ public class SironaAgent {
private PredicateEvaluator createEvaluator(final String agentArgs, final String str, final PredicateEvaluator defaultEvaluator) {
if (agentArgs != null && agentArgs.contains(str)) {
final int start = agentArgs.indexOf(str) + str.length();
- return new PredicateEvaluator(agentArgs.substring(start, Math.max(agentArgs.length(), agentArgs.indexOf('|', start))), ",");
+ final int separator = agentArgs.indexOf('|', start);
+ final int endIdx;
+ if (separator > 0) {
+ endIdx = separator;
+ } else {
+ endIdx = agentArgs.length();
+ }
+ return new PredicateEvaluator(agentArgs.substring(start, endIdx), ",");
}
return defaultEvaluator;
}
Added: incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/IncludeExcludeTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/IncludeExcludeTest.java?rev=1545618&view=auto
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/IncludeExcludeTest.java (added)
+++ incubator/sirona/trunk/agent/javaagent/src/test/java/org/apache/test/sirona/javaagent/IncludeExcludeTest.java Tue Nov 26 11:18:09 2013
@@ -0,0 +1,189 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.test.sirona.javaagent;
+
+import org.apache.sirona.javaagent.SironaAgent;
+import org.junit.Test;
+
+import java.lang.instrument.ClassDefinition;
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.IllegalClassFormatException;
+import java.lang.instrument.Instrumentation;
+import java.lang.instrument.UnmodifiableClassException;
+import java.util.jar.JarFile;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+public class IncludeExcludeTest {
+ @Test
+ public void include() throws IllegalClassFormatException {
+ final InstrumentationForTestPurpose instrumentation = new InstrumentationForTestPurpose();
+ SironaAgent.agentmain("includes=prefix:org.foo", instrumentation);
+ final ClassFileTransformer transformer = instrumentation.getTransformer();
+ assertNotNull(transformer);
+
+ try {
+ transformer.transform(getClass().getClassLoader(), "org/foo", null, null, null);
+ fail("should fail since we retransform org/foo");
+ } catch (final NullPointerException npe) {
+ // ok
+ }
+ transformer.transform(getClass().getClassLoader(), "org/bar", null, null, null); // not included
+ }
+
+ @Test
+ public void exclude() throws IllegalClassFormatException {
+ final InstrumentationForTestPurpose instrumentation = new InstrumentationForTestPurpose();
+ SironaAgent.agentmain("excludes=prefix:org.foo", instrumentation);
+ final ClassFileTransformer transformer = instrumentation.getTransformer();
+ assertNotNull(transformer);
+
+ try {
+ transformer.transform(getClass().getClassLoader(), "org/bar", null, null, null);
+ fail("should fail since we transform org/bar");
+ } catch (final NullPointerException npe) {
+ // ok
+ }
+ transformer.transform(getClass().getClassLoader(), "org/foo", null, null, null);
+ }
+
+ @Test
+ public void includeExclude() throws IllegalClassFormatException {
+ final InstrumentationForTestPurpose instrumentation = new InstrumentationForTestPurpose();
+ SironaAgent.agentmain("includes=prefix:org.foo|excludes=prefix:org.foo.bar", instrumentation);
+ final ClassFileTransformer transformer = instrumentation.getTransformer();
+ assertNotNull(transformer);
+
+ try {
+ transformer.transform(getClass().getClassLoader(), "org/foo", null, null, null);
+ fail("should fail since we transform org/bar");
+ } catch (final NullPointerException npe) {
+ // ok
+ }
+ transformer.transform(getClass().getClassLoader(), "org/foo/bar/dummy", null, null, null);
+ }
+
+ @Test // include all what is possible
+ public void defaultConfig() throws IllegalClassFormatException {
+ final InstrumentationForTestPurpose instrumentation = new InstrumentationForTestPurpose();
+ SironaAgent.agentmain(null, instrumentation);
+ final ClassFileTransformer transformer = instrumentation.getTransformer();
+ assertNotNull(transformer);
+ try {
+ transformer.transform(getClass().getClassLoader(), "org/foo", null, null, null);
+ fail("should fail since we transform org/bar");
+ } catch (final NullPointerException npe) {
+ // ok
+ }
+ try {
+ transformer.transform(getClass().getClassLoader(), "org/bar", null, null, null);
+ fail("should fail since we transform org/bar");
+ } catch (final NullPointerException npe) {
+ // ok
+ }
+ try {
+ transformer.transform(getClass().getClassLoader(), "com/sun/dumy", null, null, null);
+ fail("should fail since we transform org/bar");
+ } catch (final NullPointerException npe) {
+ // ok
+ }
+ }
+
+ public static class InstrumentationForTestPurpose implements Instrumentation {
+ private ClassFileTransformer transformer;
+
+ public ClassFileTransformer getTransformer() {
+ return transformer;
+ }
+
+ @Override
+ public void addTransformer(final ClassFileTransformer transformer, final boolean canRetransform) {
+ addTransformer(transformer);
+ }
+
+ @Override
+ public void addTransformer(final ClassFileTransformer transformer) {
+ this.transformer = transformer;
+ }
+
+ @Override
+ public boolean removeTransformer(final ClassFileTransformer transformer) {
+ return false;
+ }
+
+ @Override
+ public boolean isRetransformClassesSupported() {
+ return false;
+ }
+
+ @Override
+ public void retransformClasses(final Class<?>... classes) throws UnmodifiableClassException {
+ // no-op
+ }
+
+ @Override
+ public boolean isRedefineClassesSupported() {
+ return false;
+ }
+
+ @Override
+ public void redefineClasses(final ClassDefinition... definitions) throws ClassNotFoundException, UnmodifiableClassException {
+ // no-op
+ }
+
+ @Override
+ public boolean isModifiableClass(final Class<?> theClass) {
+ return false;
+ }
+
+ @Override
+ public Class[] getAllLoadedClasses() {
+ return new Class[0];
+ }
+
+ @Override
+ public Class[] getInitiatedClasses(final ClassLoader loader) {
+ return new Class[0];
+ }
+
+ @Override
+ public long getObjectSize(final Object objectToSize) {
+ return 0;
+ }
+
+ @Override
+ public void appendToBootstrapClassLoaderSearch(final JarFile jarfile) {
+ // no-op
+ }
+
+ @Override
+ public void appendToSystemClassLoaderSearch(final JarFile jarfile) {
+ // no-op
+ }
+
+ @Override
+ public boolean isNativeMethodPrefixSupported() {
+ return false;
+ }
+
+ @Override
+ public void setNativeMethodPrefix(final ClassFileTransformer transformer, final String prefix) {
+ // no-op
+ }
+ }
+}