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 void NewPeerAddress_Duplicate() { var swarm = new SwarmService { LocalPeer = _self }; swarm.RegisterPeerAddress(_mars); Assert.AreEqual(1, swarm.KnownPeerAddresses.Count()); swarm.RegisterPeerAddress(_mars); Assert.AreEqual(1, swarm.KnownPeerAddresses.Count()); }
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 void NewPeerAddress_Self() { var swarm = new SwarmService { LocalPeer = _self }; var selfAddress = "/ip4/178.62.158.247/tcp/4001/ipfs/" + _self.Id; ExceptionAssert.Throws <Exception>(() => { var _ = swarm.RegisterPeerAddress(selfAddress); }); selfAddress = "/ip4/178.62.158.247/tcp/4001/p2p/" + _self.Id; ExceptionAssert.Throws <Exception>(() => { var _ = swarm.RegisterPeerAddress(selfAddress); }); }
public void NewPeerAddress() { var swarm = new SwarmService { LocalPeer = _self }; swarm.RegisterPeerAddress(_mars); Assert.IsTrue(swarm.KnownPeerAddresses.Contains(_mars)); }
public void KnownPeers() { var swarm = new SwarmService { LocalPeer = _self }; Assert.AreEqual(0, swarm.KnownPeers.Count()); Assert.AreEqual(0, swarm.KnownPeerAddresses.Count()); swarm.RegisterPeerAddress("/ip4/10.1.10.10/tcp/29087/ipfs/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3"); Assert.AreEqual(1, swarm.KnownPeers.Count()); Assert.AreEqual(1, swarm.KnownPeerAddresses.Count()); swarm.RegisterPeerAddress("/ip4/10.1.10.11/tcp/29087/p2p/QmSoLMeWqB7YGVLJN3pNLQpmmEk35v6wYtsMGLzSr5QBU3"); Assert.AreEqual(1, swarm.KnownPeers.Count()); Assert.AreEqual(2, swarm.KnownPeerAddresses.Count()); swarm.RegisterPeerAddress(_venus); Assert.AreEqual(2, swarm.KnownPeers.Count()); Assert.AreEqual(3, swarm.KnownPeerAddresses.Count()); }
public void NewPeerAddress_InvalidAddress_MissingPeerId() { var swarm = new SwarmService { LocalPeer = _self }; ExceptionAssert.Throws <Exception>(() => { var _ = swarm.RegisterPeerAddress("/ip4/10.1.10.10/tcp/29087"); }); Assert.AreEqual(0, swarm.KnownPeerAddresses.Count()); }
public async Task QueryIsCancelled_WhenDhtStops() { var unknownPeer = new MultiHash("QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCxxx"); var swarm = new SwarmService { LocalPeer = self }; swarm.RegisterPeerAddress( "/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd"); swarm.RegisterPeerAddress( "/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64"); var dht = new DhtService { SwarmService = swarm }; await dht.StartAsync(); await dht.FindPeerAsync(unknownPeer); await Task.Delay(400).ConfigureAwait(false); await dht.StopAsync(); }
public async Task Noop_OnPeerDiscovered_When_NotBelow_MinConnections() { var swarmA = new SwarmService { LocalPeer = peerA }; await swarmA.StartAsync(); await swarmA.StartListeningAsync("/ip4/127.0.0.1/tcp/0"); var swarmB = new SwarmService { LocalPeer = peerB }; await swarmB.StartAsync(); var peerBAddress = await swarmB.StartListeningAsync("/ip4/127.0.0.1/tcp/0"); try { using (new AutoDialer(swarmA) { MinConnections = 0 }) { var other = swarmA.RegisterPeerAddress(peerBAddress); // wait for the connection. var endTime = DateTime.Now.AddSeconds(3); while (other.ConnectedAddress == null) { if (DateTime.Now > endTime) { return; } await Task.Delay(100); } Assert.Fail("Autodial should not happen"); } } finally { await swarmA.StopAsync(); await swarmB.StopAsync(); } }
public async Task AddDiscoveredPeerToRoutingTable() { var swarm = new SwarmService { LocalPeer = self }; var dht = new DhtService { SwarmService = swarm }; await dht.StartAsync(); try { var peer = swarm.RegisterPeerAddress( "/ip4/127.0.0.1/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1h"); Assert.IsTrue(dht.RoutingTable.Contains(peer)); } finally { await dht.StopAsync(); } }
public void PeerDiscovered() { var swarm = new SwarmService { LocalPeer = _self }; var peerCount = 0; swarm.PeerDiscovered += (s, e) => { ++peerCount; }; swarm.RegisterPeerAddress("/ip4/127.0.0.1/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1h"); swarm.RegisterPeerAddress("/ip4/127.0.0.2/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1h"); swarm.RegisterPeerAddress("/ip4/127.0.0.3/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1h"); swarm.RegisterPeerAddress("/ip4/127.0.0.1/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1i"); swarm.RegisterPeerAddress("/ip4/127.0.0.2/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1i"); swarm.RegisterPeerAddress("/ip4/127.0.0.3/tcp/4001/ipfs/QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1i"); swarm.RegisterPeer(new Peer { Id = "QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1j" }); swarm.RegisterPeer(new Peer { Id = "QmdpwjdB94eNm2Lcvp9JqoCxswo3AKQqjLuNZyLixmCM1j" }); Assert.AreEqual(3, peerCount); }
public async Task Connects_OnPeerDisconnected_When_Below_MinConnections() { var swarmA = new SwarmService { LocalPeer = peerA }; await swarmA.StartAsync(); await swarmA.StartListeningAsync("/ip4/127.0.0.1/tcp/0"); var swarmB = new SwarmService { LocalPeer = peerB }; await swarmB.StartAsync(); var peerBAddress = await swarmB.StartListeningAsync("/ip4/127.0.0.1/tcp/0"); var swarmC = new SwarmService { LocalPeer = peerC }; await swarmC.StartAsync(); var peerCAddress = await swarmC.StartListeningAsync("/ip4/127.0.0.1/tcp/0"); var isBConnected = false; swarmA.ConnectionEstablished += (s, conn) => { if (conn.RemotePeer == peerB) { isBConnected = true; } }; try { using (new AutoDialer(swarmA) { MinConnections = 1 }) { swarmA.RegisterPeerAddress(peerBAddress); var c = swarmA.RegisterPeerAddress(peerCAddress); // wait for the peer B connection. var endTime = DateTime.Now.AddSeconds(3); while (!isBConnected) { if (DateTime.Now > endTime) { Assert.Fail("Did not do autodial on peer discovered"); } await Task.Delay(100); // get cancellaton token } Assert.IsNull(c.ConnectedAddress); await swarmA.DisconnectAsync(peerBAddress); // wait for the peer C connection. endTime = DateTime.Now.AddSeconds(3); while (c.ConnectedAddress == null) { if (DateTime.Now > endTime) { Assert.Fail("Did not do autodial on peer disconnected"); } await Task.Delay(100); } } } finally { await swarmA?.StopAsync(); await swarmB?.StopAsync(); await swarmC?.StopAsync(); } }