|
|
@@ -35,4 +35,34 @@ fn initial_election() -> config::Result<()> {
|
|
|
}
|
|
|
|
|
|
#[test]
|
|
|
-fn re_election() {}
|
|
|
+fn re_election() -> config::Result<()> {
|
|
|
+ const SERVERS: usize = 3;
|
|
|
+ let cfg = config::make_config(SERVERS, false);
|
|
|
+ let _guard = ruaft::utils::DropGuard::new(|| cfg.cleanup());
|
|
|
+
|
|
|
+ cfg.begin("Test (2A): election after network failure");
|
|
|
+
|
|
|
+ let leader_one = cfg.check_one_leader()?;
|
|
|
+
|
|
|
+ cfg.disconnect(leader_one);
|
|
|
+ cfg.check_one_leader()?;
|
|
|
+
|
|
|
+ cfg.connect(leader_one);
|
|
|
+
|
|
|
+ let leader_two = cfg.check_one_leader()?;
|
|
|
+ let other = (leader_two + 1) % SERVERS;
|
|
|
+
|
|
|
+ cfg.disconnect(leader_two);
|
|
|
+ cfg.disconnect(other);
|
|
|
+ cfg.check_no_leader()?;
|
|
|
+
|
|
|
+ cfg.connect(other);
|
|
|
+ cfg.check_one_leader()?;
|
|
|
+
|
|
|
+ cfg.connect(leader_two);
|
|
|
+ cfg.check_one_leader()?;
|
|
|
+
|
|
|
+ cfg.end();
|
|
|
+
|
|
|
+ Ok(())
|
|
|
+}
|