コード例 #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
        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);
        }
コード例 #3
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);
        }