private PeerConnectorAddNode CreatePeerConnecterAddNode(NodeSettings nodeSettings, ConnectionManagerSettings connectionSettings, IPeerAddressManager peerAddressManager) { var peerConnector = new PeerConnectorAddNode(this.asyncLoopFactory, DateTimeProvider.Default, this.extendedLoggerFactory, this.network, this.networkPeerFactory, this.nodeLifetime, nodeSettings, connectionSettings, peerAddressManager); var connectionManager = CreateConnectionManager(nodeSettings, connectionSettings, peerAddressManager, peerConnector); peerConnector.Initialize(connectionManager); return(peerConnector); }
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.connectionSetting, this.peerAddressManager); var peerDiscovery = new PeerDiscovery(new AsyncLoopFactory(this.loggerFactory), this.loggerFactory, this.network, this.networkPeerFactory, this.nodeLifetime, this.nodeSettings, this.peerAddressManager); var connectionSettings = new ConnectionManagerSettings(); connectionSettings.Load(this.nodeSettings); IConnectionManager connectionManager = new ConnectionManager( DateTimeProvider.Default, this.loggerFactory, this.network, this.networkPeerFactory, this.nodeSettings, this.nodeLifetime, this.parameters, this.peerAddressManager, new IPeerConnector[] { peerConnectorAddNode }, peerDiscovery, connectionSettings); // Create a peer to add to the already connected peers collection. using (NodeBuilder builder = NodeBuilder.Create()) { CoreNode coreNode = builder.CreateStratisPowNode(); builder.StartAll(); using (NetworkPeer 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); // TODO: Once we have an interface on NetworkPeer we can test this properly. // The already connected peer should not be returned. //var peer = peerConnectorAddNode.FindPeerToConnectTo(); //Assert.Null(peer); } } }
public void PeerConnectorAddNode_ConnectsTo_AddNodePeers() { var peerFolder = AssureEmptyDirAsDataFolder(Path.Combine(AppContext.BaseDirectory, "PeerConnectorTests")); var peerAddressManager = new PeerAddressManager(DateTimeProvider.Default, peerFolder, this.extendedLoggerFactory); var ipAddressOne = IPAddress.Parse("::ffff:192.168.0.1"); var endpointAddNode = new IPEndPoint(ipAddressOne, 80); var ipAddressTwo = IPAddress.Parse("::ffff:192.168.0.2"); var endpointDiscoveredNode = new IPEndPoint(ipAddressTwo, 80); peerAddressManager.AddPeer(endpointAddNode, IPAddress.Loopback); peerAddressManager.AddPeer(endpointDiscoveredNode, IPAddress.Loopback); var nodeSettings = new NodeSettings(); nodeSettings.LoadConfiguration(); var connectionManagerSettings = new ConnectionManagerSettings(); connectionManagerSettings.Load(nodeSettings); connectionManagerSettings.AddNode.Add(endpointAddNode); var networkPeer = new Mock <INetworkPeer>(); networkPeer.SetupGet(np => np.PeerEndPoint).Returns(new IPEndPoint(ipAddressOne, 80)); networkPeer.SetupGet(np => np.RemoteSocketAddress).Returns(ipAddressOne); networkPeer.SetupGet(np => np.RemoteSocketPort).Returns(80); networkPeer.SetupGet(np => np.State).Returns(NetworkPeerState.HandShaked); var networkPeerFactory = new Mock <INetworkPeerFactory>(); networkPeerFactory.Setup(npf => npf.CreateConnectedNetworkPeerAsync(It.IsAny <Network>(), It.IsAny <IPEndPoint>(), It.IsAny <NetworkPeerConnectionParameters>())).Returns(Task.FromResult(networkPeer.Object)); var peerConnector = new PeerConnectorAddNode(this.asyncLoopFactory, DateTimeProvider.Default, this.extendedLoggerFactory, this.network, networkPeerFactory.Object, this.nodeLifetime, nodeSettings, connectionManagerSettings, peerAddressManager); var connectionManager = CreateConnectionManager(nodeSettings, connectionManagerSettings, peerAddressManager, peerConnector); peerConnector.Initialize(connectionManager); peerConnector.OnConnectAsync().GetAwaiter().GetResult(); Assert.Contains(endpointAddNode, peerConnector.ConnectedPeers.Select(p => p.PeerEndPoint)); Assert.DoesNotContain(endpointDiscoveredNode, peerConnector.ConnectedPeers.Select(p => p.PeerEndPoint)); }
public void PeerConnectorAddNode_ConnectsTo_AddNodePeers() { var nodeSettings = new NodeSettings(this.Network, args: new[] { "-IpRangeFiltering=false" }); var connectionManagerSettings = new ConnectionManagerSettings(nodeSettings); DataFolder peerFolder = CreateDataFolder(this); var peerAddressManager = new PeerAddressManager(DateTimeProvider.Default, peerFolder, this.extendedLoggerFactory, new SelfEndpointTracker(this.extendedLoggerFactory, connectionManagerSettings)); IPAddress ipAddressOne = IPAddress.Parse("::ffff:192.168.0.1"); var endpointAddNode = new IPEndPoint(ipAddressOne, 80); IPAddress ipAddressTwo = IPAddress.Parse("::ffff:192.168.0.2"); var endpointDiscoveredNode = new IPEndPoint(ipAddressTwo, 80); peerAddressManager.AddPeer(endpointAddNode, IPAddress.Loopback); peerAddressManager.AddPeer(endpointDiscoveredNode, IPAddress.Loopback); connectionManagerSettings.AddAddNode(endpointAddNode); var networkPeer = new Mock <INetworkPeer>(); networkPeer.SetupGet(np => np.PeerEndPoint).Returns(new IPEndPoint(ipAddressOne, 80)); networkPeer.SetupGet(np => np.RemoteSocketAddress).Returns(ipAddressOne); networkPeer.SetupGet(np => np.RemoteSocketPort).Returns(80); networkPeer.SetupGet(np => np.State).Returns(NetworkPeerState.HandShaked); var networkPeerFactory = new Mock <INetworkPeerFactory>(); networkPeerFactory.Setup(npf => npf.CreateConnectedNetworkPeerAsync(It.IsAny <IPEndPoint>(), It.IsAny <NetworkPeerConnectionParameters>(), It.IsAny <NetworkPeerDisposer>())).Returns(Task.FromResult(networkPeer.Object)); var peerConnector = new PeerConnectorAddNode(this.asyncProvider, DateTimeProvider.Default, this.extendedLoggerFactory, this.Network, networkPeerFactory.Object, this.nodeLifetime, nodeSettings, connectionManagerSettings, peerAddressManager, new SelfEndpointTracker(this.extendedLoggerFactory, connectionManagerSettings)); var selfEndpointTracker = new Mock <ISelfEndpointTracker>(); IConnectionManager connectionManager = CreateConnectionManager(nodeSettings, connectionManagerSettings, peerAddressManager, peerConnector, selfEndpointTracker.Object); peerConnector.Initialize(connectionManager); peerConnector.OnConnectAsync().GetAwaiter().GetResult(); Assert.Contains(endpointAddNode, peerConnector.ConnectorPeers.Select(p => p.PeerEndPoint)); Assert.DoesNotContain(endpointDiscoveredNode, peerConnector.ConnectorPeers.Select(p => p.PeerEndPoint)); }