Ver código fonte

Add fail agree test.

Jing Yang 5 anos atrás
pai
commit
451f9559be
1 arquivos alterados com 34 adições e 0 exclusões
  1. 34 0
      tests/agreement_tests.rs

+ 34 - 0
tests/agreement_tests.rs

@@ -26,3 +26,37 @@ fn basic_agreement() -> config::Result<()> {
 
     Ok(())
 }
+
+#[test]
+fn fail_agree() -> config::Result<()> {
+    const SERVERS: usize = 3;
+    let cfg = config::make_config(SERVERS, false);
+    let _guard = cfg.deferred_cleanup();
+
+    cfg.begin("Test (2B): agreement despite follower disconnection");
+
+    cfg.one(101, SERVERS, false)?;
+
+    // follower network disconnection
+    let leader = cfg.check_one_leader()?;
+    cfg.disconnect((leader + 1) % SERVERS);
+
+    // agree despite one disconnected server?
+    cfg.one(102, SERVERS - 1, false)?;
+    cfg.one(103, SERVERS - 1, false)?;
+    config::sleep_election_timeouts(1);
+    cfg.one(104, SERVERS - 1, false)?;
+    cfg.one(105, SERVERS - 1, false)?;
+
+    // re-connect
+    cfg.connect((leader + 1) % SERVERS);
+
+    // agree with full set of servers?
+    cfg.one(106, SERVERS, true)?;
+    config::sleep_election_timeouts(1);
+    cfg.one(107, SERVERS, true)?;
+
+    cfg.end();
+
+    Ok(())
+}