public void CacheDeltasBetween_Should_Complete_When_LatestKnownDelta_Is_Found() { var sync = new Synchroniser(new SyncState(), _peerSyncManager, _deltaCache, _deltaHeightWatcher, _deltaHashProvider, _deltaDfsReader, _deltaIndexService, _mapperProvider, _userOutput, Substitute.For <ILogger>()); var chainSize = 7; var chain = BuildChainedDeltas(chainSize); SetCacheExpectations(chain); var hashes = chain.Keys.ToArray(); var latestHashIndex = 3; _userOutput.WriteLine($"Caching deltas between {hashes[latestHashIndex]} and {hashes.Last()}"); var cachedHashes = sync.CacheDeltasBetween(hashes[latestHashIndex], hashes.Last(), _cancellationToken).ToList(); var expectedResultLength = chainSize - latestHashIndex + 1; cachedHashes.Count.Should().Be(expectedResultLength); OutputCachedHashes(cachedHashes); cachedHashes.Should().BeEquivalentTo(hashes.TakeLast(expectedResultLength)); hashes.TakeLast(expectedResultLength - 1).Reverse().ToList().ForEach(h => { _deltaCache.Received(1).TryGetOrAddConfirmedDelta(h, out Arg.Any <Delta>(), _cancellationToken); }); }
public void CacheDeltasBetween_Should_Stop_When_One_Of_Deltas_Is_Missing() { var sync = new Synchroniser(new SyncState(), _peerSyncManager, _deltaCache, _deltaHeightWatcher, _deltaHashProvider, _deltaDfsReader, _deltaIndexService, _mapperProvider, _userOutput, Substitute.For <ILogger>()); var chainSize = 5; var chain = BuildChainedDeltas(chainSize); SetCacheExpectations(chain); var hashes = chain.Keys.ToArray(); var brokenChainIndex = 2; _deltaCache.TryGetOrAddConfirmedDelta(hashes[brokenChainIndex], out Arg.Any <Delta>()) .Returns(false); _userOutput.WriteLine($"chain is broken for {hashes[brokenChainIndex]}, it cannot be found on Dfs."); var cachedHashes = sync.CacheDeltasBetween(hashes.First(), hashes.Last(), _cancellationToken).ToList(); OutputCachedHashes(cachedHashes); cachedHashes.Count.Should().Be(chainSize - brokenChainIndex); hashes.TakeLast(chainSize - brokenChainIndex + 1).ToList().ForEach(h => { _deltaCache.Received(1).TryGetOrAddConfirmedDelta(h, out Arg.Any <Delta>(), _cancellationToken); }); }