public void NeighborsSentReceivedTest()
        {
            var msg = new NeighborsMessage
            {
                FarAddress     = _address2,
                Nodes          = new List <Node>().ToArray(),
                ExpirationTime = (long)(new Timestamper().EpochSeconds + 1200),
                FarPublicKey   = _privateKey2.PublicKey
            };

            _discoveryHandlers[0].SendMessage(msg);
            Thread.Sleep(200);
            _discoveryManagers[1].Received(1).OnIncomingMessage(Arg.Is <DiscoveryMessage>(x => x.MessageType == MessageType.Neighbors));

            var msg2 = new NeighborsMessage
            {
                FarAddress     = _address,
                Nodes          = new List <Node>().ToArray(),
                ExpirationTime = (long)(new Timestamper().EpochSeconds + 1200),
                FarPublicKey   = _privateKey.PublicKey
            };

            _discoveryHandlers[1].SendMessage(msg2);
            Thread.Sleep(200);
            _discoveryManagers[0].Received(1).OnIncomingMessage(Arg.Is <DiscoveryMessage>(x => x.MessageType == MessageType.Neighbors));
        }
        public void ProcessNeighborsMessage(NeighborsMessage discoveryMessage)
        {
            if (!IsBonded)
            {
                return;
            }

            if (_isNeighborsExpected)
            {
                NodeStats.AddNodeStatsEvent(NodeStatsEventType.DiscoveryNeighboursIn);
                RefreshNodeContactTime();

                foreach (Node node in discoveryMessage.Nodes)
                {
                    if (node.Address.Address.ToString().Contains("127.0.0.1"))
                    {
                        if (_logger.IsTrace)
                        {
                            _logger.Trace($"Received localhost as node address from: {discoveryMessage.FarPublicKey}, node: {node}");
                        }
                        continue;
                    }

                    //If node is new it will create a new nodeLifecycleManager and will update state to New, which will trigger Ping
                    _discoveryManager.GetNodeLifecycleManager(node);
                }
            }

            _isNeighborsExpected = false;
        }
示例#3
0
        public void NeighborsMessageTest()
        {
            var message = new NeighborsMessage
            {
                FarAddress = _farAddress,
                Nodes      = new[]
                {
                    new Node("192.168.1.2", 1),
                    new Node("192.168.1.3", 2),
                    new Node("192.168.1.4", 3)
                },
                FarPublicKey   = _privateKey.PublicKey,
                ExpirationTime = 60 + (long)_timestamper.EpochMilliseconds
            };

            var data = _messageSerializationService.Serialize(message);
            var deserializedMessage = _messageSerializationService.Deserialize <NeighborsMessage>(data);

            Assert.AreEqual(message.MessageType, deserializedMessage.MessageType);
            Assert.AreEqual(message.FarPublicKey, deserializedMessage.FarPublicKey);
            Assert.AreEqual(message.ExpirationTime, deserializedMessage.ExpirationTime);

            for (var i = 0; i < message.Nodes.Length; i++)
            {
                Assert.AreEqual(message.Nodes[i].Host, deserializedMessage.Nodes[i].Host);
                Assert.AreEqual(message.Nodes[i].Port, deserializedMessage.Nodes[i].Port);
                Assert.AreEqual(message.Nodes[i].IdHash, deserializedMessage.Nodes[i].IdHash);
                Assert.AreEqual(message.Nodes[i], deserializedMessage.Nodes[i]);
            }
        }
        public async Task NeighborsSentReceivedTest()
        {
            var msg = new NeighborsMessage
            {
                FarAddress     = _address2,
                Nodes          = new List <Node>().ToArray(),
                ExpirationTime = Timestamper.Default.UnixTime.SecondsLong + 1200,
                FarPublicKey   = _privateKey2.PublicKey
            };

            _discoveryHandlers[0].SendMessage(msg);
            await SleepWhileWaiting();

            _discoveryManagersMocks[1].Received(1).OnIncomingMessage(Arg.Is <DiscoveryMessage>(x => x.MessageType == MessageType.Neighbors));

            var msg2 = new NeighborsMessage
            {
                FarAddress     = _address,
                Nodes          = new List <Node>().ToArray(),
                ExpirationTime = Timestamper.Default.UnixTime.SecondsLong + 1200,
                FarPublicKey   = _privateKey.PublicKey
            };

            _discoveryHandlers[1].SendMessage(msg2);
            await SleepWhileWaiting();

            _discoveryManagersMocks[0].Received(1).OnIncomingMessage(Arg.Is <DiscoveryMessage>(x => x.MessageType == MessageType.Neighbors));
        }
示例#5
0
        public void NeighborsMessageTest()
        {
            var nodeFactory = new NodeFactory();

            var message = new NeighborsMessage
            {
                FarAddress     = _farAddress,
                Nodes          = new[] { nodeFactory.CreateNode("192.168.1.2", 1), nodeFactory.CreateNode("192.168.1.3", 2), nodeFactory.CreateNode("192.168.1.4", 3) },
                FarPublicKey   = _privateKey.PublicKey,
                ExpirationTime = _config.DiscoveryMsgExpiryTime + Timestamp.UnixUtcUntilNowMilisecs
            };

            var data = _messageSerializationService.Serialize(message);
            var deserializedMessage = _messageSerializationService.Deserialize <NeighborsMessage>(data);

            Assert.AreEqual(message.MessageType, deserializedMessage.MessageType);
            Assert.AreEqual(message.FarPublicKey, deserializedMessage.FarPublicKey);
            Assert.AreEqual(message.ExpirationTime, deserializedMessage.ExpirationTime);

            for (var i = 0; i < message.Nodes.Length; i++)
            {
                Assert.AreEqual(message.Nodes[i].Host, deserializedMessage.Nodes[i].Host);
                Assert.AreEqual(message.Nodes[i].Port, deserializedMessage.Nodes[i].Port);
                Assert.AreEqual(message.Nodes[i].IdHashText, deserializedMessage.Nodes[i].IdHashText);
                Assert.AreEqual(message.Nodes[i], deserializedMessage.Nodes[i]);
            }
        }
示例#6
0
        public void SendNeighbors(Node[] nodes)
        {
            NeighborsMessage msg = _discoveryMessageFactory.CreateOutgoingMessage <NeighborsMessage>(ManagedNode);

            msg.Nodes = nodes;
            _discoveryManager.SendMessage(msg);
            NodeStats.AddNodeStatsEvent(NodeStatsEventType.DiscoveryNeighboursOut);
        }
        public void ProcessNeighborsMessage(NeighborsMessage discoveryMessage)
        {
            if (_isNeighborsExpected)
            {
                NodeStats.AddNodeStatsEvent(NodeStatsEvent.DiscoveryNeighboursIn);
                RefreshNodeContactTime();

                foreach (var node in discoveryMessage.Nodes)
                {
                    //If node is new it will create a new nodeLifecycleManager and will update state to New, which will trigger Ping
                    _discoveryManager.GetNodeLifecycleManager(node);
                }
            }

            _isNeighborsExpected = false;
        }
        public void SendNeighbors(Node[] nodes)
        {
            if (!IsBonded)
            {
                if (_logger.IsWarn)
                {
                    _logger.Warn("Sending NEIGHBOURS before bonding");
                }
            }

            NeighborsMessage msg = _discoveryMessageFactory.CreateOutgoingMessage <NeighborsMessage>(ManagedNode);

            msg.Nodes = nodes;
            _discoveryManager.SendMessage(msg);
            NodeStats.AddNodeStatsEvent(NodeStatsEventType.DiscoveryNeighboursOut);
        }
示例#9
0
        public void HandleNeighbours(NeighborsMessage message)
        {
            if (!this.wait_neighbors)
            {
                Logger.Warning(
                    string.Format("Receive neighbors from {0} without send find nodes.", node.Host));

                return;
            }

            this.wait_neighbors = false;

            foreach (Node node in message.Nodes)
            {
                if (!this.node_manager.PublicHomeNode.Id.ToHexString().Equals(node.Id.ToHexString()))
                {
                    this.node_manager.GetNodeHandler(node);
                }
            }
        }
示例#10
0
        public void SendNeighbours(List <Node> neighbours, long sequence)
        {
            Message msg = new NeighborsMessage(this.node_manager.PublicHomeNode, neighbours, sequence);

            SendMessage(msg);
        }