public void ProcessPendingStorage_PushToRepo_IBD_InMemory() { var blocks = this.CreateBlocks(15); using (var fluent = new FluentBlockStoreLoop(CreateDataFolder(this)).AsIBD()) { // Push 5 blocks to the repository fluent.BlockRepository.PutAsync(blocks.Take(5).Last().GetHash(), blocks.Take(5).ToList()).GetAwaiter().GetResult(); // The chain has 15 blocks appended var chain = new ConcurrentChain(blocks[0].Header); this.AppendBlocksToChain(chain, blocks.Skip(1).Take(14)); // Create block store loop fluent.Create(chain); //Set the store's tip fluent.Loop.SetStoreTip(fluent.Loop.Chain.GetBlock(blocks.Take(5).Last().GetHash())); // Add chained blocks 5 - 14 to PendingStorage for (int i = 5; i <= 14; i++) { this.AddBlockToPendingStorage(fluent.Loop, blocks[i]); } //Start processing pending blocks from block 5 var nextChainedBlock = fluent.Loop.Chain.GetBlock(blocks[5].GetHash()); var processPendingStorageStep = new ProcessPendingStorageStep(fluent.Loop, this.LoggerFactory.Object); processPendingStorageStep.ExecuteAsync(nextChainedBlock, new CancellationToken(), false).GetAwaiter().GetResult(); Assert.Equal(blocks[14].GetHash(), fluent.Loop.BlockRepository.BlockHash); Assert.Equal(blocks[14].GetHash(), fluent.Loop.StoreTip.HashBlock); } }
public void ProcessPendingStorage_WithPendingBlocks_PushToRepoBeforeDownloadingNewBlocks() { var blocks = CreateBlocks(15); using (var fluent = new FluentBlockStoreLoop()) { fluent.WithConcreteRepository(TestBase.AssureEmptyDirAsDataFolder(@"BlockStore\ProcessPendingStorage_Integration")); // Push 5 blocks to the repository fluent.BlockRepository.PutAsync(blocks.Take(5).Last().GetHash(), blocks.Take(5).ToList()).GetAwaiter().GetResult(); // The chain has 10 blocks appended var chain = new ConcurrentChain(blocks[0].Header); AppendBlocksToChain(chain, blocks.Skip(1).Take(9)); // Create block store loop fluent.Create(chain); // Add chained blocks 5 - 9 to PendingStorage AddBlockToPendingStorage(fluent.Loop, blocks[5]); AddBlockToPendingStorage(fluent.Loop, blocks[6]); AddBlockToPendingStorage(fluent.Loop, blocks[7]); AddBlockToPendingStorage(fluent.Loop, blocks[8]); AddBlockToPendingStorage(fluent.Loop, blocks[9]); //Start processing pending blocks from block 5 var nextChainedBlock = fluent.Loop.Chain.GetBlock(blocks[5].GetHash()); var processPendingStorageStep = new ProcessPendingStorageStep(fluent.Loop, this.loggerFactory); processPendingStorageStep.ExecuteAsync(nextChainedBlock, new CancellationToken(), false).GetAwaiter().GetResult(); Assert.Equal(blocks[9].GetHash(), fluent.Loop.BlockRepository.BlockHash); Assert.Equal(blocks[9].GetHash(), fluent.Loop.StoreTip.HashBlock); } }
public void CanExecute_TryPending() { // Create 15 blocks var blocks = CreateBlocks(15); using (var blockRepository = new BlockRepository(Network.Main, TestBase.AssureEmptyDirAsDataFolder(@"BlockStore\CanExecute_TryPending"))) { // Push 5 blocks to the repository blockRepository.PutAsync(blocks.Take(5).Last().GetHash(), blocks.Take(5).ToList()).GetAwaiter().GetResult(); // The chain has 10 blocks appended var chain = new ConcurrentChain(blocks[0].Header); AppendBlocks(chain, blocks.Skip(1).Take(9)); // Create block store loop var blockStoreLoop = CreateBlockStoreLoop(chain, blockRepository, @"BlockStore\CanExecute_TryPending"); // Add chained blocks 5 - 9 to PendingStorage AddToPendingStorage(blockStoreLoop, blocks[5]); AddToPendingStorage(blockStoreLoop, blocks[6]); AddToPendingStorage(blockStoreLoop, blocks[7]); AddToPendingStorage(blockStoreLoop, blocks[8]); AddToPendingStorage(blockStoreLoop, blocks[9]); //Start processing pending blocks from block 5 var nextChainedBlock = blockStoreLoop.Chain.GetBlock(blocks[5].GetHash()); var processPendingStorageStep = new ProcessPendingStorageStep(blockStoreLoop); processPendingStorageStep.ExecuteAsync(nextChainedBlock, new CancellationToken(), false).GetAwaiter().GetResult(); Assert.Equal(blocks[9].GetHash(), blockStoreLoop.BlockRepository.BlockHash); Assert.Equal(blocks[9].GetHash(), blockStoreLoop.StoreTip.HashBlock); } }
public void ProcessPendingStorage_PushToRepo_BeforeDownloadingNewBlocks() { var blocks = CreateBlocks(15); using (var fluent = new FluentBlockStoreLoop().AsIBD()) { fluent.WithConcreteRepository(Path.Combine(AppContext.BaseDirectory, "BlockStore", "ProcessPendingStorage_Integration")); // Push 5 blocks to the repository fluent.BlockRepository.PutAsync(blocks.Take(5).Last().GetHash(), blocks.Take(5).ToList()).GetAwaiter().GetResult(); // The chain has 15 blocks appended var chain = new ConcurrentChain(blocks[0].Header); AppendBlocksToChain(chain, blocks.Skip(1).Take(14)); // Create block store loop fluent.Create(chain); //Set the store's tip fluent.Loop.SetStoreTip(fluent.Loop.Chain.GetBlock(blocks.Take(5).Last().GetHash())); // Add chained blocks 5 - 14 to PendingStorage for (int i = 5; i <= 14; i++) { AddBlockToPendingStorage(fluent.Loop, blocks[i]); } //Start processing pending blocks from block 5 var nextChainedBlock = fluent.Loop.Chain.GetBlock(blocks[5].GetHash()); var processPendingStorageStep = new ProcessPendingStorageStep(fluent.Loop, this.loggerFactory); processPendingStorageStep.ExecuteAsync(nextChainedBlock, new CancellationToken(), false).GetAwaiter().GetResult(); Assert.Equal(blocks[14].GetHash(), fluent.Loop.BlockRepository.BlockHash); Assert.Equal(blocks[14].GetHash(), fluent.Loop.StoreTip.HashBlock); } }