private void LoadScenario(Scenario scenario, ISyncConfig syncConfig) { _syncConfig = syncConfig; _syncConfig.PivotNumber = _pivotNumber.ToString(); _syncConfig.PivotHash = scenario.Blocks.Last().Hash.ToString(); _feed = new FastReceiptsSyncFeed( _selector, _specProvider, _blockTree, _receiptStorage, _syncPeerPool, _syncConfig, _syncReport, LimboLogs.Instance); _feed.LagBehindBodies = 0; _blockTree.Genesis.Returns(scenario.Blocks[0].Header); _blockTree.FindBlock(Keccak.Zero, BlockTreeLookupOptions.None) .ReturnsForAnyArgs(ci => scenario.BlocksByHash.ContainsKey(ci.Arg <Keccak>()) ? scenario.BlocksByHash[ci.Arg <Keccak>()] : null); _receiptStorage.LowestInsertedReceiptBlock.Returns((long?)null); _blockTree.LowestInsertedBody.Returns(scenario.LowestInsertedBody); }
public void Setup() { _receiptStorage = Substitute.For <IReceiptStorage>(); _blockTree = Substitute.For <IBlockTree>(); _syncConfig = new SyncConfig { FastBlocks = true }; _syncConfig.PivotNumber = _pivotNumber.ToString(); _syncConfig.PivotHash = Keccak.Zero.ToString(); _syncPeerPool = Substitute.For <ISyncPeerPool>(); _syncReport = Substitute.For <ISyncReport>(); _measuredProgress = new MeasuredProgress(); _measuredProgressQueue = new MeasuredProgress(); _syncReport.FastBlocksReceipts.Returns(_measuredProgress); _syncReport.ReceiptsInQueue.Returns(_measuredProgressQueue); _selector = Substitute.For <ISyncModeSelector>(); _feed = new FastReceiptsSyncFeed( _selector, _specProvider, _blockTree, _receiptStorage, _syncPeerPool, _syncConfig, _syncReport, LimboLogs.Instance); }
public void Should_throw_when_fast_blocks_not_enabled() { _syncConfig = new SyncConfig { FastBlocks = false }; Assert.Throws <InvalidOperationException>( () => _feed = new FastReceiptsSyncFeed( _selector, _specProvider, _blockTree, _receiptStorage, _syncPeerPool, _syncConfig, _syncReport, LimboLogs.Instance)); }
private void StartFastBlocksComponents() { FastBlocksPeerAllocationStrategyFactory fastFactory = new FastBlocksPeerAllocationStrategyFactory(); _headersFeed = new FastHeadersSyncFeed(_blockTree, _syncPeerPool, _syncConfig, _syncReport, _logManager); HeadersSyncDispatcher headersDispatcher = new HeadersSyncDispatcher(_headersFeed, _syncPeerPool, fastFactory, _logManager); Task headersTask = headersDispatcher.Start(_syncCancellation.Token).ContinueWith(t => { if (t.IsFaulted) { if (_logger.IsError) { _logger.Error("Fast blocks headers downloader failed", t.Exception); } } else { if (_logger.IsInfo) { _logger.Info("Fast blocks headers task completed."); } } }); if (_syncConfig.DownloadHeadersInFastSync) { if (_syncConfig.DownloadBodiesInFastSync) { _bodiesFeed = new FastBodiesSyncFeed(_blockTree, _syncPeerPool, _syncConfig, _syncReport, _logManager); BodiesSyncDispatcher bodiesDispatcher = new BodiesSyncDispatcher(_bodiesFeed, _syncPeerPool, fastFactory, _logManager); Task bodiesTask = bodiesDispatcher.Start(_syncCancellation.Token).ContinueWith(t => { if (t.IsFaulted) { if (_logger.IsError) { _logger.Error("Fast bodies sync failed", t.Exception); } } else { if (_logger.IsInfo) { _logger.Info("Fast blocks bodies task completed."); } } }); } if (_syncConfig.DownloadReceiptsInFastSync) { FastReceiptsSyncFeed receiptsFeed = new FastReceiptsSyncFeed(_specProvider, _blockTree, _receiptStorage, _syncPeerPool, _syncConfig, _syncReport, _logManager); ReceiptsSyncDispatcher receiptsDispatcher = new ReceiptsSyncDispatcher(receiptsFeed, _syncPeerPool, fastFactory, _logManager); Task receiptsTask = receiptsDispatcher.Start(_syncCancellation.Token).ContinueWith(t => { if (t.IsFaulted) { if (_logger.IsError) { _logger.Error("Fast receipts sync failed", t.Exception); } } else { if (_logger.IsInfo) { _logger.Info("Fast blocks receipts task completed."); } } }); } } }