public void Save_Account_State_To_Ledger_Repository()
        {
            _ledger = new LedgerService(_fakeRepository, _deltaHashProvider, _ledgerSynchroniser, _mempool, _logger);
            const int numAccounts = 10;

            for (var i = 0; i < numAccounts; i++)
            {
                var account = AccountHelper.GetAccount((UInt256)i * 5);
                _ledger.SaveAccountState(account);
            }

            _fakeRepository.Received(10).Add(Arg.Any <Account>());
        }
Ejemplo n.º 2
0
        public void Should_Reconcile_On_New_Delta_Hash()
        {
            var hash1   = _hashProvider.ComputeUtf8MultiHash("update").CreateCid();
            var hash2   = _hashProvider.ComputeUtf8MultiHash("update again").CreateCid();
            var updates = new[] { hash1, hash2 };

            _ledgerSynchroniser.CacheDeltasBetween(Arg.Is(_genesisHash), Arg.Is(hash1), default)
            .ReturnsForAnyArgs(new[] { hash2, hash1, _genesisHash });

            _deltaHashProvider.DeltaHashUpdates.Returns(updates.ToObservable(_testScheduler));

            _ledger = new LedgerService(_executor, _stateProvider, _storageProvider, new StateDb(), new StateDb(),
                                        _fakeRepository, _deltaHashProvider, _ledgerSynchroniser, _mempool, _mapperProvider, _logger);

            _testScheduler.Start();

            _ledger.LatestKnownDelta.Should().Be(_genesisHash);
        }
Ejemplo n.º 3
0
        public void Should_Delete_MempoolItems_On_New_Delta_Hash()
        {
            var sampleSize = 5;

            _mempool.Service.Returns(new MempoolService(new InMemoryRepository <PublicEntryDao, string>()));

            var hash    = _hashProvider.ComputeUtf8MultiHash("update").CreateCid();
            var updates = new[] { hash };

            _ledgerSynchroniser.CacheDeltasBetween(Arg.Is(_genesisHash), Arg.Is(hash), default)
            .ReturnsForAnyArgs(new[] { hash, _genesisHash });

            var allPublicEntries = GenerateSamplePublicTransactions(sampleSize * 2).ToList();

            //Add all public entries to the mempool
            allPublicEntries.Select(x => x.ToDao <PublicEntry, PublicEntryDao>(_mapperProvider)).ToList()
            .ForEach(x => _mempool.Service.CreateItem(x));

            //Only add half of all public entries to the delta
            var delta = new Delta
            {
                TimeStamp     = Timestamp.FromDateTime(DateTime.UtcNow),
                PublicEntries = { allPublicEntries.Take(sampleSize) }
            };

            _ledgerSynchroniser.DeltaCache.TryGetOrAddConfirmedDelta(Arg.Is(hash), out Arg.Any <Delta>()).Returns(x =>
            {
                x[1] = delta;
                return(true);
            });

            _deltaHashProvider.DeltaHashUpdates.Returns(updates.ToObservable(_testScheduler));

            _ledger = new LedgerService(_executor, _stateProvider, _storageProvider, new StateDb(), new StateDb(),
                                        _fakeRepository, _deltaHashProvider, _ledgerSynchroniser, _mempool, _mapperProvider, _logger);

            _testScheduler.Start();

            _mempool.Service.GetAll().Should().HaveCount(sampleSize);
        }