persist_tests.rs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #[macro_use]
  2. extern crate anyhow;
  3. extern crate bytes;
  4. extern crate labrpc;
  5. extern crate ruaft;
  6. mod config;
  7. #[test]
  8. fn persist() -> config::Result<()> {
  9. const SERVERS: usize = 5;
  10. let cfg = config::make_config(SERVERS, false);
  11. let _guard = cfg.deferred_cleanup();
  12. cfg.begin("Test (2C): basic persistence");
  13. cfg.one(11, SERVERS, true)?;
  14. // crash and re-start all
  15. for i in 0..SERVERS {
  16. cfg.start1(i)?;
  17. }
  18. for i in 0..SERVERS {
  19. cfg.disconnect(i);
  20. cfg.connect(i);
  21. }
  22. cfg.one(12, SERVERS, true)?;
  23. let leader1 = cfg.check_one_leader()?;
  24. cfg.disconnect(leader1);
  25. cfg.start1(leader1)?;
  26. cfg.connect(leader1);
  27. cfg.one(13, SERVERS, true)?;
  28. let leader2 = cfg.check_one_leader()?;
  29. cfg.disconnect(leader2);
  30. cfg.one(14, SERVERS - 1, true)?;
  31. cfg.start1(leader2)?;
  32. cfg.connect(leader2);
  33. // wait for leader2 to join before killing i3
  34. cfg.wait(4, SERVERS, None)?;
  35. let i3 = (cfg.check_one_leader()? + 1) % SERVERS;
  36. cfg.disconnect(i3);
  37. cfg.one(15, SERVERS - 1, true)?;
  38. cfg.start1(i3)?;
  39. cfg.connect(i3);
  40. cfg.one(16, SERVERS, true)?;
  41. cfg.end();
  42. drop(_guard);
  43. Ok(())
  44. }
  45. #[test]
  46. fn persist2() -> config::Result<()> {
  47. const SERVERS: usize = 5;
  48. let cfg = config::make_config(SERVERS, false);
  49. let _guard = cfg.deferred_cleanup();
  50. cfg.begin("Test (2C): more persistence");
  51. let mut index = 1;
  52. for _ in 0..5 {
  53. cfg.one(10 + index, SERVERS, true)?;
  54. index += 1;
  55. let leader1 = cfg.check_one_leader()?;
  56. cfg.disconnect((leader1 + 1) % SERVERS);
  57. cfg.disconnect((leader1 + 2) % SERVERS);
  58. cfg.one(10 + index, SERVERS - 2, true)?;
  59. index += 1;
  60. cfg.disconnect((leader1 + 0) % SERVERS);
  61. cfg.disconnect((leader1 + 3) % SERVERS);
  62. cfg.disconnect((leader1 + 4) % SERVERS);
  63. cfg.start1((leader1 + 1) % SERVERS)?;
  64. cfg.start1((leader1 + 2) % SERVERS)?;
  65. cfg.connect((leader1 + 1) % SERVERS);
  66. cfg.connect((leader1 + 2) % SERVERS);
  67. config::sleep_election_timeouts(1);
  68. cfg.start1((leader1 + 3) % SERVERS)?;
  69. cfg.connect((leader1 + 3) % SERVERS);
  70. cfg.one(10 + index, SERVERS - 2, true)?;
  71. index += 1;
  72. cfg.connect((leader1 + 4) % SERVERS);
  73. cfg.connect((leader1 + 0) % SERVERS);
  74. }
  75. cfg.one(1000, SERVERS, true)?;
  76. cfg.end();
  77. drop(_guard);
  78. Ok(())
  79. }