package org.distributeme.core.routing;
import net.anotheria.util.IdCodeGenerator;
import org.distributeme.core.ClientSideCallContext;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Random;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@SuppressWarnings({"unchecked","rawtypes"})
public class ParameterBasedModRouterTest {
@Test public void testInteger(){
ParameterBasedModRouter router = new ParameterBasedModRouter();
router.customize("2,0");
Random rnd = new Random(System.currentTimeMillis());
for (int i = 0; i<50; i++){
int numberOfParameter = rnd.nextInt(5)+1;
ArrayList parameters = new ArrayList(numberOfParameter);
for (int t=0; t<numberOfParameter; t++){
parameters.add(new Integer(rnd.nextInt(100)));
}
int modParameter = (Integer)parameters.get(0);
String serviceId = IdCodeGenerator.generateCode(10);
String sidReply = router.getServiceIdForCall(new ClientSideCallContext(serviceId, null, parameters));
assertEquals(sidReply, serviceId+"_"+(modParameter%2));
}
}
@Test public void testLong(){
ParameterBasedModRouter router = new ParameterBasedModRouter();
router.customize("2,0");
Random rnd = new Random(System.currentTimeMillis());
ArrayList parameters = new ArrayList();
parameters.add(new Long(rnd.nextInt(100)));
parameters.add(new Long(rnd.nextInt(100)));
parameters.add(new Long(rnd.nextInt(100)));
ClientSideCallContext context = new ClientSideCallContext("bla");
context.setServiceId("foo");
context.setParameters(parameters);
parameters.set(0, 1L);
assertEquals("foo_1", router.getServiceIdForCall(context));
parameters.set(0, 2L);
assertEquals("foo_0", router.getServiceIdForCall(context));
parameters.set(0, 3L);
assertEquals("foo_1", router.getServiceIdForCall(context));
parameters.set(0, 4L);
assertEquals("foo_0", router.getServiceIdForCall(context));
parameters.set(0, 0L);
assertEquals("foo_0", router.getServiceIdForCall(context));
}
@Test public void testBoolean(){
ParameterBasedModRouter router = new ParameterBasedModRouter();
router.customize("2,0");
ArrayList parameters = new ArrayList();
String serviceId = "foo";
parameters.add(Boolean.TRUE);
assertEquals("foo_0", router.getServiceIdForCall(new ClientSideCallContext(serviceId, "bla", parameters)));
parameters.set(0, Boolean.FALSE);
assertEquals("foo_1", router.getServiceIdForCall(new ClientSideCallContext(serviceId, "bla", parameters)));
}
@Test public void testForInsufficentParameters(){
ParameterBasedModRouter router = new ParameterBasedModRouter();
router.customize("2,3");
ArrayList p = new ArrayList();
try{
router.getServiceIdForCall(new ClientSideCallContext("foo", "bar", p));
fail("AssertionError expected");
}catch(AssertionError e){
}
}
@Test public void testForErrorsInCustomize(){
ParameterBasedModRouter router = new ParameterBasedModRouter();
try{
router.customize(null);
fail("Exception expected");
}catch(AssertionError e){}
try{
router.customize("");
fail("Exception expected");
}catch(AssertionError e){}
try{
router.customize("abc");
fail("Exception expected");
}catch(AssertionError e){}
try{
router.customize("a,b");
fail("Exception expected");
}catch(AssertionError e){}
try{
router.customize("1,b");
fail("Exception expected");
}catch(AssertionError e){}
try{
router.customize("b,1");
fail("Exception expected");
}catch(AssertionError e){}
//this one should work
router.customize("1,1");
}
@Test public void testForErrorsIngetServiceIdForCall(){
ParameterBasedModRouter router = new ParameterBasedModRouter();
router.customize("2,3");
try{
ArrayList p = new ArrayList();
p.add(null);
router.getServiceIdForCall(new ClientSideCallContext("foo", "bar", p));
fail("AssertionError expected");
}catch(AssertionError e){
}
try{
ArrayList p = new ArrayList();
p.add(new String("foo"));
router.getServiceIdForCall(new ClientSideCallContext("foo", "bar", p));
fail("AssertionError expected");
}catch(AssertionError e){
}
}
@Test public void testForNull(){
ParameterBasedModRouter router = new ParameterBasedModRouter();
router.customize("2,0");
ArrayList<Object> list = new ArrayList<Object>();
list.add(null);
try{
router.getServiceIdForCall(new ClientSideCallContext("foo", "bar", list));
fail("Exception expected");
}catch(AssertionError e){
}
}
@Test public void testForUnsupported(){
ParameterBasedModRouter router = new ParameterBasedModRouter();
router.customize("2,0");
ArrayList<Object> list = new ArrayList<Object>();
list.add(new ArrayList<Object>());//arraylist itself is not a supported argument type
try{
router.getServiceIdForCall(new ClientSideCallContext("foo", "bar", list));
fail("Exception expected");
}catch(AssertionError e){
}
}
}