コード例 #1
0
        public async Task NewTipIsSelectedWhenBestTipProviderDisconnectsAsync()
        {
            var chain         = new ConcurrentChain(Network.StratisMain);
            var chainSelector = new BestChainSelector(chain, this.chainState.Object, new LoggerFactory());

            chain.SetTip(this.chainedHeaders[10]);

            ChainedHeader tipFromFirstPeer = this.chainedHeaders[15];

            chainSelector.TrySetAvailableTip(0, tipFromFirstPeer);
            Assert.Equal(chain.Tip, tipFromFirstPeer);

            ChainedHeader tipFromSecondPeer = this.chainedHeaders[18];

            chainSelector.TrySetAvailableTip(1, tipFromSecondPeer);
            Assert.Equal(chain.Tip, tipFromSecondPeer);

            //Disconnect second peer
            chainSelector.RemoveAvailableTip(1);

            await Task.Delay(100).ConfigureAwait(false);

            Assert.Equal(chain.Tip, tipFromFirstPeer);

            //Disconnect first peer
            chainSelector.RemoveAvailableTip(0);

            await Task.Delay(100).ConfigureAwait(false);

            Assert.Equal(chain.Tip, this.chainState.Object.ConsensusTip);
        }
コード例 #2
0
        /// <inheritdoc />
        public IFullNode Initialize(IFullNodeServiceProvider serviceProvider)
        {
            this.State = FullNodeState.Initializing;

            Guard.NotNull(serviceProvider, nameof(serviceProvider));

            this.Services = serviceProvider;

            this.logger = this.Services.ServiceProvider.GetService <ILoggerFactory>().CreateLogger(this.GetType().FullName);

            this.DataFolder         = this.Services.ServiceProvider.GetService <DataFolder>();
            this.DateTimeProvider   = this.Services.ServiceProvider.GetService <IDateTimeProvider>();
            this.Network            = this.Services.ServiceProvider.GetService <Network>();
            this.Settings           = this.Services.ServiceProvider.GetService <NodeSettings>();
            this.ChainBehaviorState = this.Services.ServiceProvider.GetService <IChainState>();
            this.Chain   = this.Services.ServiceProvider.GetService <ConcurrentChain>();
            this.Signals = this.Services.ServiceProvider.GetService <Signals.Signals>();
            this.InitialBlockDownloadState = this.Services.ServiceProvider.GetService <IInitialBlockDownloadState>();

            this.ConnectionManager = this.Services.ServiceProvider.GetService <IConnectionManager>();
            this.bestChainSelector = this.Services.ServiceProvider.GetService <BestChainSelector>();
            this.loggerFactory     = this.Services.ServiceProvider.GetService <NodeSettings>().LoggerFactory;

            this.AsyncLoopFactory = this.Services.ServiceProvider.GetService <IAsyncLoopFactory>();

            this.logger.LogInformation($"Full node initialized on {this.Network.Name}");

            this.State     = FullNodeState.Initialized;
            this.StartTime = this.DateTimeProvider.GetUtcNow();
            return(this);
        }
コード例 #3
0
        public async Task OneOfManyBestChainProvidersDisconnectsAsync()
        {
            var chain         = new ConcurrentChain(Network.StratisMain);
            var chainSelector = new BestChainSelector(chain, this.chainState.Object, new LoggerFactory());

            chain.SetTip(this.chainedHeaders[10]);

            ChainedHeader tip = this.chainedHeaders[15];

            chainSelector.TrySetAvailableTip(0, tip);
            chainSelector.TrySetAvailableTip(1, tip);
            chainSelector.TrySetAvailableTip(2, tip);

            Assert.Equal(chain.Tip, tip);

            chainSelector.RemoveAvailableTip(0);

            await Task.Delay(100).ConfigureAwait(false);

            Assert.Equal(chain.Tip, tip);
        }
コード例 #4
0
        public async Task CantSwitchToTipBelowConsensusAsync()
        {
            var chain         = new ConcurrentChain(Network.StratisMain);
            var chainSelector = new BestChainSelector(chain, this.chainState.Object, new LoggerFactory());

            chain.SetTip(this.chainedHeaders[10]);

            chainSelector.TrySetAvailableTip(0, this.chainedHeaders[15]);
            chainSelector.TrySetAvailableTip(1, this.chainedHeaders[2]);
            chainSelector.TrySetAvailableTip(2, this.chainedHeaders[3]);
            chainSelector.TrySetAvailableTip(3, this.chainedHeaders[4]);

            await Task.Delay(100).ConfigureAwait(false);

            Assert.Equal(chain.Tip, this.chainedHeaders[15]);

            chainSelector.RemoveAvailableTip(0);

            await Task.Delay(100).ConfigureAwait(false);

            Assert.Equal(chain.Tip, this.chainState.Object.ConsensusTip);
        }