public void Can_LIFO_When_History_N_Plus2()
        {
            var careTaker = new HastingsCareTaker();

            var subbedMemento1 = Substitute.For <IHastingsMemento>();

            subbedMemento1.Peer.Returns(PeerIdHelper.GetPeerId("step1"));
            careTaker.Add(subbedMemento1);

            var subbedMemento2 = Substitute.For <IHastingsMemento>();

            subbedMemento2.Peer.Returns(PeerIdHelper.GetPeerId("step2"));
            careTaker.Add(subbedMemento2);

            var subbedMemento3 = Substitute.For <IHastingsMemento>();

            subbedMemento3.Peer.Returns(PeerIdHelper.GetPeerId("step3"));
            careTaker.Add(subbedMemento3);

            var lastState1 = careTaker.Get();

            lastState1.Should().Be(subbedMemento3);
            careTaker.HastingMementoList.Count.Should().Be(2);
            careTaker.HastingMementoList.First().Should().Be(subbedMemento2);

            var lastState2 = careTaker.Get();

            lastState2.Should().Be(subbedMemento2);
            careTaker.HastingMementoList.Count.Should().Be(1);
            careTaker.HastingMementoList.First().Should().Be(subbedMemento1);
        }
Exemple #2
0
        public static IHastingsCareTaker MockCareTaker(IEnumerable <IHastingsMemento> history = default)
        {
            var careTaker = new HastingsCareTaker();

            history?.ToList().ForEach(m => { careTaker.Add(m); });

            return(careTaker);
        }
        public void Can_Get_From_HastingMementoList()
        {
            var careTaker     = new HastingsCareTaker();
            var subbedMemento = Substitute.For <IHastingsMemento>();

            careTaker.Add(subbedMemento);

            careTaker.HastingMementoList.Should().Contain(subbedMemento);
        }
        public void Can_Never_Take_Last_State_From_CareTaker()
        {
            var careTaker = new HastingsCareTaker();

            var subbedMemento = Substitute.For <IHastingsMemento>();

            careTaker.Add(subbedMemento);

            careTaker.Get();

            careTaker.HastingMementoList.Count.Should().Be(1);
        }
        public void Care_Taker_Can_Add_State_To_CareTaker()
        {
            var careTaker = new HastingsCareTaker();

            var subbedMemento = Substitute.For <IHastingsMemento>();

            careTaker.Add(subbedMemento);

            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            careTaker.HastingMementoList?.Contains(subbedMemento);
            careTaker.HastingMementoList.Should().HaveCount(1);
        }
        public void Can_Add_New_Mementos_To_Caretaker()
        {
            var careTaker = new HastingsCareTaker();

            var stack = new Stack <IHastingsMemento>();

            stack.Push(DiscoveryHelper.SubMemento(_ownNode));

            var history = DiscoveryHelper.MockMementoHistory(stack);

            history.ToList().ForEach(m => careTaker.Add(m));

            careTaker.HastingMementoList.Should().Contain(history);
        }
        public void Care_Taker_Can_Get_Last_State()
        {
            var careTaker = new HastingsCareTaker();

            var subbedMemento = Substitute.For <IHastingsMemento>();

            careTaker.Add(subbedMemento);
            careTaker.Add(subbedMemento);
            careTaker.HastingMementoList.Should().HaveCount(2);
            var previousState = careTaker.Get();

            previousState.Should().BeSameAs(subbedMemento);
            careTaker.HastingMementoList.Should().HaveCount(1);
        }
        public void Taking_From_Memento_List_Takes_LIFO()
        {
            var careTaker = new HastingsCareTaker();

            var stack = new Stack <IHastingsMemento>();

            stack.Push(DiscoveryHelper.SubMemento(_ownNode));

            var history = DiscoveryHelper.MockMementoHistory(stack);

            history.ToList().ForEach(m => careTaker.Add(m));

            careTaker.Get().Should().Be(history.Last());
            careTaker.HastingMementoList.First().Should().Be(history.First());
            careTaker.HastingMementoList.Count.Should().Be(history.Count - 1);
        }
        public void Evicted_Known_Ping_Message_Sets_Contacted_Neighbour_As_UnReachable_And_Can_RollBack_State()
        {
            var cacheEntriesByRequest = new Dictionary <ByteString, ICacheEntry>();

            var seedState  = DiscoveryHelper.MockSeedState(_ownNode, _settings);
            var seedOrigin = HastingsOriginator.Default;

            seedOrigin.RestoreMemento(seedState);
            var stateCareTaker = new HastingsCareTaker();
            var stateHistory   = new Stack <IHastingsMemento>();

            stateHistory.Push(seedState);

            stateHistory =
                DiscoveryHelper.MockMementoHistory(stateHistory, 5); //this isn't an angry pirate this is just 5

            stateHistory.Last().Neighbours.First().StateTypes = NeighbourStateTypes.Responsive;

            stateHistory.ToList().ForEach(i => stateCareTaker.Add(i));

            var stateCandidate = DiscoveryHelper.MockOriginator(default,
        public void Care_Taker_Should_Throw_Exception_Trying_To_Take_Last_State_From_Empty_CareTaker()
        {
            var careTaker = new HastingsCareTaker();

            Assert.Throws <InvalidOperationException>(() => { careTaker.Get(); });
        }
        public void Can_Get_Nothing_From_Empty_HastingMementoList()
        {
            var careTaker = new HastingsCareTaker();

            careTaker.HastingMementoList.Should().BeEmpty();
        }