public void NodeReplaceTest() { int nodeCount = 0; Bucket b = new Bucket(); for (int i = 0; i < Bucket.MaxCapacity; i++) { Node n = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Any, i)); n.Seen(); b.Add(n); } b.Nodes[3].Seen(TimeSpan.FromDays(5)); b.Nodes[1].Seen(TimeSpan.FromDays(4)); b.Nodes[5].Seen(TimeSpan.FromDays(3)); listener.MessageSent += (message, endpoint) => { b.Nodes.Sort((l, r) => l.LastSeen.CompareTo(r.LastSeen)); if ((endpoint.Port == 3 && nodeCount == 0) || (endpoint.Port == 1 && nodeCount == 1) || (endpoint.Port == 5 && nodeCount == 2)) { Node n = b.Nodes.Find(delegate(Node no) { return(no.EndPoint.Port == endpoint.Port); }); n.Seen(); PingResponse response = new PingResponse(n.Id, message.TransactionId); listener.RaiseMessageReceived(response, node.EndPoint); nodeCount++; } }; ReplaceNodeTask task = new ReplaceNodeTask(engine, b, null); Assert.IsTrue(task.Execute().Wait(4000), "#10"); }
public void ReplaceNodeTest() { engine.TimeOut = TimeSpan.FromMilliseconds(25); Node replacement = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Loopback, 1337)); for (int i = 0; i < 4; i++) { Node node = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Any, i)); node.LastSeen = DateTime.UtcNow.AddMinutes(-i); engine.RoutingTable.Add(node); } Node nodeToReplace = engine.RoutingTable.Buckets[0].Nodes[3]; ReplaceNodeTask task = new ReplaceNodeTask(engine, engine.RoutingTable.Buckets[0], replacement); task.Completed += delegate { handle.Set(); }; task.Execute(); #if NETSTANDARD1_5 Assert.True(handle.WaitOne(1000), "#a"); #else Assert.True(handle.WaitOne(1000, true), "#a"); #endif Assert.False(engine.RoutingTable.Buckets[0].Nodes.Contains(nodeToReplace), "#1"); Assert.True(engine.RoutingTable.Buckets[0].Nodes.Contains(replacement), "#2"); }
public async Task NodeReplaceTest() { int nodeCount = 0; Bucket b = new Bucket(); for (int i = 0; i < Bucket.MaxCapacity; i++) { Node n = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Any, i)); n.Seen(); b.Add(n); } b.Nodes[3].Seen(TimeSpan.FromDays(5)); b.Nodes[1].Seen(TimeSpan.FromDays(4)); b.Nodes[5].Seen(TimeSpan.FromDays(3)); listener.MessageSent += (data, endpoint) => { engine.MessageLoop.DhtMessageFactory.TryDecodeMessage(BEncodedValue.Decode <BEncodedDictionary> (data), out DhtMessage message); b.Nodes.Sort((l, r) => l.LastSeen.CompareTo(r.LastSeen)); if ((endpoint.Port == 3 && nodeCount == 0) || (endpoint.Port == 1 && nodeCount == 1) || (endpoint.Port == 5 && nodeCount == 2)) { Node n = b.Nodes.Find(no => no.EndPoint.Port == endpoint.Port); n.Seen(); PingResponse response = new PingResponse(n.Id, message.TransactionId); listener.RaiseMessageReceived(response, node.EndPoint); nodeCount++; } }; ReplaceNodeTask task = new ReplaceNodeTask(engine, b, null); await task.Execute().WithTimeout(4000); }
public void NodeReplaceTest() { engine.TimeOut = TimeSpan.FromMilliseconds(25); ManualResetEvent handle = new ManualResetEvent(false); Bucket b = new Bucket(); for (int i = 0; i < Bucket.MaxCapacity; i++) { Node n = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Any, i)); n.LastSeen = DateTime.UtcNow; b.Add(n); } b.Nodes[3].LastSeen = DateTime.UtcNow.AddDays(-5); b.Nodes[1].LastSeen = DateTime.UtcNow.AddDays(-4); b.Nodes[5].LastSeen = DateTime.UtcNow.AddDays(-3); engine.MessageLoop.QuerySent += delegate(object o, SendQueryEventArgs e) { if (!e.TimedOut) { return; } b.Nodes.Sort(); if ((e.EndPoint.Port == 3 && nodeCount == 0) || (e.EndPoint.Port == 1 && nodeCount == 1) || (e.EndPoint.Port == 5 && nodeCount == 2)) { Node n = b.Nodes.Find(delegate(Node no) { return(no.EndPoint.Port == e.EndPoint.Port); }); n.Seen(); PingResponse response = new PingResponse(n.Id, e.Query.TransactionId); DhtEngine.MainLoop.Queue(delegate { //System.Threading.Thread.Sleep(100); Console.WriteLine("Faking the receive"); listener.RaiseMessageReceived(response, node.EndPoint); }); nodeCount++; } }; ReplaceNodeTask task = new ReplaceNodeTask(engine, b, null); // FIXME: Need to assert that node 0.0.0.0:0 is the one which failed - i.e. it should be replaced task.Completed += delegate(object o, TaskCompleteEventArgs e) { handle.Set(); }; task.Execute(); #if NETSTANDARD1_5 Assert.True(handle.WaitOne(4000), "#10"); #else Assert.True(handle.WaitOne(4000, false), "#10"); #endif }
public void ReplaceNodeTest() { engine.TimeOut = TimeSpan.FromMilliseconds(25); Node replacement = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Loopback, 1337)); for (int i = 0; i < 4; i++) { Node node = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Any, i)); node.LastSeen = DateTime.UtcNow.AddMinutes(-i); engine.RoutingTable.Add(node); } Node nodeToReplace = engine.RoutingTable.Buckets[0].Nodes[3]; ReplaceNodeTask task = new ReplaceNodeTask(engine, engine.RoutingTable.Buckets[0], replacement); Assert.IsTrue(task.Execute().Wait(1000), "#a"); Assert.IsFalse(engine.RoutingTable.Buckets[0].Nodes.Contains(nodeToReplace), "#1"); Assert.IsTrue(engine.RoutingTable.Buckets[0].Nodes.Contains(replacement), "#2"); }
public void ReplaceNodeTest() { engine.MessageLoop.Timeout = TimeSpan.FromMilliseconds(0); Node replacement = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Loopback, 1337)); for (int i = 0; i < 4; i++) { var n = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Any, i)); n.Seen(TimeSpan.FromDays(i)); engine.RoutingTable.Add(n); } Node nodeToReplace = engine.RoutingTable.Buckets[0].Nodes[3]; ReplaceNodeTask task = new ReplaceNodeTask(engine, engine.RoutingTable.Buckets[0], replacement); Assert.IsTrue(task.Execute().Wait(1000), "#a"); Assert.IsFalse(engine.RoutingTable.Buckets[0].Nodes.Contains(nodeToReplace), "#1"); Assert.IsTrue(engine.RoutingTable.Buckets[0].Nodes.Contains(replacement), "#2"); }
public void ReplaceNodeTest() { _engine.TimeOut = TimeSpan.FromMilliseconds(25); var replacement = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Loopback, 1337)); for (var i = 0; i < 4; i++) { var node = new Node(NodeId.Create(), new IPEndPoint(IPAddress.Any, i)) { LastSeen = DateTime.UtcNow.AddMinutes(-i) }; _engine.RoutingTable.Add(node); } var nodeToReplace = _engine.RoutingTable.Buckets[0].Nodes[3]; var task = new ReplaceNodeTask(_engine, _engine.RoutingTable.Buckets[0], replacement); task.Completed += (sender, args) => _handle.Set(); task.Execute(); Assert.IsTrue(_handle.WaitOne(1000, true), "#a"); Assert.IsFalse(_engine.RoutingTable.Buckets[0].Nodes.Contains(nodeToReplace), "#1"); Assert.IsTrue(_engine.RoutingTable.Buckets[0].Nodes.Contains(replacement), "#2"); }