protected void ConnectionHandlerTest(Node node0, Node node1,
ConnectionHandler ch0, ConnectionHandler ch1)
{
Console.WriteLine(node0.Address + " " + node1.Address);
var mdh0 = new MockDataHandler();
var mdh1 = new MockDataHandler();
MemBlock zero = MemBlock.Reference(new byte[] {0});
EventHandler cb = delegate(object o, EventArgs ea) {
Assert.AreEqual(o, zero, "Zero");
};
mdh0.HandleDataCallback += cb;
mdh1.HandleDataCallback += cb;
ch0.Subscribe(mdh0, null);
ch1.Subscribe(mdh1, null);
Assert.AreEqual(mdh0.Count, 0, "MDH0 0");
Assert.AreEqual(mdh1.Count, 0, "MDH1 0");
ch0.ConnectTo(node1.Address);
Assert.IsTrue(AreConnected(node0, node1), "ConnectionHandler ConnectTo");
SimpleTimer.RunSteps(fifteen_mins * 2);
Assert.IsFalse(Simulator.AreConnected(node0, node1));
ch0.Send(node1.Address, zero);
SimpleTimer.RunSteps(fifteen_mins / 60);
Assert.AreEqual(mdh0.Count, 0, "MDH0 1");
Assert.AreEqual(mdh1.Count, 0, "MDH1 1");
Assert.IsTrue(AreConnected(node0, node1), "ConnectionHandler ConnectTo");
SimpleTimer.RunSteps(fifteen_mins / 3);
ch0.Send(node1.Address, zero);
SimpleTimer.RunSteps(fifteen_mins / 60);
Assert.AreEqual(mdh0.Count, 0, "MDH0 2");
Assert.AreEqual(mdh1.Count, 1, "MDH1 2");
Assert.IsTrue(Simulator.AreConnected(node0, node1), "Continuous 0");
SimpleTimer.RunSteps(fifteen_mins / 3);
ch0.Send(node1.Address, zero);
SimpleTimer.RunSteps(fifteen_mins / 60);
Assert.AreEqual(mdh0.Count, 0, "MDH0 3");
Assert.AreEqual(mdh1.Count, 2, "MDH1 3");
Assert.IsTrue(Simulator.AreConnected(node0, node1), "Continuous 1");
SimpleTimer.RunSteps(fifteen_mins / 3);
ch0.Send(node1.Address, zero);
SimpleTimer.RunSteps(fifteen_mins / 60);
Assert.AreEqual(mdh0.Count, 0, "MDH0 4");
Assert.AreEqual(mdh1.Count, 3, "MDH1 4");
Assert.IsTrue(Simulator.AreConnected(node0, node1), "Continuous 2");
SimpleTimer.RunSteps(fifteen_mins / 3);
ch1.Send(node0.Address, zero);
SimpleTimer.RunSteps(fifteen_mins / 60);
Assert.AreEqual(mdh0.Count, 1, "MDH0 5");
Assert.AreEqual(mdh1.Count, 3, "MDH1 5");
Assert.IsTrue(Simulator.AreConnected(node0, node1), "Continuous 3");
SimpleTimer.RunSteps(fifteen_mins * 2);
Assert.IsFalse(Simulator.AreConnected(node0, node1), "Dead");
Assert.AreEqual(mdh0.Count, 1, "MDH0 6");
Assert.AreEqual(mdh1.Count, 3, "MDH1 6");
}