()
| 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] |
nothing calls this directly
no test coverage detected