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 StoredPartialTransactionsTriggerSignatureRequest() { var dataFolder = new DataFolder(CreateTestDir(this)); this.Init(dataFolder); this.AddFunding(); this.AppendBlocks(this.federationGatewaySettings.MinCoinMaturity); MultiSigAddress multiSigAddress = this.wallet.MultiSigAddress; using (ICrossChainTransferStore crossChainTransferStore = this.CreateStore()) { crossChainTransferStore.Initialize(); crossChainTransferStore.Start(); Assert.Equal(this.chain.Tip.HashBlock, crossChainTransferStore.TipHashAndHeight.HashBlock); Assert.Equal(this.chain.Tip.Height, crossChainTransferStore.TipHashAndHeight.Height); BitcoinAddress address1 = (new Key()).PubKey.Hash.GetAddress(this.network); BitcoinAddress address2 = (new Key()).PubKey.Hash.GetAddress(this.network); var deposit1 = new Deposit(0, new Money(160m, MoneyUnit.BTC), address1.ToString(), crossChainTransferStore.NextMatureDepositHeight, 1); var deposit2 = new Deposit(1, new Money(60m, MoneyUnit.BTC), address2.ToString(), crossChainTransferStore.NextMatureDepositHeight, 1); MaturedBlockDepositsModel[] blockDeposits = new[] { new MaturedBlockDepositsModel( new MaturedBlockInfoModel() { BlockHash = 1, BlockHeight = crossChainTransferStore.NextMatureDepositHeight }, new[] { deposit1, deposit2 }) }; crossChainTransferStore.RecordLatestMatureDepositsAsync(blockDeposits).GetAwaiter().GetResult(); Dictionary <uint256, Transaction> transactions = crossChainTransferStore.GetTransactionsByStatusAsync( CrossChainTransferStatus.Partial).GetAwaiter().GetResult(); var requester = new PartialTransactionRequester(this.loggerFactory, crossChainTransferStore, this.asyncLoopFactory, this.nodeLifetime, this.connectionManager, this.federationGatewaySettings); var peerEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse("1.2.3.4"), 5); var peer = Substitute.For <INetworkPeer>(); peer.RemoteSocketAddress.Returns(peerEndPoint.Address); peer.RemoteSocketPort.Returns(peerEndPoint.Port); peer.PeerEndPoint.Returns(peerEndPoint); peer.IsConnected.Returns(true); var peers = new NetworkPeerCollection(); peers.Add(peer); this.federationGatewaySettings.FederationNodeIpEndPoints.Returns(new[] { peerEndPoint }); this.connectionManager.ConnectedPeers.Returns(peers); requester.Start(); Thread.Sleep(100); peer.Received().SendMessageAsync(Arg.Is <RequestPartialTransactionPayload>(o => o.DepositId == 0 && o.PartialTransaction.GetHash() == transactions[0].GetHash())).GetAwaiter().GetResult(); peer.DidNotReceive().SendMessageAsync(Arg.Is <RequestPartialTransactionPayload>(o => o.DepositId == 1 && o.PartialTransaction.GetHash() == transactions[1].GetHash())).GetAwaiter().GetResult(); } }