public void SendQueryTaskSucceed() { engine.TimeOut = TimeSpan.FromMilliseconds(25); Ping ping = new Ping(engine.LocalId); ping.TransactionId = transactionId; engine.MessageLoop.QuerySent += delegate(object o, SendQueryEventArgs e) { if (e.TimedOut) { counter++; PingResponse response = new PingResponse(node.Id, transactionId); listener.RaiseMessageReceived(response, node.EndPoint); } }; SendQueryTask task = new SendQueryTask(engine, ping, node); task.Completed += delegate { handle.Set(); }; task.Execute(); Assert.IsTrue(handle.WaitOne(3000, false), "#1"); System.Threading.Thread.Sleep(200); Assert.AreEqual(1, counter, "#2"); Node n = engine.RoutingTable.FindNode(this.node.Id); Assert.IsNotNull(n, "#3"); Assert.IsTrue(n.LastSeen > DateTime.UtcNow.AddSeconds(-2)); }
public void SendQueryTaskTimeout() { engine.TimeOut = TimeSpan.FromMilliseconds(25); Ping ping = new Ping(engine.LocalId); ping.TransactionId = transactionId; engine.MessageLoop.QuerySent += delegate (object o, SendQueryEventArgs e) { if(e.TimedOut) counter++; }; SendQueryTask task = new SendQueryTask(engine, ping, node); task.Completed += delegate { handle.Set(); }; task.Execute(); Assert.IsTrue(handle.WaitOne(3000, false), "#1"); Assert.AreEqual(task.Retries, counter); }
public void PingTimeout() { engine.TimeOut = TimeSpan.FromHours(1); // Send ping Ping ping = new Ping(node.Id); ping.TransactionId = transactionId; ManualResetEvent handle = new ManualResetEvent(false); SendQueryTask task = new SendQueryTask(engine, ping, node); task.Completed += delegate { handle.Set(); }; task.Execute(); // Receive response PingResponse response = new PingResponse(node.Id, transactionId); listener.RaiseMessageReceived(response, node.EndPoint); Assert.IsTrue(handle.WaitOne(1000, true), "#0"); engine.TimeOut = TimeSpan.FromMilliseconds(75); DateTime lastSeen = node.LastSeen; // Time out a ping ping = new Ping(node.Id); ping.TransactionId = (BEncodedString)"ab"; task = new SendQueryTask(engine, ping, node, 4); task.Completed += delegate { handle.Set(); }; handle.Reset(); task.Execute(); handle.WaitOne(); Assert.AreEqual(4, node.FailedCount, "#1"); Assert.AreEqual(NodeState.Bad, node.State, "#2"); Assert.AreEqual(lastSeen, node.LastSeen, "#3"); }
public void PingEncode() { Ping m = new Ping(id); m.TransactionId = transactionId; Compare(m, "d1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qe"); message = m; }