X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Ftests%2Fmod.rs;h=dbe5a52abdebce26e024eedefdf21865ea4b3c60;hb=a0dbebe49cd7c472860d74054a3678dc25de2fcf;hp=dfc7ce466ec7d5c7ce2634650b419125a7813e03;hpb=f1a3c914dfccbdf1ed38d2b51075015b5d766498;p=rapid-gossip-sync-server diff --git a/src/tests/mod.rs b/src/tests/mod.rs index dfc7ce4..dbe5a52 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -4,12 +4,13 @@ use std::cell::RefCell; use std::sync::Arc; use std::{fs, thread}; use std::time::{SystemTime, UNIX_EPOCH}; -use bitcoin::{BlockHash, Network}; +use bitcoin::blockdata::constants::ChainHash; +use bitcoin::Network; use bitcoin::secp256k1::ecdsa::Signature; use bitcoin::secp256k1::{Secp256k1, SecretKey}; use bitcoin::hashes::Hash; -use bitcoin::hashes::hex::ToHex; use bitcoin::hashes::sha256d::Hash as Sha256dHash; +use hex_conservative::DisplayHex; use lightning::ln::features::ChannelFeatures; use lightning::ln::msgs::{ChannelAnnouncement, ChannelUpdate, UnsignedChannelAnnouncement, UnsignedChannelUpdate}; use lightning::routing::gossip::{NetworkGraph, NodeId}; @@ -31,8 +32,8 @@ fn blank_signature() -> Signature { Signature::from_compact(&[0u8; 64]).unwrap() } -fn genesis_hash() -> BlockHash { - bitcoin::blockdata::constants::genesis_block(Network::Bitcoin).block_hash() +fn genesis_hash() -> ChainHash { + ChainHash::using_genesis_block(Network::Bitcoin) } fn current_time() -> u32 { @@ -120,9 +121,9 @@ impl SchemaSanitizer { let thread_id = thread::current().id(); let preimage = format!("{:?}-{}", thread_id, timestamp_nanos); println!("test schema preimage: {}", preimage); - let suffix = Sha256dHash::hash(preimage.as_bytes()).into_inner().to_hex(); + let suffix = Sha256dHash::hash(preimage.as_bytes()).encode(); // the schema must start with a letter - let schema = format!("test_{}_{}", timestamp_seconds, suffix); + let schema = format!("test_{}_{}", timestamp_seconds, suffix.as_hex()); *suffix_option = Some(schema); }); @@ -135,6 +136,9 @@ impl Drop for SchemaSanitizer { IS_TEST_SCHEMA_CLEAN.with(|cleanliness_reference| { let is_clean_option = cleanliness_reference.borrow(); if let Some(is_clean) = *is_clean_option { + if std::thread::panicking() { + return; + } assert_eq!(is_clean, true); } }); @@ -172,6 +176,22 @@ async fn clean_test_db() { }); } +#[tokio::test] +async fn test_persistence_runtime() { + let _sanitizer = SchemaSanitizer::new(); + let logger = Arc::new(TestLogger::new()); + let network_graph = NetworkGraph::new(Network::Bitcoin, logger.clone()); + let network_graph_arc = Arc::new(network_graph); + let (_persister, _receiver) = GossipPersister::new(network_graph_arc.clone(), logger.clone()); + + tokio::task::spawn_blocking(move || { + drop(_persister); + }).await.unwrap(); + + clean_test_db().await; +} + + #[tokio::test] async fn test_trivial_setup() { let _sanitizer = SchemaSanitizer::new(); @@ -239,6 +259,10 @@ async fn test_trivial_setup() { println!("last update b: {}", last_update_seen_b); assert_eq!(last_update_seen_a, update_result - CLIENT_BACKDATE_INTERVAL); assert_eq!(last_update_seen_b, update_result - CLIENT_BACKDATE_INTERVAL); + + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); } /// If a channel has only seen updates in one direction, it should not be announced @@ -302,6 +326,10 @@ async fn test_unidirectional_intermediate_update_consideration() { let client_channel_count = channels.len(); assert_eq!(client_channel_count, 1); + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); + clean_test_db().await; } @@ -356,6 +384,10 @@ async fn test_bidirectional_intermediate_update_consideration() { assert_eq!(serialization.update_count_full, 0); assert_eq!(serialization.update_count_incremental, 1); + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); + clean_test_db().await; } @@ -398,6 +430,10 @@ async fn test_full_snapshot_recency() { drop(receiver); persister.persist_gossip().await; + + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); } let client_graph = NetworkGraph::new(Network::Bitcoin, logger.clone()); @@ -474,6 +510,10 @@ async fn test_full_snapshot_recency_with_wrong_seen_order() { drop(receiver); persister.persist_gossip().await; + + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); } let client_graph = NetworkGraph::new(Network::Bitcoin, logger.clone()); @@ -549,6 +589,10 @@ async fn test_full_snapshot_recency_with_wrong_propagation_order() { drop(receiver); persister.persist_gossip().await; + + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); } let client_graph = NetworkGraph::new(Network::Bitcoin, logger.clone()); @@ -678,6 +722,10 @@ async fn test_full_snapshot_mutiny_scenario() { drop(receiver); persister.persist_gossip().await; + + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); } let client_graph = NetworkGraph::new(Network::Bitcoin, logger.clone()); @@ -787,6 +835,10 @@ async fn test_full_snapshot_interlaced_channel_timestamps() { drop(receiver); persister.persist_gossip().await; + + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); } let client_graph = NetworkGraph::new(Network::Bitcoin, logger.clone()); @@ -858,6 +910,10 @@ async fn test_full_snapshot_persistence() { drop(receiver); persister.persist_gossip().await; + + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); } let cache_path = cache_sanitizer.cache_path(); @@ -899,6 +955,10 @@ async fn test_full_snapshot_persistence() { drop(receiver); persister.persist_gossip().await; + + tokio::task::spawn_blocking(move || { + drop(persister); + }).await.unwrap(); } // regenerate snapshots