| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #[macro_use]
- extern crate anyhow;
- extern crate bytes;
- extern crate labrpc;
- extern crate ruaft;
- mod config;
- #[test]
- fn persist() -> config::Result<()> {
- const SERVERS: usize = 5;
- let cfg = config::make_config(SERVERS, false);
- let _guard = cfg.deferred_cleanup();
- cfg.begin("Test (2C): basic persistence");
- cfg.one(11, SERVERS, true)?;
- // crash and re-start all
- for i in 0..SERVERS {
- cfg.start1(i)?;
- }
- for i in 0..SERVERS {
- cfg.disconnect(i);
- cfg.connect(i);
- }
- cfg.one(12, SERVERS, true)?;
- let leader1 = cfg.check_one_leader()?;
- cfg.disconnect(leader1);
- cfg.start1(leader1)?;
- cfg.connect(leader1);
- cfg.one(13, SERVERS, true)?;
- let leader2 = cfg.check_one_leader()?;
- cfg.disconnect(leader2);
- cfg.one(14, SERVERS - 1, true)?;
- cfg.start1(leader2)?;
- cfg.connect(leader2);
- // wait for leader2 to join before killing i3
- cfg.wait(4, SERVERS, None)?;
- let i3 = (cfg.check_one_leader()? + 1) % SERVERS;
- cfg.disconnect(i3);
- cfg.one(15, SERVERS - 1, true)?;
- cfg.start1(i3)?;
- cfg.connect(i3);
- cfg.one(16, SERVERS, true)?;
- cfg.end();
- drop(_guard);
- Ok(())
- }
- #[test]
- fn persist2() -> config::Result<()> {
- const SERVERS: usize = 5;
- let cfg = config::make_config(SERVERS, false);
- let _guard = cfg.deferred_cleanup();
- cfg.begin("Test (2C): more persistence");
- let mut index = 1;
- for _ in 0..5 {
- cfg.one(10 + index, SERVERS, true)?;
- index += 1;
- let leader1 = cfg.check_one_leader()?;
- cfg.disconnect((leader1 + 1) % SERVERS);
- cfg.disconnect((leader1 + 2) % SERVERS);
- cfg.one(10 + index, SERVERS - 2, true)?;
- index += 1;
- cfg.disconnect((leader1 + 0) % SERVERS);
- cfg.disconnect((leader1 + 3) % SERVERS);
- cfg.disconnect((leader1 + 4) % SERVERS);
- cfg.start1((leader1 + 1) % SERVERS)?;
- cfg.start1((leader1 + 2) % SERVERS)?;
- cfg.connect((leader1 + 1) % SERVERS);
- cfg.connect((leader1 + 2) % SERVERS);
- config::sleep_election_timeouts(1);
- cfg.start1((leader1 + 3) % SERVERS)?;
- cfg.connect((leader1 + 3) % SERVERS);
- cfg.one(10 + index, SERVERS - 2, true)?;
- index += 1;
- cfg.connect((leader1 + 4) % SERVERS);
- cfg.connect((leader1 + 0) % SERVERS);
- }
- cfg.one(1000, SERVERS, true)?;
- cfg.end();
- drop(_guard);
- Ok(())
- }
|