use of java.lang.instrument.ClassFileTransformer in project jetty.project by eclipse.
the class WebAppClassLoaderTest method testNullClassFileTransformer.
@Test
public void testNullClassFileTransformer() throws Exception {
_loader.addTransformer(new ClassFileTransformer() {
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
return null;
}
});
assertCanLoadClass("org.acme.webapp.ClassInJarA");
}
use of java.lang.instrument.ClassFileTransformer in project byte-buddy by raphw.
the class AgentBuilderLambdaInstrumentationStrategyTest method testEnabledStrategyNeverThrowsException.
@Test
public void testEnabledStrategyNeverThrowsException() throws Exception {
ClassFileTransformer initialClassFileTransformer = mock(ClassFileTransformer.class);
assertThat(LambdaFactory.register(initialClassFileTransformer, mock(AgentBuilder.Default.LambdaInstrumentationStrategy.LambdaInstanceFactory.class)), is(true));
try {
ByteBuddy byteBuddy = mock(ByteBuddy.class);
Instrumentation instrumentation = mock(Instrumentation.class);
ClassFileTransformer classFileTransformer = mock(ClassFileTransformer.class);
try {
AgentBuilder.Default.LambdaInstrumentationStrategy.ENABLED.apply(byteBuddy, instrumentation, classFileTransformer);
} finally {
assertThat(LambdaFactory.release(classFileTransformer), is(false));
}
} finally {
assertThat(LambdaFactory.release(initialClassFileTransformer), is(true));
}
}
use of java.lang.instrument.ClassFileTransformer in project byte-buddy by raphw.
the class AgentBuilderDefaultApplicationRedefineTest method testRetransformation.
@Test
@AgentAttachmentRule.Enforce(retransformsClasses = true)
@IntegrationRule.Enforce
public void testRetransformation() throws Exception {
// A redefinition reflects on loaded types which are eagerly validated types (Java 7- for redefinition).
// This causes type equality for outer/inner classes to fail which is why an external class is used.
assertThat(ByteBuddyAgent.install(), instanceOf(Instrumentation.class));
// ensure that class is loaded
assertThat(simpleTypeLoader.loadClass(SimpleType.class.getName()).getName(), is(SimpleType.class.getName()));
ClassFileTransformer classFileTransformer = new AgentBuilder.Default().ignore(none()).disableClassFormatChanges().with(AgentBuilder.RedefinitionStrategy.REDEFINITION).with(descriptionStrategy).type(ElementMatchers.is(SimpleType.class), ElementMatchers.is(simpleTypeLoader)).transform(new FooTransformer()).installOnByteBuddyAgent();
try {
Class<?> type = simpleTypeLoader.loadClass(SimpleType.class.getName());
assertThat(type.getDeclaredMethod(FOO).invoke(type.getDeclaredConstructor().newInstance()), is((Object) BAR));
} finally {
ByteBuddyAgent.getInstrumentation().removeTransformer(classFileTransformer);
}
}
use of java.lang.instrument.ClassFileTransformer in project byte-buddy by raphw.
the class AgentBuilderDefaultApplicationRedefineTest method testRetransformationOptionalType.
@Test
@AgentAttachmentRule.Enforce(retransformsClasses = true)
@IntegrationRule.Enforce
public void testRetransformationOptionalType() throws Exception {
// A redefinition reflects on loaded types which are eagerly validated types (Java 7- for redefinition).
// This causes type equality for outer/inner classes to fail which is why an external class is used.
assertThat(ByteBuddyAgent.install(), instanceOf(Instrumentation.class));
// ensure that class is loaded
assertThat(optionalTypeLoader.loadClass(SimpleOptionalType.class.getName()).getName(), is(SimpleOptionalType.class.getName()));
ClassFileTransformer classFileTransformer = new AgentBuilder.Default(new ByteBuddy().with(TypeValidation.DISABLED)).ignore(none()).disableClassFormatChanges().with(AgentBuilder.RedefinitionStrategy.REDEFINITION).with(descriptionStrategy).type(ElementMatchers.is(SimpleOptionalType.class), ElementMatchers.is(optionalTypeLoader)).transform(new FooTransformer()).installOnByteBuddyAgent();
try {
Class<?> type = optionalTypeLoader.loadClass(SimpleOptionalType.class.getName());
// The hybrid strategy cannot transform optional types.
assertThat(type.getDeclaredMethod(FOO).invoke(type.getDeclaredConstructor().newInstance()), is((Object) BAR));
} finally {
ByteBuddyAgent.getInstrumentation().removeTransformer(classFileTransformer);
}
}
use of java.lang.instrument.ClassFileTransformer in project byte-buddy by raphw.
the class AgentBuilderDefaultApplicationResubmissionTest method testResubmission.
@Test
@AgentAttachmentRule.Enforce(retransformsClasses = true)
@IntegrationRule.Enforce
public void testResubmission() throws Exception {
// A redefinition reflects on loaded types which are eagerly validated types (Java 7- for redefinition).
// This causes type equality for outer/inner classes to fail which is why an external class is used.
final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
try {
assertThat(ByteBuddyAgent.install(), instanceOf(Instrumentation.class));
ClassFileTransformer classFileTransformer = new AgentBuilder.Default(new ByteBuddy().with(TypeValidation.DISABLED)).ignore(none()).disableClassFormatChanges().with(AgentBuilder.LocationStrategy.NoOp.INSTANCE).with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION).withResubmission(new AgentBuilder.RedefinitionStrategy.ResubmissionScheduler() {
@Override
public boolean isAlive() {
return true;
}
@Override
public Cancelable schedule(final Runnable job) {
return new Cancelable.ForFuture(scheduledExecutorService.scheduleWithFixedDelay(job, TIMEOUT, TIMEOUT, TimeUnit.SECONDS));
}
}).type(ElementMatchers.is(Foo.class), ElementMatchers.is(classLoader)).transform(new FooTransformer()).installOnByteBuddyAgent();
try {
Class<?> type = classLoader.loadClass(Foo.class.getName());
Thread.sleep(TimeUnit.SECONDS.toMillis(TIMEOUT * 3));
assertThat(type.getDeclaredMethod(FOO).invoke(type.getDeclaredConstructor().newInstance()), is((Object) FOO));
} finally {
ByteBuddyAgent.getInstrumentation().removeTransformer(classFileTransformer);
}
} finally {
scheduledExecutorService.shutdown();
}
}
Aggregations