private bool ConnectToPeer(PeerAddressManager peerAddressManager, Mock <INetworkPeerFactory> networkPeerFactoryExisting, ConnectionManagerSettings connectionManagerSettingsExisting, PeerConnectorConnectNode peerConnector, IPEndPoint endpointNode, Mock <IConnectionManager> mockConnectionManager) { peerAddressManager.AddPeer(endpointNode, IPAddress.Loopback); var networkPeer = new Mock <INetworkPeer>(); networkPeer.SetupGet(np => np.PeerEndPoint).Returns(new IPEndPoint(endpointNode.Address, endpointNode.Port)); networkPeer.SetupGet(np => np.RemoteSocketAddress).Returns(endpointNode.Address); networkPeer.SetupGet(np => np.RemoteSocketPort).Returns(endpointNode.Port); networkPeer.SetupGet(np => np.State).Returns(NetworkPeerState.HandShaked); networkPeerFactoryExisting.Setup(npf => npf.CreateConnectedNetworkPeerAsync(It.Is <IPEndPoint>(x => Equals(x, endpointNode)), It.IsAny <NetworkPeerConnectionParameters>(), It.IsAny <NetworkPeerDisposer>())).Returns(Task.FromResult(networkPeer.Object)); connectionManagerSettingsExisting.AddNode.Add(endpointNode); connectionManagerSettingsExisting.Connect.Add(endpointNode); NetworkPeerCollection connectedPeers = (NetworkPeerCollection)mockConnectionManager.Object.ConnectedPeers; foreach (INetworkPeer peer in peerConnector.ConnectorPeers) { if (!connectedPeers.Contains(peer)) { connectedPeers.Add(peer); } } mockConnectionManager.SetupGet(np => np.ConnectedPeers).Returns(connectedPeers); peerConnector.Initialize(mockConnectionManager.Object); peerConnector.OnConnectAsync().GetAwaiter().GetResult(); return(peerConnector.ConnectorPeers.Select(p => p.PeerEndPoint).Contains(endpointNode)); }
public void PeerConnectorDiscovery_ConnectsTo_DiscoveredPeers() { 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 ipAddressAdd = IPAddress.Parse("::ffff:192.168.0.1"); var endpointAddNode = new IPEndPoint(ipAddressAdd, 80); IPAddress ipAddressConnect = IPAddress.Parse("::ffff:192.168.0.2"); var endpointConnectNode = new IPEndPoint(ipAddressConnect, 80); IPAddress ipAddressDiscovered = IPAddress.Parse("::ffff:192.168.0.3"); var endpointDiscoveredNode = new IPEndPoint(ipAddressDiscovered, 80); peerAddressManager.AddPeer(endpointAddNode, IPAddress.Loopback); peerAddressManager.AddPeer(endpointConnectNode, IPAddress.Loopback); peerAddressManager.AddPeer(endpointDiscoveredNode, IPAddress.Loopback); connectionManagerSettings.AddAddNode(endpointAddNode); connectionManagerSettings.Connect.Add(endpointConnectNode); var networkPeer = new Mock <INetworkPeer>(); networkPeer.SetupGet(np => np.PeerEndPoint).Returns(new IPEndPoint(ipAddressDiscovered, 80)); networkPeer.SetupGet(np => np.RemoteSocketAddress).Returns(ipAddressDiscovered); 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 PeerConnectorConnectNode(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.DoesNotContain(endpointAddNode, peerConnector.ConnectorPeers.Select(p => p.PeerEndPoint)); Assert.DoesNotContain(endpointConnectNode, peerConnector.ConnectorPeers.Select(p => p.PeerEndPoint)); Assert.Contains(endpointDiscoveredNode, peerConnector.ConnectorPeers.Select(p => p.PeerEndPoint)); }
public void PeerConnectorDiscovery_ConnectsTo_DiscoveredPeers() { var peerFolder = AssureEmptyDirAsDataFolder(Path.Combine(AppContext.BaseDirectory, "PeerConnectorTests")); var peerAddressManager = new PeerAddressManager(DateTimeProvider.Default, peerFolder, this.extendedLoggerFactory); var ipAddressAdd = IPAddress.Parse("::ffff:192.168.0.1"); var endpointAddNode = new IPEndPoint(ipAddressAdd, 80); var ipAddressConnect = IPAddress.Parse("::ffff:192.168.0.2"); var endpointConnectNode = new IPEndPoint(ipAddressConnect, 80); var ipAddressDiscovered = IPAddress.Parse("::ffff:192.168.0.3"); var endpointDiscoveredNode = new IPEndPoint(ipAddressDiscovered, 80); peerAddressManager.AddPeer(endpointAddNode, IPAddress.Loopback); peerAddressManager.AddPeer(endpointConnectNode, IPAddress.Loopback); peerAddressManager.AddPeer(endpointDiscoveredNode, IPAddress.Loopback); var nodeSettings = new NodeSettings(); var connectionManagerSettings = new ConnectionManagerSettings(); connectionManagerSettings.Load(nodeSettings); connectionManagerSettings.AddNode.Add(endpointAddNode); connectionManagerSettings.Connect.Add(endpointConnectNode); var networkPeer = new Mock <INetworkPeer>(); networkPeer.SetupGet(np => np.PeerEndPoint).Returns(new IPEndPoint(ipAddressDiscovered, 80)); networkPeer.SetupGet(np => np.RemoteSocketAddress).Returns(ipAddressDiscovered); 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 PeerConnectorConnectNode(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.DoesNotContain(endpointAddNode, peerConnector.ConnectedPeers.Select(p => p.PeerEndPoint)); Assert.DoesNotContain(endpointConnectNode, peerConnector.ConnectedPeers.Select(p => p.PeerEndPoint)); Assert.Contains(endpointDiscoveredNode, peerConnector.ConnectedPeers.Select(p => p.PeerEndPoint)); }