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))); }
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); }
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); }
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); }
public IReleaseSpec GetSpec() => GetSpec(_blockFinder.FindBestSuggestedHeader()?.Number ?? 0);