election_tests.rs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. use scopeguard::defer;
  2. use test_configs::{make_config, raft::config};
  3. #[test]
  4. fn initial_election() -> config::Result<()> {
  5. const SERVERS: usize = 3;
  6. let cfg = make_config!(SERVERS, false);
  7. defer!(cfg.cleanup());
  8. cfg.begin("Test (2A): initial election");
  9. cfg.check_one_leader()?;
  10. config::sleep_millis(50);
  11. let first_term = cfg.check_terms()?;
  12. config::sleep_election_timeouts(2);
  13. let second_term = cfg.check_terms()?;
  14. if first_term != second_term {
  15. eprintln!("Warning: term change even though there were no failures");
  16. }
  17. cfg.check_one_leader()?;
  18. cfg.end();
  19. Ok(())
  20. }
  21. #[test]
  22. fn re_election() -> config::Result<()> {
  23. const SERVERS: usize = 3;
  24. let cfg = make_config!(SERVERS, false);
  25. defer!(cfg.cleanup());
  26. cfg.begin("Test (2A): election after network failure");
  27. let leader_one = cfg.check_one_leader()?;
  28. cfg.disconnect(leader_one);
  29. cfg.check_one_leader()?;
  30. cfg.connect(leader_one);
  31. let leader_two = cfg.check_one_leader()?;
  32. let other = (leader_two + 1) % SERVERS;
  33. cfg.disconnect(leader_two);
  34. cfg.disconnect(other);
  35. cfg.check_no_leader()?;
  36. cfg.connect(other);
  37. cfg.check_one_leader()?;
  38. cfg.connect(leader_two);
  39. cfg.check_one_leader()?;
  40. cfg.end();
  41. Ok(())
  42. }