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)); }
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); }
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); }