From 4bd821d627689c9dc8bad3b1e4d45bcadf70c6ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=82=8E=E6=B3=BC?= Date: Tue, 23 Jul 2024 20:12:35 +0800 Subject: [PATCH] Chore: add test to ensure change_membership(.., retain=false) wont remove existing learners --- openraft/src/membership/membership_test.rs | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/openraft/src/membership/membership_test.rs b/openraft/src/membership/membership_test.rs index 47590bc8d..32fd1b6f6 100644 --- a/openraft/src/membership/membership_test.rs +++ b/openraft/src/membership/membership_test.rs @@ -293,3 +293,28 @@ fn test_membership_next_coherent_with_nodes() -> anyhow::Result<()> { Ok(()) } + +#[test] +fn test_membership_next_coherent_retain_false_keeps_existing_learners() -> anyhow::Result<()> { + let node = |s: u64| TestNode { + addr: s.to_string(), + data: Default::default(), + }; + + let c1 = || btreeset! {1}; + let c2 = || btreeset! {2}; + + let initial = Membership::>::new_unchecked( + vec![c1(), c2()], + btreemap! {1=>node(1), 2=>node(2), 3=>node(3)}, + ); + + let res = initial.next_coherent(btreeset! {2}, false); + assert_eq!(&vec![btreeset! {2}], res.get_joint_config()); + assert_eq!( + btreemap! {2=>node(2), 3=>node(3)}, + res.nodes().map(|(nid, n)| (*nid, n.clone())).collect::>() + ); + + Ok(()) +}