public async Task ProcessDownloadJob_Success() { var chain = await _blockchainService.GetChainAsync(); var originalBestChainHash = chain.BestChainHash; var originalBestChainHeight = chain.BestChainHeight; var response = await _networkService.GetBlocksAsync(chain.LastIrreversibleBlockHash, 30, null); var peerBlocks = response.Payload; var peerBlock = peerBlocks.Last(); await _blockDownloadJobManager.EnqueueAsync(peerBlock.GetHash(), peerBlock.Height, 5, null); await _blockDownloadWorker.ProcessDownloadJobAsync(); chain = await _blockchainService.GetChainAsync(); chain.BestChainHeight.ShouldBe(30); chain.BestChainHash.ShouldBe(peerBlock.GetHash()); var block = await _blockchainService.GetBlockByHeightInBestChainBranchAsync(originalBestChainHeight); block.GetHash().ShouldNotBe(originalBestChainHash); }
public async Task ProcessDownloadJob_Success() { var response = await _networkService.GetBlockByHashAsync(HashHelper.ComputeFrom("PeerBlock"), null); var peerBlock = response.Payload; var jobId = await _blockDownloadJobManager.EnqueueAsync(peerBlock.GetHash(), peerBlock.Height, _blockSyncOptions.MaxBatchRequestBlockCount, null); await _blockDownloadWorker.ProcessDownloadJobAsync(); var chain = await _blockchainService.GetChainAsync(); chain.BestChainHeight.ShouldBe(31); var jobInfo = await _blockDownloadJobStore.GetFirstWaitingJobAsync(); jobInfo.JobId.ShouldBe(jobId); _blockSyncStateProvider.TryGetDownloadJobTargetState(chain.BestChainHash, out var state).ShouldBeTrue(); state.ShouldBeFalse(); _blockSyncStateProvider.SetDownloadJobTargetState(chain.BestChainHash, true); await _blockDownloadWorker.ProcessDownloadJobAsync(); jobInfo = await _blockDownloadJobStore.GetFirstWaitingJobAsync(); jobInfo.ShouldBeNull(); _blockSyncStateProvider.TryGetDownloadJobTargetState(chain.BestChainHash, out state).ShouldBeFalse(); }
private async Task RunWorkerAsync(int times, List <BlockWithTransactions> peerBlocks) { for (int i = 0; i < times; i++) { foreach (var block in peerBlocks) { _blockSyncStateProvider.TryRemoveDownloadJobTargetState(block.GetHash()); } await _blockDownloadWorker.ProcessDownloadJobAsync(); } }