internal void RemoveFromKademliaWhenRequestTimeout() { var id = KademliaId.RandomId; var ni = new NodeInformation(new IPEndPoint(IPAddress.Loopback, 65432), id); var message = new UdpMessage(); kademlia.HandleIncomingRequest(ni, message); var response = new UdpMessage(); response.ResponseId = message.RequestId; response.SenderNodeId = id; message.ResponseCallback(response); Assert.AreEqual(1, kademlia.CurrentContactCount); // actual test bool noResponse = false; message = new UdpMessage(); message.PingRequest = new PingRequest(); message.ResponseCallback = udpMessage => Assert.Fail("The response callback should not be called in this test"); message.NoResponseCallback = () => noResponse = true; node.SendUdpMessage(message, ni.EndPoint, id); for (int i = 0; i < Node.TimeoutTicks; i++) node.TimerElapsed(); Assert.AreEqual(1, kademlia.CurrentContactCount); for (int i = 0; i < Node.TimeoutTicks; i++) node.TimerElapsed(); Assert.IsTrue(noResponse, "The no-response callback should be called in this test"); Assert.AreEqual(0, kademlia.CurrentContactCount); }
internal void KademliaContactsAfterNewContact() { for (int i = 0; i < 10; i++) { var id = KademliaId.RandomId; var ni = new NodeInformation(new IPEndPoint(i + 1, i + 1), id); var message = new UdpMessage(); kademlia.HandleIncomingRequest(ni, message); Assert.AreEqual(i, kademlia.CurrentContactCount); Assert.IsNotNull(message.PingRequest); var response = new UdpMessage(); response.ResponseId = message.RequestId; response.SenderNodeId = id; message.ResponseCallback(response); Assert.AreEqual(i + 1, kademlia.CurrentContactCount); } }
internal static void RegisterFakeContact(Kademlia kademlia, NodeInformation ni) { var message = new UdpMessage(); kademlia.HandleIncomingRequest(ni, message); if (message.ResponseCallback == null) return; var response = new UdpMessage(); response.ResponseId = message.RequestId; response.SenderNodeId = ni.NodeId; message.ResponseCallback(response); }