예제 #1
0
        public async Task BroadcastAnnounce_Test()
        {
            var blockHeader = _kernelTestHelper.GenerateBlock(10, Hash.FromString("test")).Header;

            //old block
            blockHeader.Time = TimestampHelper.GetUtcNow() - TimestampHelper.DurationFromMinutes(20);
            await _networkService.BroadcastAnnounceAsync(blockHeader, false);

            //known block
            blockHeader.Time = TimestampHelper.GetUtcNow();
            await _networkService.BroadcastAnnounceAsync(blockHeader, false);

            //broadcast again
            blockHeader = _kernelTestHelper.GenerateBlock(11, Hash.FromString("new")).Header;
            await _networkService.BroadcastAnnounceAsync(blockHeader, false);
        }
        public async Task BroadcastAnnouncementTest()
        {
            var blockHeader = OsCoreTestHelper.CreateFakeBlockHeader(chainId: 1, height: 2);

            await _networkService.BroadcastAnnounceAsync(blockHeader);

            foreach (var peer in _testContext.MockedPeers)
            {
                peer.Verify(p => p.TryAddKnownBlock(blockHeader.GetHash()), Times.Once());
            }

            await _networkService.BroadcastAnnounceAsync(blockHeader);

            foreach (var peer in _testContext.MockedPeers)
            {
                peer.Verify(p => p.EnqueueAnnouncement(It.Is <BlockAnnouncement>(ba => ba.BlockHash == blockHeader.GetHash()),
                                                       It.IsAny <Action <NetworkException> >()), Times.Once());
            }
        }
예제 #3
0
        public Task HandleEventAsync(BlockAcceptedEvent eventData)
        {
            if (_syncStateService.SyncState == SyncState.Finished)
            {
                // if sync is finished we announce the block
                _networkService.BroadcastAnnounceAsync(eventData.Block.Header);
            }
            else if (_syncStateService.SyncState == SyncState.Syncing)
            {
                // if syncing and the block is higher the current target, try and update.
                if (_syncStateService.GetCurrentSyncTarget() <= eventData.Block.Header.Height)
                {
                    _taskQueueManager.Enqueue(async() => { await _syncStateService.UpdateSyncStateAsync(); },
                                              OSConstants.InitialSyncQueueName);
                }
            }

            return(Task.CompletedTask);
        }
예제 #4
0
        public async Task BroadcastAnnouncement_OldBlock_Test()
        {
            var blockHeader = OsCoreTestHelper.CreateFakeBlockHeader(chainId: 1, height: 2);

            blockHeader.Time = TimestampHelper.GetUtcNow() -
                               TimestampHelper.DurationFromMinutes(
                NetworkConstants.DefaultMaxBlockAgeToBroadcastInMinutes + 1);

            await _networkService.BroadcastAnnounceAsync(blockHeader);

            foreach (var peer in _testContext.MockedPeers)
            {
                peer.Verify(p => p.TryAddKnownBlock(blockHeader.GetHash()), Times.Never);
            }

            foreach (var peer in _testContext.MockedPeers)
            {
                peer.Verify(p => p.EnqueueAnnouncement(It.Is <BlockAnnouncement>(ba => ba.BlockHash == blockHeader.GetHash()),
                                                       It.IsAny <Action <NetworkException> >()), Times.Never);
            }
        }
예제 #5
0
        public async Task BroadcastAnnounceAsync_OnePeerThrows_ShouldNotBlockOthers()
        {
            int successfulBcasts = await _networkService.BroadcastAnnounceAsync(new BlockHeader());

            Assert.Equal(successfulBcasts, _peerPool.GetPeers().Count - 1);
        }