package ngs.architecture;
import ngs.architecture.TestNode;
import ngs.*;
import java.awt.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import junit.framework.JUnit4TestAdapter;
import org.junit.Test;
import org.junit.Before;
import org.junit.After;
public class ALRTest
{
private ALR alr = null;
private class TestALR extends ALR
{
/**
* Constructor with no topology.
*/
public TestALR()
{
super(null);
}
/**
* Constructor with topology.
*
* @param topology network topology.
*/
public TestALR(final Topology topology)
{
super(topology);
}
public void sendMessage(final Node receiver,
final Message message) throws Exception
{
super.sendMessage(receiver, message);
}
};
/**
* A node where you can specify the id.
*/
private class TestIDNode extends TestNode
{
private final int id;
public TestIDNode(final int id)
{
super();
this.id = id;
}
public int getID()
{
return id;
}
}
public void setALR(final ALR alr)
{
this.alr = alr;
}
@Test public void sendMessage() throws Exception
{
//if the alr has not been initialised set it up
if (alr == null)
{
//create an anonymous class that extends ALR
alr = new TestALR();
}
//create an anonymous node class
TestNode receiver = new TestNode();
TestNode sender = new TestNode();
GameStateMessage m = new GameStateMessage(0, 0.0, sender, 0, 0);
alr.sendMessage(receiver, m);
//check that it is the same message
GameStateMessage r = (GameStateMessage)receiver.getMessage();
assertTrue(r == m);
//check that the sender is the same
assertEquals(sender, r.getSender());
//check that the delay was increased
assertEquals(1, r.getDelay());
//repeat
alr.sendMessage(receiver, m);
r = (GameStateMessage)receiver.getMessage();
assertTrue(r == m);
assertEquals(2, r.getDelay());
}
@Test public void simpleTopology() throws Exception
{
//create an anonymous class that extends ALR
alr = new TestALR(Topology.create("topologies/testTopology.ser"));
//create an anonymous node class
TestIDNode receiver = new TestIDNode(0);
TestIDNode sender = new TestIDNode(1);
GameStateMessage m = new GameStateMessage(0, 0.0, sender, 0, 0);
alr.sendMessage(receiver, m);
//check that it is the same message
GameStateMessage r = (GameStateMessage)receiver.getMessage();
assertTrue(r == m);
//check that the sender is the same
assertEquals(sender, r.getSender());
//check that the delay was increased
assertEquals(60, r.getDelay());
//repeat
alr.sendMessage(receiver, m);
r = (GameStateMessage)receiver.getMessage();
assertTrue(r == m);
assertEquals(120, r.getDelay());
}
@Test public void simpleTopologyAgain() throws Exception
{
//create an anonymous class that extends ALR
alr = new TestALR(Topology.create("topologies/testTopology.ser"));
//create an anonymous node class
TestIDNode n[] = new TestIDNode[10];
for (int i=0; i<n.length; i++)
{
n[i] = new TestIDNode(i);
}
//send messages to/from the first node
for (int i=1; i<n.length; i++)
{
GameStateMessage m = new GameStateMessage(0, 0.0, n[i], 100, 0);
alr.sendMessage(n[0], m);
m = new GameStateMessage(0, 0.0, n[0], 200, 0);
alr.sendMessage(n[i], m);
}
//check the messages received by the server
assertEquals(160, ((GameStateMessage)n[0].getMessage()).getDelay());
assertEquals(460, ((GameStateMessage)n[0].getMessage()).getDelay());
assertEquals(310, ((GameStateMessage)n[0].getMessage()).getDelay());
assertEquals(160, ((GameStateMessage)n[0].getMessage()).getDelay());
assertEquals(100, ((GameStateMessage)n[0].getMessage()).getDelay());
assertEquals(160, ((GameStateMessage)n[0].getMessage()).getDelay());
assertEquals(460, ((GameStateMessage)n[0].getMessage()).getDelay());
assertEquals(310, ((GameStateMessage)n[0].getMessage()).getDelay());
assertEquals(160, ((GameStateMessage)n[0].getMessage()).getDelay());
//check the messages receved by the nodes
assertEquals(260, ((GameStateMessage)n[1].getMessage()).getDelay());
assertEquals(560, ((GameStateMessage)n[2].getMessage()).getDelay());
assertEquals(410, ((GameStateMessage)n[3].getMessage()).getDelay());
assertEquals(260, ((GameStateMessage)n[4].getMessage()).getDelay());
assertEquals(200, ((GameStateMessage)n[5].getMessage()).getDelay());
assertEquals(260, ((GameStateMessage)n[6].getMessage()).getDelay());
assertEquals(560, ((GameStateMessage)n[7].getMessage()).getDelay());
assertEquals(410, ((GameStateMessage)n[8].getMessage()).getDelay());
assertEquals(260, ((GameStateMessage)n[9].getMessage()).getDelay());
}
public static junit.framework.Test suite()
{
return new JUnit4TestAdapter(ALRTest.class);
}
}