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); }
/// <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); }
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); }
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); }