public void PeerConnectorAddNode_FindPeerToConnectTo_Returns_AddNodePeers()
        {
            var peerAddressManager = new PeerAddressManager();

            var ipAddressOne          = IPAddress.Parse("::ffff:192.168.0.1");
            var networkAddressAddNode = new NetworkAddress(ipAddressOne, 80);

            var ipAddressTwo = IPAddress.Parse("::ffff:192.168.0.2");
            var networkAddressDiscoverNode = new NetworkAddress(ipAddressTwo, 80);

            peerAddressManager.AddPeer(networkAddressAddNode, IPAddress.Loopback);
            peerAddressManager.AddPeer(networkAddressDiscoverNode, IPAddress.Loopback);

            var nodeSettings = new NodeSettings
            {
                ConnectionManager = new Configuration.Settings.ConnectionManagerSettings()
            };

            nodeSettings.ConnectionManager.AddNode.Add(networkAddressAddNode.Endpoint);
            var connector = new PeerConnectorAddNode(nodeSettings, peerAddressManager);

            var peer = connector.FindPeerToConnectTo();

            Assert.Equal(networkAddressAddNode.Endpoint, peer.Endpoint);
        }
        public void PeerConnectorAddNode_PeerAlreadyConnected_Scenario1()
        {
            this.CreateTestContext("PeerConnectorAddNode_PeerAlreadyConnected_Scenario1");

            var peerConnectorAddNode = new PeerConnectorAddNode(new AsyncLoopFactory(this.loggerFactory), DateTimeProvider.Default, this.loggerFactory, this.network, this.networkPeerFactory, this.nodeLifetime, this.nodeSettings, this.peerAddressManager);
            var peerDiscovery        = new PeerDiscovery(new AsyncLoopFactory(this.loggerFactory), this.loggerFactory, this.network, this.networkPeerFactory, this.nodeLifetime, this.nodeSettings, this.peerAddressManager);

            IConnectionManager connectionManager = new ConnectionManager(
                new AsyncLoopFactory(this.loggerFactory),
                DateTimeProvider.Default,
                this.loggerFactory,
                this.network,
                this.networkPeerFactory,
                this.nodeSettings,
                this.nodeLifetime,
                this.parameters,
                this.peerAddressManager,
                new IPeerConnector[] { peerConnectorAddNode },
                peerDiscovery);

            // Create a peer to add to the already connected peers collection.
            NetworkPeer networkPeer = null;

            using (NodeBuilder builder = NodeBuilder.Create())
            {
                CoreNode coreNode = builder.CreateStratisPowNode();
                builder.StartAll();

                networkPeer = coreNode.CreateNetworkPeerClient();

                // Add the network peers to the connection manager's
                // add node collection.
                connectionManager.AddNodeAddress(networkPeer.PeerAddress.Endpoint);

                // Add the peer to the already connected
                // peer collection of connection manager.
                //
                // This is to simulate that a peer has successfully connected
                // and that the add node connector's Find method then won't
                // return the added node.
                connectionManager.AddConnectedPeer(networkPeer);

                // Re-initialize the add node peer connector so that it
                // adds the successful address to the address manager.
                peerConnectorAddNode.Initialize(connectionManager);

                // The already connected peer should not be returned.
                var peer = peerConnectorAddNode.FindPeerToConnectTo();
                Assert.Null(peer);
            }
        }