@Test public void testProxyInstanceofCheck() { Object proxy = linker.createProxy(CorrectProxySubject.class, new CorrectProxySubject(), fakeRootLoader); assertThat(linker.isProxyInstance(proxy, CorrectProxySubject.class), equalTo(true)); assertThat(linker.isProxyInstance(new Object(), CorrectProxySubject.class), equalTo(false)); assertThat(linker.isProxyInstance(null, CorrectProxySubject.class), equalTo(false)); }
context = getActualClassLoader(context); Class<?> proxyClazz = Class.forName(getProxyClassName(subjectType.getName()), false, context); ClassLoader owner = proxyClazz.getClassLoader(); owner = getActualClassLoader(owner); String name = getProxyClassName(subjectType.getName()); IProxyBuildPlan plan = ProxyBuildPlanImpl.create(subjectType, name, context); Class<?> proxyClazz = Class.forName(name, false, target); ClassLoader owner = proxyClazz.getClassLoader(); owner = getActualClassLoader(owner);
/** * {@inheritDoc} */ @Override public <T extends IProxySubject> boolean isProxyInstance(Object inst, Class<T> proxySubjectType) { if (inst == null) { return false; } ClassLoader context = inst.getClass().getClassLoader(); IProxyClassInfo proxyClass = getProxyClass(proxySubjectType, context, false); if (proxyClass == null) { return false; } else { return proxyClass.getProxyClass().isInstance(inst); } }
@Test public void testProxyInvalidPlanHandling() { // classloader does not contain the required depdendencies Object proxyA = linker.createProxy(CorrectProxySubject.class, new CorrectProxySubject(), this.getClass().getClassLoader()); Object proxyB = linker.createProxy(CorrectProxySubject.class, new CorrectProxySubject(), this.getClass().getClassLoader()); verify(proxyBuilder, times(0)).createProxyClass(any(IProxyBuildPlan.class)); assertThat(proxyA, equalTo(null)); assertThat(proxyB, equalTo(null)); }
@Test public void testProxyCaching() { linker.createProxy(CorrectProxySubject.class, new CorrectProxySubject(), fakeRootLoader); linker.createProxy(CorrectProxySubject.class, new CorrectProxySubject(), fakeRootLoader); verify(proxyBuilder, times(1)).createProxyClass(any(IProxyBuildPlan.class)); }
@Test public void testProxyGenerationErrorHandling() { doReturn(null).when(proxyBuilder).createProxyClass(any(IProxyBuildPlan.class)); Object proxyA = linker.createProxy(CorrectProxySubject.class, new CorrectProxySubject(), fakeRootLoader); Object proxyB = linker.createProxy(CorrectProxySubject.class, new CorrectProxySubject(), fakeRootLoader); verify(proxyBuilder, times(1)).createProxyClass(any(IProxyBuildPlan.class)); assertThat(proxyA, equalTo(null)); assertThat(proxyB, equalTo(null)); }
IProxyClassInfo proxyClassInfo = getProxyClass(proxySubjectType, context, true); if (proxyClassInfo == null) { return null;
@Test public void testProxyParentClassLoaderCaching() { linker.createProxy(CorrectProxySubject.class, new CorrectProxySubject(), fakeRootLoader); linker.createProxy(CorrectProxySubject.class, new CorrectProxySubject(), new ClassLoader(fakeRootLoader) { }); verify(proxyBuilder, times(1)).createProxyClass(any(IProxyBuildPlan.class)); }
@Test public void testProxyInitialization() { CorrectProxySubject proxySubject = spy(new CorrectProxySubject()); Object proxy = linker.createProxy(CorrectProxySubject.class, proxySubject, fakeRootLoader); verify(proxySubject, times(1)).getProxyConstructorArguments(); verify(proxySubject, times(1)).proxyLinked(proxy, linker); }