Beispiel #1
0
        public void FollowerShouldGrantVote()
        {
            _currentState = new CurrentState(Guid.NewGuid(), 1, default(Guid), 1, 0, default(Guid));
            var requestVoteRpc      = new RequestVoteBuilder().WithLastLogIndex(1).WithLastLogTerm(0).WithTerm(1).Build();
            var follower            = new Follower(_currentState, _fsm, _log, _random, _node, _settings, _rules, _peers);
            var requestVoteResponse = follower.Handle(requestVoteRpc);

            requestVoteResponse.VoteGranted.ShouldBe(true);
            requestVoteResponse.Term.ShouldBe(1);
        }
Beispiel #2
0
        public async Task FollowerShouldGrantVote()
        {
            _currentState = new CurrentState(Guid.NewGuid().ToString(), 1, default(string), 1, 0, default(string));
            var requestVoteRpc      = new RequestVoteBuilder().WithLastLogIndex(1).WithLastLogTerm(0).WithTerm(1).Build();
            var follower            = new Follower(_currentState, _fsm, _log, _random, _node, _settings, _rules, _peers, _loggerFactory.Object);
            var requestVoteResponse = await follower.Handle(requestVoteRpc);

            requestVoteResponse.VoteGranted.ShouldBe(true);
            requestVoteResponse.Term.ShouldBe(1);
        }
Beispiel #3
0
        public void FollowerShouldReplyFalseIfVotedForIsNotCandidateId()
        {
            _currentState = new CurrentState(Guid.NewGuid(), 1, Guid.NewGuid(), 1, 0, default(Guid));
            var requestVoteRpc      = new RequestVoteBuilder().WithCandidateId(Guid.NewGuid()).WithTerm(0).Build();
            var follower            = new Follower(_currentState, _fsm, _log, _random, _node, _settings, _rules, _peers);
            var requestVoteResponse = follower.Handle(requestVoteRpc);

            requestVoteResponse.VoteGranted.ShouldBe(false);
            requestVoteResponse.Term.ShouldBe(1);
        }
Beispiel #4
0
        public async Task FollowerShouldReplyFalseIfVotedForIsNotCandidateId()
        {
            _currentState = new CurrentState(Guid.NewGuid().ToString(), 1, Guid.NewGuid().ToString(), 1, 0, default(string));
            var requestVoteRpc      = new RequestVoteBuilder().WithCandidateId(Guid.NewGuid().ToString()).WithTerm(0).Build();
            var follower            = new Follower(_currentState, _fsm, _log, _random, _node, _settings, _rules, _peers, _loggerFactory.Object);
            var requestVoteResponse = await follower.Handle(requestVoteRpc);

            requestVoteResponse.VoteGranted.ShouldBe(false);
            requestVoteResponse.Term.ShouldBe(1);
        }
Beispiel #5
0
        public void FollowerShouldReplyFalseIfTermIsLessThanCurrentTerm()
        {
            _currentState = new CurrentState(Guid.NewGuid().ToString(), 1, default(string), 1, 0, default(string));
            var requestVoteRpc      = new RequestVoteBuilder().WithTerm(0).Build();
            var follower            = new Follower(_currentState, _fsm, _log, _random, _node, _settings, _rules, _peers);
            var requestVoteResponse = follower.Handle(requestVoteRpc);

            requestVoteResponse.VoteGranted.ShouldBe(false);
            requestVoteResponse.Term.ShouldBe(1);
        }
Beispiel #6
0
        public void ShouldUpdateVotedFor()
        {
            _node         = new NothingNode();
            _currentState = new CurrentState(Guid.NewGuid().ToString(), 0, default(string), 0, 0, default(string));
            var follower            = new Follower(_currentState, _fsm, _log, _random, _node, _settings, _rules, _peers);
            var requestVote         = new RequestVoteBuilder().WithCandidateId(Guid.NewGuid().ToString()).WithLastLogIndex(1).Build();
            var requestVoteResponse = follower.Handle(requestVote);

            follower.CurrentState.VotedFor.ShouldBe(requestVote.CandidateId);
        }
Beispiel #7
0
        public void ShouldVoteForNewCandidateInAnotherTermsElection()
        {
            _node         = new NothingNode();
            _currentState = new CurrentState(Guid.NewGuid().ToString(), 0, default(string), 0, 0, default(string));
            var candidate           = new Candidate(_currentState, _fsm, _peers, _log, _random, _node, _settings, _rules);
            var requestVote         = new RequestVoteBuilder().WithTerm(0).WithCandidateId(Guid.NewGuid().ToString()).WithLastLogIndex(1).Build();
            var requestVoteResponse = candidate.Handle(requestVote);

            candidate.CurrentState.VotedFor.ShouldBe(requestVote.CandidateId);
            requestVoteResponse.VoteGranted.ShouldBeTrue();
            requestVote         = new RequestVoteBuilder().WithTerm(1).WithCandidateId(Guid.NewGuid().ToString()).WithLastLogIndex(1).Build();
            requestVoteResponse = candidate.Handle(requestVote);
            requestVoteResponse.VoteGranted.ShouldBeTrue();
            candidate.CurrentState.VotedFor.ShouldBe(requestVote.CandidateId);
        }
Beispiel #8
0
        public async Task ShouldVoteForNewCandidateInAnotherTermsElection()
        {
            _node         = new NothingNode();
            _currentState = new CurrentState(Guid.NewGuid().ToString(), 0, default(string), 0, 0, default(string));
            var follower            = new Follower(_currentState, _fsm, _log, _random, _node, _settings, _rules, _peers, _loggerFactory.Object);
            var requestVote         = new RequestVoteBuilder().WithTerm(0).WithCandidateId(Guid.NewGuid().ToString()).WithLastLogIndex(1).Build();
            var requestVoteResponse = await follower.Handle(requestVote);

            follower.CurrentState.VotedFor.ShouldBe(requestVote.CandidateId);
            requestVoteResponse.VoteGranted.ShouldBeTrue();
            requestVote         = new RequestVoteBuilder().WithTerm(1).WithCandidateId(Guid.NewGuid().ToString()).WithLastLogIndex(1).Build();
            requestVoteResponse = await follower.Handle(requestVote);

            requestVoteResponse.VoteGranted.ShouldBeTrue();
            follower.CurrentState.VotedFor.ShouldBe(requestVote.CandidateId);
        }