From 6248e4079fb0468783ecd61a058d62d70dd6e1e4 Mon Sep 17 00:00:00 2001 From: Andreas Fackler Date: Mon, 9 Jul 2018 11:36:30 +0200 Subject: [PATCH] Fix Subset for a single validator. --- src/agreement/mod.rs | 10 ++++++---- tests/common_subset.rs | 9 +++++++++ tests/honey_badger.rs | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/agreement/mod.rs b/src/agreement/mod.rs index 4bfb3ab..c30cbc9 100644 --- a/src/agreement/mod.rs +++ b/src/agreement/mod.rs @@ -287,11 +287,10 @@ impl Agreement { return Err(ErrorKind::InputNotAccepted.into()); } if self.netinfo.num_nodes() == 1 { - self.decision = Some(input); - self.output = Some(input); - self.terminated = true; self.send_bval(input)?; - self.send_aux(input) + self.send_aux(input)?; + self.decide(input); + Ok(()) } else { // Set the initial estimated value to the input value. self.estimated = Some(input); @@ -515,6 +514,9 @@ impl Agreement { /// Decides on a value and broadcasts a `Term` message with that value. fn decide(&mut self, b: bool) { + if self.terminated { + return; + } // Output the agreement value. self.output = Some(b); // Latch the decided state. diff --git a/tests/common_subset.rs b/tests/common_subset.rs index 52d992a..4b4855e 100644 --- a/tests/common_subset.rs +++ b/tests/common_subset.rs @@ -108,3 +108,12 @@ fn test_common_subset_5_nodes_different_proposed_values() { let network = new_network(5, 0, adversary); test_common_subset(network, &proposals); } + +#[test] +fn test_common_subset_1_node() { + let proposals: BTreeMap = + once((NodeUid(0), Vec::from("Node 0 is the greatest!"))).collect(); + let adversary = |_| SilentAdversary::new(MessageScheduler::Random); + let network = new_network(1, 0, adversary); + test_common_subset(network, &proposals); +} diff --git a/tests/honey_badger.rs b/tests/honey_badger.rs index f081230..faf29f5 100644 --- a/tests/honey_badger.rs +++ b/tests/honey_badger.rs @@ -196,7 +196,7 @@ where let _ = env_logger::try_init(); let mut rng = rand::thread_rng(); - let sizes = (4..5) + let sizes = (2..5) .chain(once(rng.gen_range(6, 10))) .chain(once(rng.gen_range(11, 15))); for size in sizes {