Search in sources :

Example 11 with Pointcut

use of com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut in project newrelic-java-agent by newrelic.

the class ReinstrumentUtilsTest method checkInputClassesNullPointers4.

@Test
public void checkInputClassesNullPointers4() {
    SampleObject obj = new SampleObject();
    ReinstrumentResult result = new ReinstrumentResult();
    obj.getClass().getClassLoader();
    Set<ClassLoader> loaders = new HashSet<>();
    loaders.add(this.getClass().getClassLoader());
    Extension ext = new Extension();
    Instrumentation inst = new Instrumentation();
    ext.setInstrumentation(inst);
    Pointcut pc = new Pointcut();
    inst.getPointcut().add(pc);
    setClassName(pc, SampleObject.class);
    Method m1 = new Method();
    // no method name
    MethodParameters params1 = new MethodParameters(new ArrayList<String>());
    m1.setParameters(params1);
    Map<String, Class<?>> daClasses = new HashMap<>();
    daClasses.put(SampleObject.class.getName(), SampleObject.class);
    ReinstrumentUtils.checkInputClasses(result, loaders, ext, daClasses);
    Object actual = result.getStatusMap().get(ReinstrumentResult.ERROR_KEY);
    Assert.assertNull("There should not have been an error. Errors: " + actual, actual);
}
Also used : HashMap(java.util.HashMap) Instrumentation(com.newrelic.agent.extension.beans.Extension.Instrumentation) Method(com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut.Method) Extension(com.newrelic.agent.extension.beans.Extension) Pointcut(com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut) MethodParameters(com.newrelic.agent.extension.beans.MethodParameters) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 12 with Pointcut

use of com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut in project newrelic-java-agent by newrelic.

the class ReinstrumentUtilsTest method checkInputClassesNullPointers5.

@Test
public void checkInputClassesNullPointers5() {
    SampleObject obj = new SampleObject();
    ReinstrumentResult result = new ReinstrumentResult();
    obj.getClass().getClassLoader();
    Set<ClassLoader> loaders = new HashSet<>();
    loaders.add(this.getClass().getClassLoader());
    Extension ext = new Extension();
    Instrumentation inst = new Instrumentation();
    ext.setInstrumentation(inst);
    Pointcut pc = new Pointcut();
    inst.getPointcut().add(pc);
    setClassName(pc, SampleObject.class);
    Method m1 = new Method();
    m1.setName("falala");
    // no method parameters set
    Map<String, Class<?>> daClasses = new HashMap<>();
    daClasses.put(SampleObject.class.getName(), SampleObject.class);
    ReinstrumentUtils.checkInputClasses(result, loaders, ext, daClasses);
    Object actual = result.getStatusMap().get(ReinstrumentResult.ERROR_KEY);
    Assert.assertNull("There should not have been an error. Errors: " + actual, actual);
}
Also used : HashMap(java.util.HashMap) Instrumentation(com.newrelic.agent.extension.beans.Extension.Instrumentation) Method(com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut.Method) Extension(com.newrelic.agent.extension.beans.Extension) Pointcut(com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 13 with Pointcut

use of com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut in project newrelic-java-agent by newrelic.

the class ExtensionConversionUtility method convertToEnabledPointCuts.

/**
 * Takes in an xml extension object and converts it to a list of point cuts.
 *
 * @return The list of point cuts.
 */
private static List<ExtensionClassAndMethodMatcher> convertToEnabledPointCuts(final Extension extension, final String extensionName, Map<String, MethodMapper> classesToMethods, boolean custom, InstrumentationType type, boolean isAttsEnabled) {
    List<ExtensionClassAndMethodMatcher> pointCutsOut = new ArrayList<>();
    if (extension != null) {
        String defaultMetricPrefix = createDefaultMetricPrefix(extension.getInstrumentation(), custom);
        List<Pointcut> inCuts = extension.getInstrumentation().getPointcut();
        if (inCuts != null && !inCuts.isEmpty()) {
            for (Pointcut cut : inCuts) {
                try {
                    ExtensionClassAndMethodMatcher pc = createPointCut(extension, cut, defaultMetricPrefix, extensionName, classesToMethods, custom, type, isAttsEnabled);
                    if (pc != null) {
                        logPointCutCreation(pc);
                        pointCutsOut.add(pc);
                    }
                } catch (Exception e) {
                    String msg = MessageFormat.format(XmlParsingMessages.GEN_PC_ERROR, extensionName, e.toString());
                    Agent.LOG.log(Level.SEVERE, msg);
                    Agent.LOG.log(Level.FINER, msg, e);
                }
            }
        } else {
            String msg = MessageFormat.format("There were no point cuts in the extension {0}.", extensionName);
            Agent.LOG.log(Level.INFO, msg);
        }
    }
    return pointCutsOut;
}
Also used : Pointcut(com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut) ExtensionClassAndMethodMatcher(com.newrelic.agent.instrumentation.custom.ExtensionClassAndMethodMatcher) ArrayList(java.util.ArrayList)

Example 14 with Pointcut

use of com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut in project newrelic-java-agent by newrelic.

the class ExtensionConversionUtility method convertToPointCutsForValidation.

/**
 * Should be used to validate the XML. No logging is performed with this method.
 *
 * @param ext The extension read in.
 * @return The list of point cuts.
 * @throws XmlException
 */
public static List<ExtensionClassAndMethodMatcher> convertToPointCutsForValidation(Extension ext) throws XmlException {
    List<ExtensionClassAndMethodMatcher> pointCutsOut = new ArrayList<>();
    Instrumentation inst = ext.getInstrumentation();
    validateExtensionAttributes(ext);
    // this mandates that an instrumentation element is present
    validateInstrument(inst);
    List<Pointcut> pcs = inst.getPointcut();
    String defaultMetricPrefix = createDefaultMetricPrefix(inst, true);
    Map<String, MethodMapper> classesToMethods = new HashMap<>();
    for (Pointcut pc : pcs) {
        pointCutsOut.add(createPointCut(ext, pc, defaultMetricPrefix, ext.getName(), classesToMethods, true, InstrumentationType.LocalCustomXml, false));
    }
    return pointCutsOut;
}
Also used : Pointcut(com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut) ExtensionClassAndMethodMatcher(com.newrelic.agent.instrumentation.custom.ExtensionClassAndMethodMatcher) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Instrumentation(com.newrelic.agent.extension.beans.Extension.Instrumentation)

Example 15 with Pointcut

use of com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut in project newrelic-java-agent by newrelic.

the class ExtensionDomParserTest method testDomOnePointCutWithReadString.

@Test
public void testDomOnePointCutWithReadString() throws Exception {
    File file = getFile(FILE_PATH_1);
    Extension ext = ExtensionDomParser.readStringCatchException(readInFile(file));
    Assert.assertNotNull(ext);
    // ext attributes
    Assert.assertEquals("test1", ext.getName());
    Assert.assertEquals(1.0, ext.getVersion(), .001);
    Assert.assertTrue(ext.isEnabled());
    Instrumentation inst = ext.getInstrumentation();
    Assert.assertEquals("PREFIX", inst.getMetricPrefix());
    List<Pointcut> thePcs = inst.getPointcut();
    Assert.assertEquals(1, thePcs.size());
    Pointcut pc = thePcs.get(0);
    Assert.assertTrue(pc.isTransactionStartPoint());
    Assert.assertFalse(pc.isIgnoreTransaction());
    Assert.assertFalse(pc.isExcludeFromTransactionTrace());
    Assert.assertNull(pc.getMetricNameFormat());
    Assert.assertEquals("test.CustomExampleTest", pc.getClassName().getValue());
    List<Method> methods = pc.getMethod();
    Assert.assertEquals(2, methods.size());
    Assert.assertEquals("run", methods.get(0).getName());
    Assert.assertEquals("finish", methods.get(1).getName());
    Assert.assertEquals("(Ljava/lang/String;Ljava/lang/String;)", MethodParameters.getDescriptor(methods.get(0).getParameters()));
    Assert.assertEquals("(F)", MethodParameters.getDescriptor(methods.get(1).getParameters()));
    List<ExtensionClassAndMethodMatcher> pcs = ExtensionConversionUtility.convertToPointCutsForValidation(ext);
    Assert.assertNotNull(pcs);
    Assert.assertEquals(1, pcs.size());
    ExtensionClassAndMethodMatcher actual = pcs.get(0);
    // test method matching
    Assert.assertTrue(actual.getMethodMatcher().matches(MethodMatcher.UNSPECIFIED_ACCESS, "run", "(Ljava/lang/String;Ljava/lang/String;)V", com.google.common.collect.ImmutableSet.<String>of()));
    Assert.assertFalse(actual.getMethodMatcher().matches(MethodMatcher.UNSPECIFIED_ACCESS, "finish", "(Ljava/lang/String;Ljava/lang/String;)V", com.google.common.collect.ImmutableSet.<String>of()));
    Assert.assertTrue(actual.getMethodMatcher().matches(MethodMatcher.UNSPECIFIED_ACCESS, "finish", "(F)V", com.google.common.collect.ImmutableSet.<String>of()));
    Assert.assertFalse(actual.getMethodMatcher().matches(MethodMatcher.UNSPECIFIED_ACCESS, "run", "(F)V", com.google.common.collect.ImmutableSet.<String>of()));
    Assert.assertFalse(actual.getMethodMatcher().matches(MethodMatcher.UNSPECIFIED_ACCESS, "finish", "(B)V", com.google.common.collect.ImmutableSet.<String>of()));
    // test class matching
    Assert.assertEquals(1, actual.getClassMatcher().getClassNames().size());
    Assert.assertEquals("test/CustomExampleTest", actual.getClassMatcher().getClassNames().toArray()[0]);
}
Also used : Extension(com.newrelic.agent.extension.beans.Extension) Pointcut(com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut) ExtensionClassAndMethodMatcher(com.newrelic.agent.instrumentation.custom.ExtensionClassAndMethodMatcher) Instrumentation(com.newrelic.agent.extension.beans.Extension.Instrumentation) Method(com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut.Method) AgentHelper.getFile(com.newrelic.agent.AgentHelper.getFile) File(java.io.File) Test(org.junit.Test)

Aggregations

Pointcut (com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut)22 Test (org.junit.Test)19 Instrumentation (com.newrelic.agent.extension.beans.Extension.Instrumentation)17 Extension (com.newrelic.agent.extension.beans.Extension)16 Method (com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut.Method)12 ExtensionClassAndMethodMatcher (com.newrelic.agent.instrumentation.custom.ExtensionClassAndMethodMatcher)9 HashMap (java.util.HashMap)7 HashSet (java.util.HashSet)6 MethodParameters (com.newrelic.agent.extension.beans.MethodParameters)4 ArrayList (java.util.ArrayList)4 ClassName (com.newrelic.agent.extension.beans.Extension.Instrumentation.Pointcut.ClassName)2 AgentHelper.getFile (com.newrelic.agent.AgentHelper.getFile)1 XmlException (com.newrelic.agent.extension.util.XmlException)1 ChildClassMatcher (com.newrelic.agent.instrumentation.classmatchers.ChildClassMatcher)1 ClassMatcher (com.newrelic.agent.instrumentation.classmatchers.ClassMatcher)1 ExactClassMatcher (com.newrelic.agent.instrumentation.classmatchers.ExactClassMatcher)1 InterfaceMatcher (com.newrelic.agent.instrumentation.classmatchers.InterfaceMatcher)1 ExactReturnTypeMethodMatcher (com.newrelic.agent.instrumentation.methodmatchers.ExactReturnTypeMethodMatcher)1 File (java.io.File)1