Tweak tributary_test to handle a one-block variance

Prior to the previous commit, whatever async scheduling occurred caused them to
all have the same tip. Now, some are one block ahead of others. This adds
tolerance for that, as it's an acceptable variance, so long as it's solely one
block.
This commit is contained in:
Luke Parker 2023-08-27 05:28:36 -04:00
parent 2db53d5434
commit c9b2490ab9
No known key found for this signature in database

View file

@ -1,4 +1,7 @@
use std::time::{Duration, SystemTime}; use std::{
time::{Duration, SystemTime},
collections::HashSet,
};
use zeroize::Zeroizing; use zeroize::Zeroizing;
use rand_core::{RngCore, CryptoRng, OsRng}; use rand_core::{RngCore, CryptoRng, OsRng};
@ -209,14 +212,25 @@ async fn tributary_test() {
// TODO: Is there a better way to handle this? // TODO: Is there a better way to handle this?
sleep(Duration::from_secs(1)).await; sleep(Duration::from_secs(1)).await;
// All tributaries should agree on the tip // All tributaries should agree on the tip, within a block
let mut final_block = None; let mut tips = HashSet::new();
for (_, tributary) in tributaries { for (_, tributary) in &tributaries {
if final_block.is_none() { tips.insert(tributary.tip().await);
final_block = Some(tributary.tip().await);
}
if tributary.tip().await != final_block.unwrap() {
panic!("tributary had different tip");
}
} }
assert!(tips.len() <= 2);
if tips.len() == 2 {
for tip in tips.iter() {
// Find a Tributary where this isn't the tip
for (_, tributary) in &tributaries {
let Some(after) = tributary.reader().block_after(tip) else { continue };
// Make sure the block after is the other tip
assert!(tips.contains(&after));
return;
}
}
} else {
assert_eq!(tips.len(), 1);
return;
}
panic!("tributary had different tip with a variance exceeding one block");
} }