public void GetFavouriteDelta_should_return_lowest_hash_when_candidate_scores_are_equal() { using (var realCache = new MemoryCache(new MemoryCacheOptions())) { _voter = new DeltaVoter(realCache, _producersProvider, _peerSettings, _logger); var scoredCandidates = AddCandidatesToCacheAndVote(10, 110, realCache); scoredCandidates.Select(c => c.Score).Distinct().Count().Should().Be(1); scoredCandidates.Select(c => c.Candidate.Hash).Distinct().Count().Should().Be(2); scoredCandidates.Select(c => c.Candidate.PreviousDeltaDfsHash).Distinct().Count().Should().Be(1); var found = _voter.TryGetFavouriteDelta( scoredCandidates.First().Candidate.PreviousDeltaDfsHash.ToByteArray().ToCid(), out var favouriteCandidate); found.Should().BeTrue(); var expectedFavourite = scoredCandidates .OrderBy(c => c.Candidate.Hash.ToByteArray(), ByteUtil.ByteListMinSizeComparer.Default) .First(); // ReSharper disable once ReturnValueOfPureMethodIsNotUsed favouriteCandidate.Candidate.Hash.Equals(expectedFavourite.Candidate.Hash); } }
public void GetFavouriteDelta_should_return_null_on_unknown_previous_delta_hash() { using (var realCache = new MemoryCache(new MemoryCacheOptions())) { _voter = new DeltaVoter(realCache, _producersProvider, _peerSettings, _logger); AddCandidatesToCacheAndVote(10, 500, realCache); var found = _voter.TryGetFavouriteDelta(_hashProvider.ComputeMultiHash(ByteUtil.GenerateRandomByteArray(32)), out var favouriteCandidate); found.Should().BeFalse(); favouriteCandidate.Should().BeNull(); } }
public void GetFavouriteDelta_should_retrieve_favourite_delta() { using (var realCache = new MemoryCache(new MemoryCacheOptions())) { _voter = new DeltaVoter(realCache, _producersProvider, _peerSettings, _logger); var scoredCandidates = AddCandidatesToCacheAndVote(10, 500, realCache); scoredCandidates[1].Score.Should().BeGreaterThan(scoredCandidates[0].Score); var previousDeltaHash = _hashProvider.Cast(scoredCandidates[0].Candidate.PreviousDeltaDfsHash.ToByteArray()); var found = _voter.TryGetFavouriteDelta(previousDeltaHash, out var favouriteCandidate); found.Should().BeTrue(); favouriteCandidate.Candidate.PreviousDeltaDfsHash.ToByteArray().SequenceEqual(previousDeltaHash.ToArray()).Should().BeTrue(); favouriteCandidate.Candidate.Hash.ToByteArray().SequenceEqual(scoredCandidates[1].Candidate.Hash.ToByteArray()).Should().BeTrue(); favouriteCandidate.Candidate.ProducerId.Should().Be(scoredCandidates[1].Candidate.ProducerId); } }