Example #1
0
        public void TestRemoveBlockInvalid()
        {
            var fakeHeaders = new FakeHeaders();
            var header0     = fakeHeaders.GenesisChained();
            var header1     = fakeHeaders.NextChained();
            var header2     = fakeHeaders.NextChained();

            var chainBuilder = new ChainBuilder(new[] { header0, header1, header2 });

            // removing header 1 first should fail
            AssertMethods.AssertThrows <InvalidOperationException>(() => chainBuilder.RemoveBlock(header1));

            // remove header 2
            chainBuilder.RemoveBlock(header2);

            // removing header 0 with header 1 present should fail
            AssertMethods.AssertThrows <InvalidOperationException>(() => chainBuilder.AddBlock(header0));
        }
Example #2
0
        public void TestRemoveBlock()
        {
            var fakeHeaders = new FakeHeaders();
            var header0     = fakeHeaders.GenesisChained();
            var header1     = fakeHeaders.NextChained();

            var chainBuilder = new ChainBuilder(new[] { header0, header1 });

            // remove header 1 and verify
            chainBuilder.RemoveBlock(header1);
            CollectionAssert.AreEqual(new[] { header0 }, chainBuilder.Blocks);
            CollectionAssert.AreEquivalent(new Dictionary <UInt256, ChainedHeader> {
                { header0.Hash, header0 }
            }, chainBuilder.BlocksByHash);

            // remove header 0 and verify
            chainBuilder.RemoveBlock(header0);
            Assert.AreEqual(0, chainBuilder.Blocks.Count);
            Assert.AreEqual(0, chainBuilder.BlocksByHash.Count);
        }
Example #3
0
        public void Rollback(int count)
        {
            if (count > blocks.Count)
            {
                throw new InvalidOperationException();
            }

            for (var i = 0; i < count; i++)
            {
                blocks.RemoveAt(blocks.Count - 1);
                chain.RemoveBlock(chain.LastBlock);
            }

            Debug.Assert(chain.Height == blocks.Count - 1);
        }