MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / three_node_election

Function three_node_election

nodedb-raft/src/node/rpc/request_vote.rs:153–176  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

151
152 #[test]
153 fn three_node_election() {
154 let config1 = test_config(1, vec![2, 3]);
155 let config2 = test_config(2, vec![1, 3]);
156 let config3 = test_config(3, vec![1, 2]);
157
158 let mut node1 = RaftNode::new(config1, MemStorage::new());
159 let mut node2 = RaftNode::new(config2, MemStorage::new());
160 let mut node3 = RaftNode::new(config3, MemStorage::new());
161
162 node1.election_deadline = Instant::now() - Duration::from_millis(1);
163 node1.tick();
164 assert_eq!(node1.role(), NodeRole::Candidate);
165
166 let ready = node1.take_ready();
167 assert_eq!(ready.vote_requests.len(), 2);
168
169 let resp2 = node2.handle_request_vote(&ready.vote_requests[0].1);
170 let resp3 = node3.handle_request_vote(&ready.vote_requests[1].1);
171 assert!(resp2.vote_granted);
172 assert!(resp3.vote_granted);
173
174 node1.handle_request_vote_response(2, &resp2);
175 assert_eq!(node1.role(), NodeRole::Leader);
176 }
177
178 /// Observer never votes even when it receives a RequestVote RPC.
179 #[test]

Callers

nothing calls this directly

Calls 6

nowFunction · 0.85
take_readyMethod · 0.80
test_configFunction · 0.70
tickMethod · 0.45
handle_request_voteMethod · 0.45

Tested by

no test coverage detected