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