public async Task Retrieves_missing_blocks_in_batches() { _remoteBlockTree = Build.A.BlockTree(_genesisBlock).OfChainLength(SynchronizationManager.MaxBatchSize * 2).TestObject; ISynchronizationPeer peer = new SynchronizationPeerMock(_remoteBlockTree); ManualResetEvent resetEvent = new ManualResetEvent(false); _manager.SyncEvent += (sender, args) => { if (args.SyncStatus == SyncStatus.Completed || args.SyncStatus == SyncStatus.Failed) { resetEvent.Set(); } }; _manager.Start(); Task addPeerTask = _manager.AddPeer(peer); Task firstToComplete = await Task.WhenAny(addPeerTask, Task.Delay(_standardTimeoutUnit)); Assert.AreSame(addPeerTask, firstToComplete); resetEvent.WaitOne(_standardTimeoutUnit); Assert.AreEqual(SynchronizationManager.MaxBatchSize * 2 - 1, (int)_blockTree.BestSuggested.Number); }
public async Task Retrieves_missing_blocks_in_batches() { _remoteBlockTree = Build.A.BlockTree(_genesisBlock).OfChainLength(SynchronizationManager.BatchSize * 2).TestObject; ISynchronizationPeer peer = new SynchronizationPeerMock(_remoteBlockTree); ManualResetEvent resetEvent = new ManualResetEvent(false); _manager.SyncEvent += (sender, args) => { resetEvent.Set(); }; Task addPeerTask = _manager.AddPeer(peer); Task firstToComplete = await Task.WhenAny(addPeerTask, Task.Delay(2000)); Assert.AreSame(addPeerTask, firstToComplete); _manager.Start(); resetEvent.WaitOne(TimeSpan.FromMilliseconds(2000)); Assert.AreEqual(SynchronizationManager.BatchSize * 2 - 1, (int)_blockTree.BestSuggested.Number); }