public void Can_stop() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(SyncBatchSize.Max); When.Syncing .Stop(); }
public void Can_reorg_on_hint_block_message() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(3); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddBlocksUpTo(3); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .AfterPeerIsAdded(peerB) .Wait() .After(() => peerB.AddBlocksUpTo(6)) .AfterHintBlockMessage(peerB.HeadBlock, peerB) .BestSuggestedHeaderIs(peerB.HeadHeader).Stop(); }
public void Can_sync_more_than_a_batch() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(SyncBatchSize.Max * 3); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .BestSuggestedHeaderIs(peerA.HeadHeader).Stop(); }
public void Can_sync_with_one_peer_straight_and_extend_chain() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(3); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .BestSuggestedHeaderIs(peerA.HeadHeader).Stop(); }
public void Will_remove_peer_when_init_fails() { SyncPeerMock peerA = new SyncPeerMock("A", true, true); peerA.AddBlocksUpTo(1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .WaitAMoment() .PeerCountIs(0).Stop(); }
public void Will_not_add_same_peer_twice() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .AfterPeerIsAdded(peerA) .WaitUntilInitialized() .PeerCountIs(1) .BestSuggestedBlockHasNumber(1).Stop(); }
public void Will_not_reorganize_more_than_max_reorg_length() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(BlockDownloader.MaxReorganizationLength + 1); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddBlocksUpTo(BlockDownloader.MaxReorganizationLength + 2, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .BestSuggestedHeaderIs(peerA.HeadHeader) .AfterPeerIsAdded(peerB) .BestSuggestedHeaderIs(peerA.HeadHeader).Stop(); }
public void Will_not_reorganize_on_same_chain_length() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(10); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddBlocksUpTo(10, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .BestSuggestedHeaderIs(peerA.HeadHeader) .AfterPeerIsAdded(peerB) .BestSuggestedHeaderIs(peerA.HeadHeader).Stop(); }
public void Can_reorg_based_on_total_difficulty() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(10); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddHighDifficultyBlocksUpTo(6, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .BestSuggestedHeaderIs(peerA.HeadHeader) .AfterPeerIsAdded(peerB) .BestSuggestedHeaderIs(peerB.HeadHeader).Stop(); }
public void Can_reorg_on_add_peer() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(SyncBatchSize.Max); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddBlocksUpTo(SyncBatchSize.Max * 2, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .BestSuggestedHeaderIs(peerA.HeadHeader) .AfterPeerIsAdded(peerB) .BestSuggestedHeaderIs(peerB.HeadHeader).Stop(); }
public void Can_sync_when_best_peer_is_timing_out() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(1); SyncPeerMock badPeer = new SyncPeerMock("B", false, false, true); badPeer.AddBlocksUpTo(20); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(badPeer) .WaitUntilInitialized() .AfterPeerIsAdded(peerA) .BestSuggestedBlockHasNumber(1).Stop(); }
public void Will_inform_connecting_peer_about_the_alternative_branch_with_same_difficulty() { if (_synchronizerType == SynchronizerType.Fast) { return; } SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(2); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddBlocksUpTo(2, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .BestSuggestedBlockHasNumber(2) .AfterPeerIsAdded(peerB) .WaitUntilInitialized() .Stop(); Assert.AreNotEqual(peerB.HeadBlock.Hash, peerA.HeadBlock.Hash); Block peerBNewBlock = null; SpinWait.SpinUntil(() => { bool receivedBlock = peerB.ReceivedBlocks.TryPeek(out peerBNewBlock); return(receivedBlock && peerBNewBlock.Hash == peerA.HeadBlock.Hash); }, WaitTime); if (_synchronizerType == SynchronizerType.Eth2Merge) { Assert.IsNull(peerBNewBlock); Assert.AreNotEqual(peerB.HeadBlock.Hash, peerA.HeadBlock.Hash); } else { Assert.AreEqual(peerBNewBlock?.Header.Hash !, peerA.HeadBlock.Hash); } }
public void Can_extend_chain_on_hint_block_when_high_difficulty_low_number() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(10); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddHighDifficultyBlocksUpTo(5, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .Wait() .AfterPeerIsAdded(peerB) .Wait() .After(() => peerB.AddHighDifficultyBlocksUpTo(6, 0, 1)) .AfterHintBlockMessage(peerB.HeadBlock, peerB) .BestSuggestedHeaderIs(peerB.HeadHeader).Stop(); }