Exemplo n.º 1
0
        public void CheckHealth_returns_expected_results([ValueSource(nameof(CheckHealthTestCases))] CheckHealthTest test)
        {
            IBlockFinder         blockFinder         = Substitute.For <IBlockFinder>();
            ISyncServer          syncServer          = Substitute.For <ISyncServer>();
            IBlockchainProcessor blockchainProcessor = Substitute.For <IBlockchainProcessor>();
            IBlockProducer       blockProducer       = Substitute.For <IBlockProducer>();
            IHealthHintService   healthHintService   = Substitute.For <IHealthHintService>();

            blockchainProcessor.IsProcessingBlocks(Arg.Any <ulong?>()).Returns(test.IsProcessingBlocks);
            blockProducer.IsProducingBlocks(Arg.Any <ulong?>()).Returns(test.IsProducingBlocks);
            syncServer.GetPeerCount().Returns(test.PeerCount);

            BlockHeaderBuilder GetBlockHeader(int blockNumber) => Build.A.BlockHeader.WithNumber(blockNumber);

            blockFinder.Head.Returns(new Block(GetBlockHeader(4).TestObject));
            if (test.IsSyncing)
            {
                blockFinder.FindBestSuggestedHeader().Returns(GetBlockHeader(15).TestObject);
            }
            else
            {
                blockFinder.FindBestSuggestedHeader().Returns(GetBlockHeader(2).TestObject);
            }

            IEthSyncingInfo   ethSyncingInfo    = new EthSyncingInfo(blockFinder);
            NodeHealthService nodeHealthService =
                new(syncServer, blockFinder, blockchainProcessor, blockProducer, new HealthChecksConfig(), healthHintService, ethSyncingInfo, test.IsMining);
            CheckHealthResult result = nodeHealthService.CheckHealth();

            Assert.AreEqual(test.ExpectedHealthy, result.Healthy);
            Assert.AreEqual(test.ExpectedMessage, FormatMessages(result.Messages.Select(x => x.Message)));
            Assert.AreEqual(test.ExpectedLongMessage, FormatMessages(result.Messages.Select(x => x.LongMessage)));
        }
Exemplo n.º 2
0
        public SyncingResult GetFullInfo()
        {
            SyncingResult result;
            long          bestSuggestedNumber = _blockFinder.FindBestSuggestedHeader().Number;

            long headNumberOrZero = _blockFinder.Head?.Number ?? 0;
            bool isSyncing        = bestSuggestedNumber > headNumberOrZero + 8;

            if (isSyncing)
            {
                result = new SyncingResult
                {
                    CurrentBlock  = headNumberOrZero,
                    HighestBlock  = bestSuggestedNumber,
                    StartingBlock = 0L,
                    IsSyncing     = true
                };
            }
            else
            {
                result = SyncingResult.NotSyncing;
            }

            return(result);
        }
Exemplo n.º 3
0
        public ResultWrapper <SyncingResult> eth_syncing()
        {
            SyncingResult result;
            long          bestSuggestedNumber = _blockFinder.FindBestSuggestedHeader().Number;

            long headNumberOrZero = _blockFinder.Head?.Number ?? 0;
            bool isSyncing        = bestSuggestedNumber > headNumberOrZero + 8;

            if (isSyncing)
            {
                result = new SyncingResult
                {
                    CurrentBlock  = headNumberOrZero,
                    HighestBlock  = bestSuggestedNumber,
                    StartingBlock = 0L,
                    IsSyncing     = true
                };
            }
            else
            {
                result = SyncingResult.NotSyncing;
            }

            return(ResultWrapper <SyncingResult> .Success(result));
        }
        public void IsSyncing_ReturnsExpectedResult(long bestHeader, long currentHead, bool expectedResult)
        {
            IBlockFinder blockFinder = Substitute.For <IBlockFinder>();

            blockFinder.FindBestSuggestedHeader().Returns(Build.A.BlockHeader.WithNumber(bestHeader).TestObject);
            blockFinder.Head.Returns(Build.A.Block.WithHeader(Build.A.BlockHeader.WithNumber(currentHead).TestObject).TestObject);
            EthSyncingInfo ethSyncingInfo = new(blockFinder);
            SyncingResult  syncingResult  = ethSyncingInfo.GetFullInfo();

            Assert.AreEqual(expectedResult, syncingResult.IsSyncing);
        }
Exemplo n.º 5
0
 public void Setup()
 {
     _logManager          = LimboLogs.Instance;
     _specProvider        = RopstenSpecProvider.Instance;
     _ethereumEcdsa       = new EthereumEcdsa(_specProvider.ChainId, _logManager);
     _noTxStorage         = NullTxStorage.Instance;
     _inMemoryTxStorage   = new InMemoryTxStorage();
     _persistentTxStorage = new PersistentTxStorage(new MemDb());
     _stateProvider       = new StateProvider(new TrieStore(new MemDb(), _logManager), new MemDb(), _logManager);
     _blockFinder         = Substitute.For <IBlockFinder>();
     _blockFinder.FindBestSuggestedHeader().Returns(Build.A.BlockHeader.WithNumber(10000000).TestObject);
 }
        public void GetFullInfo_WhenSyncing()
        {
            IBlockFinder blockFinder = Substitute.For <IBlockFinder>();

            blockFinder.FindBestSuggestedHeader().Returns(Build.A.BlockHeader.WithNumber(6178010L).TestObject);
            blockFinder.Head.Returns(Build.A.Block.WithHeader(Build.A.BlockHeader.WithNumber(6178000L).TestObject).TestObject);
            EthSyncingInfo ethSyncingInfo = new(blockFinder);
            SyncingResult  syncingResult  = ethSyncingInfo.GetFullInfo();

            Assert.AreEqual(true, syncingResult.IsSyncing);
            Assert.AreEqual(6178000L, syncingResult.CurrentBlock);
            Assert.AreEqual(6178010, syncingResult.HighestBlock);
            Assert.AreEqual(0, syncingResult.StartingBlock);
        }
Exemplo n.º 7
0
 public IReleaseSpec GetSpec() => GetSpec(_blockFinder.FindBestSuggestedHeader()?.Number ?? 0);