38 lines
1.1 KiB
Java
38 lines
1.1 KiB
Java
package datadog.trace.agent;
|
|
|
|
import static datadog.trace.agent.test.TestUtils.createJarWithClasses;
|
|
|
|
import datadog.trace.api.Trace;
|
|
import java.net.URL;
|
|
import java.net.URLClassLoader;
|
|
import org.junit.Assert;
|
|
import org.junit.Test;
|
|
|
|
public class ClassLoaderTest {
|
|
|
|
/** Assert that we can instrument classloaders which cannot resolve agent advice classes. */
|
|
@Test
|
|
public void instrumentClassLoadersWithoutAgentClasses() throws Exception {
|
|
final URL[] classpath = new URL[] {createJarWithClasses(ClassToInstrument.class, Trace.class)};
|
|
final URLClassLoader loader = new URLClassLoader(classpath, null);
|
|
|
|
try {
|
|
loader.loadClass("datadog.agent.TracingAgent");
|
|
Assert.fail("loader should not see agent classes.");
|
|
} catch (final ClassNotFoundException cnfe) {
|
|
// Good. loader can't see agent classes.
|
|
}
|
|
|
|
final Class<?> instrumentedClass = loader.loadClass(ClassToInstrument.class.getName());
|
|
Assert.assertEquals(
|
|
"Class must be loaded by loader.", loader, instrumentedClass.getClassLoader());
|
|
|
|
loader.close();
|
|
}
|
|
|
|
public static class ClassToInstrument {
|
|
@Trace
|
|
public static void someMethod() {}
|
|
}
|
|
}
|