public void CheckNextChainedBlockExists_WithNextChainedBlock_Exists_SetStoreTipAndBlockHash_InMemory() { var blocks = this.CreateBlocks(5); using (var fluent = new FluentBlockStoreLoop(CreateDataFolder(this))) { // Push 5 blocks to the repository fluent.BlockRepository.PutAsync(blocks.Last().GetHash(), blocks).GetAwaiter().GetResult(); // The chain has 4 blocks appended var chain = new ConcurrentChain(blocks[0].Header); this.AppendBlocksToChain(chain, blocks.Skip(1).Take(3)); // Create the last chained block without appending to the chain var block03 = chain.GetBlock(blocks[3].GetHash()); var block04 = new ChainedBlock(blocks[4].Header, blocks[4].Header.GetHash(), block03); fluent.Create(chain); Assert.Null(fluent.Loop.StoreTip); var nextChainedBlock = block04; var checkExistsStep = new CheckNextChainedBlockExistStep(fluent.Loop, this.LoggerFactory.Object); checkExistsStep.ExecuteAsync(nextChainedBlock, new CancellationToken(), false).GetAwaiter().GetResult(); var options = NetworkOptions.TemporaryOptions; Assert.Equal(fluent.Loop.StoreTip.Header.GetHash(options), block04.Header.GetHash(options)); Assert.Equal(fluent.Loop.BlockRepository.BlockHash, block04.Header.GetHash(options)); } }
public void CheckNextChainedBlockExists_WithNextChainedBlock_Exists_SetStoreTipAndBlockHash() { var blocks = this.CreateBlocks(5); using (var fluent = new FluentBlockStoreLoop()) { fluent.WithConcreteRepository(Path.Combine(AppContext.BaseDirectory, "BlockStore", "CheckNextChainedBlockExists_Integration")); // Push 5 blocks to the repository fluent.BlockRepository.PutAsync(blocks.Last().GetHash(), blocks).GetAwaiter().GetResult(); // The chain has 4 blocks appended var chain = new ConcurrentChain(blocks[0].Header); this.AppendBlocksToChain(chain, blocks.Skip(1).Take(3)); // Create the last chained block without appending to the chain var block03 = chain.GetBlock(blocks[3].GetHash()); var block04 = new ChainedBlock(blocks[4].Header, blocks[4].Header.GetHash(), block03); fluent.Create(chain); Assert.Null(fluent.Loop.StoreTip); var nextChainedBlock = block04; var checkExistsStep = new CheckNextChainedBlockExistStep(fluent.Loop, this.loggerFactory); checkExistsStep.ExecuteAsync(nextChainedBlock, new CancellationToken(), false).GetAwaiter().GetResult(); Assert.Equal(fluent.Loop.StoreTip.Header.GetHash(), block04.Header.GetHash()); Assert.Equal(fluent.Loop.BlockRepository.BlockHash, block04.Header.GetHash()); } }
public void CanExecute_CheckNextChainedBlockExistStep() { var blocks = CreateBlocks(5); using (var blockRepository = new BlockRepository(Network.Main, TestBase.AssureEmptyDirAsDataFolder(@"BlockStore\CanExecute_CheckNextChainedBlockExistStep"))) { // Push 5 blocks to the repository blockRepository.PutAsync(blocks.Last().GetHash(), blocks).GetAwaiter().GetResult(); // The chain has 4 blocks appended var chain = new ConcurrentChain(blocks[0].Header); AppendBlocks(chain, blocks.Skip(1).Take(3)); // Create the last chained block without appending to the chain var block03 = chain.GetBlock(blocks[3].GetHash()); var block04 = new ChainedBlock(blocks[4].Header, blocks[4].Header.GetHash(), block03); var blockStoreLoop = CreateBlockStoreLoop(chain, blockRepository, @"BlockStore\CanExecute_CheckNextChainedBlockExistStep"); Assert.Null(blockStoreLoop.StoreTip); var nextChainedBlock = block04; var checkExistsStep = new CheckNextChainedBlockExistStep(blockStoreLoop); checkExistsStep.ExecuteAsync(nextChainedBlock, new CancellationToken(), false).GetAwaiter().GetResult(); Assert.Equal(blockStoreLoop.StoreTip.Header.GetHash(), block04.Header.GetHash()); Assert.Equal(blockStoreLoop.BlockRepository.BlockHash, block04.Header.GetHash()); } }