persist_tests.rs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. }