Exemplo n.º 1
0
        public void DeltasDao_Deltas_Should_Be_Convertible()
        {
            var previousHash = _hashProvider.ComputeMultiHash(Encoding.UTF8.GetBytes("previousHash"));

            var original = DeltaHelper.GetDelta(_hashProvider, previousHash);

            var messageDao  = original.ToDao <Delta, DeltaDao>(_mapperProvider);
            var reconverted = messageDao.ToProtoBuff <DeltaDao, Delta>(_mapperProvider);

            original.Should().Be(reconverted);
        }
        private Delta CreateAndExpectDeltaFromCache(MultiHash hash)
        {
            var delta = DeltaHelper.GetDelta(_hashProvider);

            _deltaCache.TryGetOrAddConfirmedDelta(Arg.Is(hash), out Arg.Any <Delta>())
            .Returns(ci =>
            {
                ci[1] = delta;
                return(true);
            });
            return(delta);
        }
Exemplo n.º 3
0
            public BadDeltas()
            {
                var hashProvider   = new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("blake2b-256"));
                var noPreviousHash = new Delta {
                    PreviousDeltaDfsHash = new byte[0].ToByteString()
                };
                var noMerkleRoot = DeltaHelper.GetDelta(hashProvider, merkleRoot: new byte[0]);

                AddRow(noMerkleRoot, typeof(InvalidDataException));
                AddRow(noPreviousHash, typeof(InvalidDataException));
                AddRow(null as Delta, typeof(ArgumentNullException));
            }
Exemplo n.º 4
0
        public void TryReadDeltaFromDfs_Should_Return_True_When_Hash_Found_On_Dfs_And_Delta_Is_Valid()
        {
            var cid           = _hashProvider.ComputeUtf8MultiHash("good hash").CreateCid();
            var matchingDelta = DeltaHelper.GetDelta(_hashProvider);

            _dfs.ReadAsync(cid, CancellationToken.None)
            .Returns(matchingDelta.ToByteArray().ToMemoryStream());

            var found = _dfsReader.TryReadDeltaFromDfs(cid, out var delta, CancellationToken.None);

            found.Should().BeTrue();
            delta.Should().Be(matchingDelta);
        }
Exemplo n.º 5
0
        public void TryReadDeltaFromDfs_Should_Pass_Cancellation_Token()
        {
            var cid = _hashProvider.ComputeUtf8MultiHash("good hash").CreateCid();
            var cancellationToken = new CancellationToken();

            var matchingDelta = DeltaHelper.GetDelta(_hashProvider);

            _dfs.ReadAsync(cid, CancellationToken.None)
            .Returns(matchingDelta.ToByteArray().ToMemoryStream());

            _dfsReader.TryReadDeltaFromDfs(cid, out _, CancellationToken.None);

            _dfs.Received(1)?.ReadAsync(Arg.Is(cid), Arg.Is(cancellationToken));
        }
Exemplo n.º 6
0
        private Dictionary <Cid, Delta> BuildChainedDeltas(int chainSize)
        {
            var chainedDeltas = Enumerable.Range(0, chainSize + 1).ToDictionary(
                i => _hashProvider.ComputeUtf8MultiHash(i.ToString()).CreateCid(),
                i =>
            {
                var previousHash = _hashProvider.ComputeUtf8MultiHash((i - 1).ToString()).CreateCid();
                var delta        = DeltaHelper.GetDelta(_hashProvider, previousHash);
                return(delta);
            });

            _output.WriteLine("chain is:");
            _output.WriteLine(string.Join(Environment.NewLine,
                                          chainedDeltas.Select((c, i) =>
                                                               $"{i}: current {c.Key} | previous {c.Value.PreviousDeltaDfsHash.ToByteArray().ToCid()}")));
            return(chainedDeltas);
        }
Exemplo n.º 7
0
        public void TryReadDeltaFromDfs_Should_Return_False_When_Hash_Found_On_Dfs_And_Delta_Is_Not_Valid()
        {
            var cid           = _hashProvider.ComputeUtf8MultiHash("good hash").CreateCid();
            var matchingDelta = DeltaHelper.GetDelta(_hashProvider);

            matchingDelta.PreviousDeltaDfsHash = ByteString.Empty;

            new Action(() => matchingDelta.IsValid()).Should()
            .Throw <InvalidDataException>("otherwise this test is useless");

            _dfs.ReadAsync(cid, CancellationToken.None)
            .Returns(matchingDelta.ToByteArray().ToMemoryStream());

            var found = _dfsReader.TryReadDeltaFromDfs(cid, out var delta, CancellationToken.None);

            found.Should().BeFalse();
            delta.Should().BeNull();
        }
        public void TryGetDelta_Should_Not_Hit_The_Dfs_Or_Store_Delta_When_Delta_Is_In_Cache()
        {
            _memoryCache.ClearReceivedCalls(); // needed because of the CreateEntry call from the DeltaCache .ctor
            var deltaFromCache = DeltaHelper.GetDelta(_hashProvider);
            var cid            = CidHelper.CreateCid(_hashProvider.ComputeUtf8MultiHash("abc"));

            _memoryCache.TryGetValue(Arg.Is(cid.Hash), out Arg.Any <Delta>())
            .Returns(ci =>
            {
                ci[1] = deltaFromCache;
                return(true);
            });

            var found = _deltaCache.TryGetOrAddConfirmedDelta(cid.Hash, out var delta);

            delta.Should().Be(deltaFromCache);
            found.Should().BeTrue();

            _dfsReader.DidNotReceiveWithAnyArgs().TryReadDeltaFromDfs(default, out _);