package org.dcache.tests.util;
import org.junit.Before;
import org.junit.Test;
import java.io.Serializable;
import diskCacheV111.util.CacheException;
import dmg.cells.nucleus.CellAddressCore;
import dmg.cells.nucleus.CellMessage;
import dmg.cells.nucleus.CellPath;
import org.dcache.cells.CellMessageDispatcher;
import dmg.cells.nucleus.CellMessageReceiver;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class CellMessageDispatcherTest
{
private CellMessageDispatcher dispatcher;
private Listener1 listener1;
private Listener2 listener2;
Serializable message1 = new Message1();
Serializable message2 = new Message2();
Serializable message3 = new Message3();
Serializable message4 = new Message4();
Serializable message5 = new Message5();
Serializable message6 = new Message6();
Serializable message7 = new Message7();
Serializable message8 = new Message8();
Serializable message9 = new Message9();
class Message1 implements Serializable {}
class Message2 implements Serializable {}
class Message3 implements Serializable {}
class Message4 implements Serializable {}
class Message5 extends Message4 {}
class Message6 implements Serializable {}
class Message7 implements Serializable {}
class Message8 implements Serializable {}
class Message9 implements Serializable {}
public class Listener1 implements CellMessageReceiver
{
int delivered;
public void messageArrived(Message1 o)
{
assertEquals(delivered, 0);
delivered = 1;
}
public void messageArrived(Message3 o)
{
assertEquals(delivered, 0);
delivered = 3;
}
public void messageArrived(Message4 o)
{
assertEquals(delivered, 0);
delivered = 4;
}
public void messageArrived(Message5 o)
{
assertEquals(delivered, 0);
delivered = 5;
}
public int messageArrived(Message6 o)
{
assertEquals(delivered, 0);
delivered = 6;
return 0;
}
public int messageArrived(Message7 o)
{
assertEquals(delivered, 0);
delivered = 7;
return 0;
}
public void messageArrived(Message8 o)
throws CacheException
{
assertEquals(delivered, 0);
delivered = 8;
throw new CacheException(0, "bla");
}
public void messageArrived(Message9 o)
throws CacheException
{
assertEquals(delivered, 0);
delivered = 9;
throw new CacheException(0, "bla");
}
}
public class Listener2 implements CellMessageReceiver
{
int delivered;
public void messageArrived(Message3 o)
{
assertEquals(delivered, 0);
delivered = 3;
}
public void messageArrived(Message4 o)
{
assertEquals(delivered, 0);
delivered = 4;
}
public void messageArrived(Message6 o)
{
assertEquals(delivered, 0);
delivered = 6;
}
public int messageArrived(Message7 o)
{
assertEquals(delivered, 0);
delivered = 7;
return 0;
}
public void messageArrived(Message9 o)
throws CacheException
{
assertEquals(delivered, 0);
delivered = 9;
throw new CacheException(0, "bla");
}
}
@Before
public void setUp()
{
dispatcher = new CellMessageDispatcher("messageArrived");
listener1 = new Listener1();
listener2 = new Listener2();
dispatcher.addMessageListener(listener1);
dispatcher.addMessageListener(listener2);
}
private Object deliver(Serializable msg, int result1, int result2)
{
try {
return
dispatcher.call(new CellMessage(new CellAddressCore("test"), msg));
} finally {
assertEquals(listener1.delivered, result1);
assertEquals(listener2.delivered, result2);
}
}
@Test
public void testDeliverMessage()
{
Object o = deliver(message1, 1, 0);
assertEquals(o, null);
}
@Test
public void testDeliverMessageNoReceiver()
{
Object o = deliver(message2, 0, 0);
assertEquals(o, null);
}
@Test
public void testDeliverMessageMultipleReceivers()
{
Object o = deliver(message3, 3, 3);
assertEquals(o, null);
}
@Test
public void testDeliverMostSpecific()
{
Object o = deliver(message5, 5, 4);
assertEquals(o, null);
}
@Test
public void testReturnValue()
{
Object o = deliver(message6, 6, 6);
assertEquals(0, o);
}
@Test(expected=RuntimeException.class)
public void testMultipleReturnValues()
{
Object o = deliver(message7, 7, 7);
assertEquals(o, null);
}
@Test
public void testExceptionReturned()
{
Object o = deliver(message8, 8, 0);
assertTrue(o instanceof CacheException);
}
@Test(expected=RuntimeException.class)
public void testMultipleExceptions()
{
deliver(message9, 9, 9);
}
}