Exemple #1
0
        public void PeersReadWriteTest()
        {
            var persistedPeers = _peerStorage.GetPersistedPeers();

            Assert.AreEqual(0, persistedPeers.Length);

            var nodes = new[]
            {
                _nodeFactory.CreateNode("192.1.1.1", 3441),
                _nodeFactory.CreateNode("192.1.1.2", 3442),
                _nodeFactory.CreateNode("192.1.1.3", 3443),
                _nodeFactory.CreateNode("192.1.1.4", 3444),
                _nodeFactory.CreateNode("192.1.1.5", 3445),
            };

            nodes[0].Description = "Test desc";
            nodes[4].Description = "Test desc 2";

            var peers = nodes.Select(x => new Peer(x, new NodeStats(_configurationProvider))).ToArray();

            _peerStorage.StartBatch();
            _peerStorage.UpdatePeers(peers);
            _peerStorage.Commit();

            persistedPeers = _peerStorage.GetPersistedPeers();
            foreach (var peer in peers)
            {
                var persistedNode = persistedPeers.FirstOrDefault(x => x.Node.Id.Equals(peer.Node.Id));
                Assert.IsNotNull(persistedNode);
                Assert.AreEqual(peer.Node.Port, persistedNode.Node.Port);
                Assert.AreEqual(peer.Node.Host, persistedNode.Node.Host);
                Assert.AreEqual(peer.Node.Description, persistedNode.Node.Description);
                Assert.AreEqual(peer.NodeStats.CurrentNodeReputation, persistedNode.PersistedReputation);
            }

            _peerStorage.StartBatch();
            _peerStorage.RemovePeers(peers.Take(1).ToArray());
            _peerStorage.Commit();

            persistedPeers = _peerStorage.GetPersistedPeers();
            foreach (var peer in peers.Take(1))
            {
                var persistedNode = persistedPeers.FirstOrDefault(x => x.Node.Id.Equals(peer.Node.Id));
                Assert.IsNull(persistedNode.Node);
            }

            foreach (var peer in peers.Skip(1))
            {
                var persistedNode = persistedPeers.FirstOrDefault(x => x.Node.Id.Equals(peer.Node.Id));
                Assert.IsNotNull(persistedNode);
                Assert.AreEqual(peer.Node.Port, persistedNode.Node.Port);
                Assert.AreEqual(peer.Node.Host, persistedNode.Node.Host);
                Assert.AreEqual(peer.Node.Description, persistedNode.Node.Description);
                Assert.AreEqual(peer.NodeStats.CurrentNodeReputation, persistedNode.PersistedReputation);
            }
        }
Exemple #2
0
        private void AddPersistedPeers()
        {
            if (!_configurationProvider.IsPeersPersistenceOn)
            {
                return;
            }

            var peers = _peerStorage.GetPersistedPeers();

            if (_logger.IsInfoEnabled)
            {
                _logger.Info($"Initializing persisted peers: {peers.Length}.");
            }

            foreach (var persistedPeer in peers)
            {
                if (_newPeers.ContainsKey(persistedPeer.Node.Id) || _activePeers.ContainsKey(persistedPeer.Node.Id))
                {
                    //Peer already added by discovery
                    continue;
                }

                var nodeStats = _nodeStatsProvider.GetNodeStats(persistedPeer.Node.Id);
                nodeStats.CurrentPersistedNodeReputation = persistedPeer.PersistedReputation;

                var peer = new Peer(persistedPeer.Node, nodeStats);
                if (!_newPeers.TryAdd(persistedPeer.Node.Id, peer))
                {
                    continue;
                }

                if (_logger.IsInfoEnabled)
                {
                    _logger.Info($"Adding persisted peer to New collection {persistedPeer.Node.Id.ToString(false)}@{persistedPeer.Node.Host}:{persistedPeer.Node.Port}");
                }
            }
        }