public async Task ProcessFindNodeMessage_NoOtherPeers() { var swarm = new SwarmService { LocalPeer = self }; var dht = new DhtService { SwarmService = swarm }; await dht.StartAsync(); try { var request = new DhtMessage { Type = MessageType.FindNode, Key = new MultiHash("QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1h").ToArray() }; var response = dht.ProcessFindNode(request, new DhtMessage()); Assert.AreEqual(0, response.CloserPeers.Length); } finally { await dht.StopAsync(); } }
public async Task ProcessFindNodeMessage_BadNodeId() { var swarm = new SwarmService { LocalPeer = self }; swarm.RegisterPeerAddress("/ip4/127.0.0.1/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1a"); swarm.RegisterPeerAddress("/ip4/127.0.0.2/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1b"); swarm.RegisterPeerAddress("/ip4/127.0.0.3/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1c"); swarm.RegisterPeerAddress("/ip4/127.0.0.4/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1d"); swarm.RegisterPeerAddress("/ip4/127.0.0.5/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1e"); var dht = new DhtService { SwarmService = swarm, CloserPeerCount = 3 }; await dht.StartAsync(); try { dht.RoutingTable.Add(other); var request = new DhtMessage { Type = MessageType.FindNode, Key = new byte[] { 0xFF, 1, 2, 3 } }; var response = dht.ProcessFindNode(request, new DhtMessage()); Assert.AreEqual(3, response.CloserPeers.Length); } finally { await dht.StopAsync(); } }
public async Task ProcessFindNodeMessage_InRoutingTable() { var swarm = new SwarmService { LocalPeer = self }; var dht = new DhtService { SwarmService = swarm }; await dht.StartAsync(); try { dht.RoutingTable.Add(other); var request = new DhtMessage { Type = MessageType.FindNode, Key = other.Id.ToArray() }; var response = dht.ProcessFindNode(request, new DhtMessage()); Assert.AreEqual(1, response.CloserPeers.Length); var ok = response.CloserPeers[0].TryToPeer(out var found); Assert.IsTrue(ok); Assert.AreEqual(other, found); CollectionAssert.AreEqual(other.Addresses.ToArray(), found.Addresses.Select(a => a.WithoutPeerId()).ToArray()); } finally { await dht.StopAsync(); } }
public async Task ProcessFindNodeMessage_InSwarm() { var swarmA = new SwarmService { LocalPeer = self }; var swarmB = swarmA.RegisterPeerAddress( "/ip4/127.0.0.1/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1h"); var dht = new DhtService { SwarmService = swarmA }; await dht.StartAsync(); try { dht.RoutingTable.Add(swarmB); var request = new DhtMessage { Type = MessageType.FindNode, Key = swarmB.Id.ToArray() }; var response = dht.ProcessFindNode(request, new DhtMessage()); Assert.AreEqual(1, response.CloserPeers.Length); var ok = response.CloserPeers[0].TryToPeer(out var found); Assert.IsTrue(ok); Assert.AreEqual(swarmB, found); CollectionAssert.AreEqual( swarmB.Addresses.Select(a => a.WithoutPeerId()).ToArray(), found.Addresses.Select(a => a.WithoutPeerId()).ToArray()); } finally { await dht.StopAsync(); } }
public async Task ProcessFindNodeMessage_Self() { var swarm = new SwarmService { LocalPeer = self }; var dht = new DhtService { SwarmService = swarm }; await dht.StartAsync(); try { var request = new DhtMessage { Type = MessageType.FindNode, Key = self.Id.ToArray() }; var response = dht.ProcessFindNode(request, new DhtMessage()); Assert.AreEqual(1, response.CloserPeers.Length); var ok = response.CloserPeers[0].TryToPeer(out var found); Assert.IsTrue(ok); Assert.AreEqual(self, found); } finally { await dht.StopAsync(); } }