public void Can_stop() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(QueueBasedSyncManager.MaxBatchSize, 0, 0); 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) .Wait() .BestSuggested.HeaderIs(peerB.HeadHeader).Stop(); }
public void Can_sync_more_than_a_batch() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(QueueBasedSyncManager.MaxBatchSize * 3, 0, 0); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .Wait() .BestSuggested.HeaderIs(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 Can_sync_with_one_peer_straight_and_extend_chain() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(3); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .Wait() .BestSuggested.HeaderIs(peerA.HeadHeader).Stop(); }
public void Will_not_add_same_peer_twice() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .AfterPeerIsAdded(peerA) .WaitAMoment() .PeerCountIs(1) .BestSuggested.BlockHasNumber(1).Stop(); }
public void Will_ignore_new_block_that_is_far_ahead() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(1); SyncPeerMock badPeer = new SyncPeerMock("B", false, true); badPeer.AddBlocksUpTo(20); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(badPeer) .Wait() .AfterPeerIsAdded(peerA) .Wait() .BestSuggested.BlockHasNumber(1).Stop(); }
public void Will_not_reorganize_more_than_max_reorg_length() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(QueueBasedSyncManager.MaxReorganizationLength + 1, 0, 0); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddBlocksUpTo(QueueBasedSyncManager.MaxReorganizationLength + 2, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .Wait() .BestSuggested.HeaderIs(peerA.HeadHeader) .AfterPeerIsAdded(peerB) .Wait() .BestSuggested.HeaderIs(peerA.HeadHeader).Stop(); }
public void Will_not_reorganize_on_same_chain_length() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(10, 0, 0); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddBlocksUpTo(10, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .Wait() .BestSuggested.HeaderIs(peerA.HeadHeader) .AfterPeerIsAdded(peerB) .Wait() .BestSuggested.HeaderIs(peerA.HeadHeader).Stop(); }
public void Can_reorg_based_on_total_difficulty() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(10, 0, 0); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddHighDifficultyBlocksUpTo(6, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .Wait() .BestSuggested.HeaderIs(peerA.HeadHeader) .AfterPeerIsAdded(peerB) .Wait() .BestSuggested.HeaderIs(peerB.HeadHeader).Stop(); }
public void Can_reorg_on_add_peer() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(QueueBasedSyncManager.MaxBatchSize, 0, 0); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddBlocksUpTo(QueueBasedSyncManager.MaxBatchSize * 2, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .Wait() .BestSuggested.HeaderIs(peerA.HeadHeader) .AfterPeerIsAdded(peerB) .Wait() .BestSuggested.HeaderIs(peerB.HeadHeader).Stop(); }
public void Can_extend_chain_on_new_block_when_high_difficulty_low_number() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(10, 0, 0); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddHighDifficultyBlocksUpTo(6, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .Wait() .AfterPeerIsAdded(peerB) .Wait() .After(() => peerB.AddHighDifficultyBlocksUpTo(6, 0, 1)) .AfterNewBlockMessage(peerB.HeadBlock, peerB) .BestSuggested.HeaderIs(peerB.HeadHeader).Stop(); }
public void Will_inform_connecting_peer_about_the_alternative_branch_with_same_difficulty() { SyncPeerMock peerA = new SyncPeerMock("A"); peerA.AddBlocksUpTo(2); SyncPeerMock peerB = new SyncPeerMock("B"); peerB.AddBlocksUpTo(2, 0, 1); When.Syncing .AfterProcessingGenesis() .AfterPeerIsAdded(peerA) .Wait() .AfterPeerIsAdded(peerB) .Wait() .BestSuggested.BlockHasNumber(2).Stop(); Assert.AreNotEqual(peerB.HeadBlock.Hash, peerA.HeadBlock.Hash); Assert.AreEqual(peerB.ReceivedBlocks.Peek().Hash, peerA.HeadBlock.Hash); }