public async Task DoesntBroadcastWithInactiveFederation() { this.federationWalletManager.IsFederationWalletActive().Returns(false); var partialRequester = new PartialTransactionRequester( this.store, this.asyncProvider, this.nodeLifetime, this.federatedPegBroadcaster, this.ibdState, this.federationWalletManager, this.inputConsolidator); await partialRequester.BroadcastPartialTransactionsAsync(); this.store.Received(0).GetTransfersByStatus(Arg.Any <CrossChainTransferStatus[]>()); }
public async Task DoesntBroadcastWithInactiveFederation() { this.federationWalletManager.IsFederationWalletActive().Returns(false); var partialRequester = new PartialTransactionRequester( this.loggerFactory, this.store, this.asyncProvider, this.nodeLifetime, this.connectionManager, this.federationGatewaySettings, this.ibdState, this.federationWalletManager); await partialRequester.BroadcastPartialTransactionsAsync(); await this.store.Received(0).GetTransactionsByStatusAsync(Arg.Any <CrossChainTransferStatus>()); }
public async Task DoesntBroadcastInIBD() { this.ibdState.IsInitialBlockDownload().Returns(true); var partialRequester = new PartialTransactionRequester( this.loggerFactory, this.store, this.asyncProvider, this.nodeLifetime, this.connectionManager, this.federatedPegSettings, this.ibdState, this.federationWalletManager); await partialRequester.BroadcastPartialTransactionsAsync(); this.store.Received(0).GetTransfersByStatus(Arg.Any <CrossChainTransferStatus[]>()); }
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(); } }