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); } }
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}"); } } }