package org.test4j.testng.spring.remote;
import mockit.Mock;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.web.context.support.StaticWebApplicationContext;
import org.test4j.module.spring.annotations.SpringBeanRemote.SpringBeanRemoteType;
import org.test4j.module.spring.remote.RemoteInvokerRegister;
import org.test4j.testng.Test4J;
import org.testng.annotations.Test;
@SuppressWarnings({ "rawtypes" })
@Test(groups = "test4j")
public class RemoteInvokerRegisterTest_OnClient extends Test4J {
@Test
public void testRegisterSpringBeanRemoteOnClient() {
new MockUp<RemoteInvokerRegister>() {
@Mock
public RootBeanDefinition newClientRemoteInvokerBeanDefinition(final String beanID,
final String serviceUrl,
final Class serviceInterface,
SpringBeanRemoteType type) {
want.string(beanID).isEqualTo("hessian/bean");
want.string(serviceUrl).isEqualTo("${springbean.remote.baseurl}/hessian/bean");
want.object(type).isEqualTo(SpringBeanRemoteType.hessian);
return new RootBeanDefinition();
}
};
new MockUp<AbstractApplicationContext>() {
@Mock
public Object getBean(String name) throws BeansException {
want.string(name).isEqualTo("hessian/bean");
return null;
}
};
RemoteInvokerRegister.registerSpringBeanRemoteOnClient(new DefaultListableBeanFactory(),
RemoteInvokerRegisterTest_OnClientHelper.DefaultRegister.class);
RemoteInvokerRegister.injectSpringBeanRemote(new StaticWebApplicationContext(),
new RemoteInvokerRegisterTest_OnClientHelper.DefaultRegister());
}
@Test
public void testRegisterSpringBeanRemoteOnClient_HessianUrl() {
new MockUp<RemoteInvokerRegister>() {
@Mock
public RootBeanDefinition newClientRemoteInvokerBeanDefinition(final String beanID,
final String serviceUrl,
final Class serviceInterface,
SpringBeanRemoteType type) {
want.string(beanID).isEqualTo("hessian/bean");
want.string(serviceUrl).isEqualTo("${springbean.remote.baseurl}/hessian/bean");
want.object(type).isEqualTo(SpringBeanRemoteType.hessian);
return new RootBeanDefinition();
}
};
new MockUp<AbstractApplicationContext>() {
@Mock
public Object getBean(String name) throws BeansException {
want.string(name).isEqualTo("hessian/bean");
return null;
}
};
RemoteInvokerRegister.registerSpringBeanRemoteOnClient(new DefaultListableBeanFactory(),
RemoteInvokerRegisterTest_OnClientHelper.RegisterHessian.class);
RemoteInvokerRegister.injectSpringBeanRemote(new StaticWebApplicationContext(),
new RemoteInvokerRegisterTest_OnClientHelper.RegisterHessian());
}
@Test
public void testRegisterSpringBeanRemoteOnClient_RegisterHttpInvokerURL() {
new MockUp<RemoteInvokerRegister>() {
@Mock
public RootBeanDefinition newClientRemoteInvokerBeanDefinition(final String beanID,
final String serviceUrl,
final Class serviceInterface,
SpringBeanRemoteType type) {
want.string(beanID).isEqualTo("httpinvoker/bean");
want.string(serviceUrl).isEqualTo("${springbean.remote.baseurl}/httpinvoker/bean");
want.object(type).isEqualTo(SpringBeanRemoteType.httpinvoker);
return new RootBeanDefinition();
}
};
new MockUp<AbstractApplicationContext>() {
@Mock
public Object getBean(String name) throws BeansException {
want.string(name).isEqualTo("httpinvoker/bean");
return null;
}
};
RemoteInvokerRegister.registerSpringBeanRemoteOnClient(new DefaultListableBeanFactory(),
RemoteInvokerRegisterTest_OnClientHelper.RegisterHttpInvoker.class);
RemoteInvokerRegister.injectSpringBeanRemote(new StaticWebApplicationContext(),
new RemoteInvokerRegisterTest_OnClientHelper.RegisterHttpInvoker());
}
@Test
public void testRegisterSpringBeanRemoteOnClient_RegisterBoth() {
final boolean[] newBean_visited = new boolean[] { false, false };
final boolean[] getBean_Visited = new boolean[] { false, false };
new MockUp<RemoteInvokerRegister>() {
@Mock
public RootBeanDefinition newClientRemoteInvokerBeanDefinition(final String beanID,
final String serviceUrl,
final Class serviceInterface,
SpringBeanRemoteType type) {
if (beanID.equals("httpinvoker/bean")) {
newBean_visited[0] = true;
want.string(serviceUrl).isEqualTo("${springbean.remote.baseurl}/httpinvoker/bean");
want.object(type).isEqualTo(SpringBeanRemoteType.httpinvoker);
} else if (beanID.equals("hessian/bean")) {
newBean_visited[1] = true;
want.string(serviceUrl).isEqualTo("${springbean.remote.baseurl}/hessian/bean");
want.object(type).isEqualTo(SpringBeanRemoteType.hessian);
}
return new RootBeanDefinition();
}
};
new MockUp<AbstractApplicationContext>() {
@Mock
public Object getBean(String name) throws BeansException {
if (name.equals("httpinvoker/bean")) {
getBean_Visited[0] = true;
} else if (name.equals("hessian/bean")) {
getBean_Visited[1] = true;
}
return null;
}
};
RemoteInvokerRegister.registerSpringBeanRemoteOnClient(new DefaultListableBeanFactory(),
RemoteInvokerRegisterTest_OnClientHelper.RegisterBoth.class);
RemoteInvokerRegister.injectSpringBeanRemote(new StaticWebApplicationContext(),
new RemoteInvokerRegisterTest_OnClientHelper.RegisterBoth());
want.array(newBean_visited).isEqualTo(new Boolean[] { true, true });
want.array(getBean_Visited).isEqualTo(new Boolean[] { true, true });
}
}