public void TestSameBlock()
        {
            var walker = new BlockchainWalker();

            var path = walker.GetBlockchainPath(this.chainedHeaderA2, this.chainedHeaderA2, this.getChainedHeader);

            Assert.AreEqual(this.chainedHeaderA2, path.FromBlock);
            Assert.AreEqual(this.chainedHeaderA2, path.ToBlock);
            Assert.AreEqual(this.chainedHeaderA2, path.LastCommonBlock);

            Assert.AreEqual(0, path.RewindBlocks.Count);
            Assert.AreEqual(0, path.AdvanceBlocks.Count);
        }
        public void TestAdvanceFromGenesis()
        {
            var walker = new BlockchainWalker();

            var path = walker.GetBlockchainPath(this.chainedHeader0, this.chainedHeaderA4, this.getChainedHeader);

            Assert.AreEqual(this.chainedHeader0, path.FromBlock);
            Assert.AreEqual(this.chainedHeaderA4, path.ToBlock);
            Assert.AreEqual(this.chainedHeader0, path.LastCommonBlock);

            Assert.AreEqual(0, path.RewindBlocks.Count);

            Assert.AreEqual(4, path.AdvanceBlocks.Count);
            Assert.AreEqual(this.chainedHeader1, path.AdvanceBlocks[0]);
            Assert.AreEqual(this.chainedHeaderA2, path.AdvanceBlocks[1]);
            Assert.AreEqual(this.chainedHeaderA3, path.AdvanceBlocks[2]);
            Assert.AreEqual(this.chainedHeaderA4, path.AdvanceBlocks[3]);
        }
        public void TestChainMismatch()
        {
            var walker = new BlockchainWalker();

            walker.GetBlockchainPath(this.chainedHeaderA4, this.chainedHeaderX0, this.getChainedHeader);
        }
        public void TestRewindAndAdvanceSameHeight()
        {
            var walker = new BlockchainWalker();

            var path = walker.GetBlockchainPath(this.chainedHeaderA4, this.chainedHeaderB4, this.getChainedHeader);

            Assert.AreEqual(this.chainedHeaderA4, path.FromBlock);
            Assert.AreEqual(this.chainedHeaderB4, path.ToBlock);
            Assert.AreEqual(this.chainedHeader1, path.LastCommonBlock);

            Assert.AreEqual(3, path.RewindBlocks.Count);
            Assert.AreEqual(this.chainedHeaderA4, path.RewindBlocks[0]);
            Assert.AreEqual(this.chainedHeaderA3, path.RewindBlocks[1]);
            Assert.AreEqual(this.chainedHeaderA2, path.RewindBlocks[2]);

            Assert.AreEqual(3, path.AdvanceBlocks.Count);
            Assert.AreEqual(this.chainedHeaderB2, path.AdvanceBlocks[0]);
            Assert.AreEqual(this.chainedHeaderB3, path.AdvanceBlocks[1]);
            Assert.AreEqual(this.chainedHeaderB4, path.AdvanceBlocks[2]);
        }