Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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());
        }
Esempio n. 3
0
        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();
            }
        }
Esempio n. 4
0
        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);
            });
        }
Esempio n. 5
0
        public void NewPeerAddress()
        {
            var swarm = new SwarmService {
                LocalPeer = _self
            };

            swarm.RegisterPeerAddress(_mars);
            Assert.IsTrue(swarm.KnownPeerAddresses.Contains(_mars));
        }
Esempio n. 6
0
        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());
        }
Esempio n. 7
0
        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());
        }
Esempio n. 8
0
        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();
        }
Esempio n. 9
0
        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();
            }
        }
Esempio n. 10
0
        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();
            }
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        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();
            }
        }