]> git.bitcoin.ninja Git - rust-lightning/commitdiff
Make router fuzz runs deterministic
authorMatt Corallo <git@bluematt.me>
Wed, 24 Feb 2021 03:52:12 +0000 (22:52 -0500)
committerMatt Corallo <git@bluematt.me>
Thu, 25 Feb 2021 23:22:35 +0000 (18:22 -0500)
fuzz/src/router.rs

index 51602d5b5e8845c87560cd0ab0beb04bdb9270a6..4d06d9e3e2ef926fa6093a18f931ab236606288f 100644 (file)
@@ -26,7 +26,8 @@ use bitcoin::blockdata::constants::genesis_block;
 
 use utils::test_logger;
 
-use std::collections::HashSet;
+use std::collections::{HashSet, HashMap};
+use std::hash;
 use std::sync::Arc;
 use std::sync::atomic::{AtomicUsize, Ordering};
 
@@ -93,6 +94,13 @@ impl chain::Access for FuzzChainSource {
        }
 }
 
+// We sometimes walk the HashSet of peer node_ids, which, in order to keep the ordering consistent
+// across fuzz runs, we need to use a consistent hasher.
+// Tt is deprecated, but the "replacement" doesn't actually accomplish the same goals, so we just
+// ignore it.
+#[allow(deprecated)]
+pub type NonRandomHash = hash::BuildHasherDefault<hash::SipHasher>;
+
 #[inline]
 pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
        let input = Arc::new(InputData {
@@ -159,7 +167,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
        let our_pubkey = get_pubkey!();
        let mut net_graph = NetworkGraph::new(genesis_block(Network::Bitcoin).header.block_hash());
 
-       let mut node_pks = HashSet::new();
+       let mut node_pks: HashSet<_, NonRandomHash> = HashSet::default();
        let mut scid = 42;
 
        loop {