Skip to content

Commit df2e60d

Browse files
committed
Use common Persister for persistence tests
1 parent 6ebc739 commit df2e60d

File tree

1 file changed

+32
-50
lines changed
  • lightning-background-processor/src

1 file changed

+32
-50
lines changed

lightning-background-processor/src/lib.rs

Lines changed: 32 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ impl BackgroundProcessor {
272272
if last_prune_call.elapsed().as_secs() > if have_pruned { NETWORK_PRUNE_TIMER } else { FIRST_NETWORK_PRUNE_TIMER } {
273273
if let Some(ref handler) = net_graph_msg_handler {
274274
log_trace!(logger, "Pruning network graph of stale entries");
275-
handler.network_graph().remove_stale_channels();
275+
handler.network_graph().remove_stale_channels();
276276
if let Err(e) = persister.persist_graph(handler.network_graph()) {
277277
log_error!(logger, "Error: Failed to persist network graph, check your disk and permissions {}", e)
278278
}
@@ -413,6 +413,22 @@ mod tests {
413413

414414
struct Persister {
415415
data_dir: String,
416+
graph_error: Option<(std::io::ErrorKind, &'static str)>,
417+
manager_error: Option<(std::io::ErrorKind, &'static str)>
418+
}
419+
420+
impl Persister {
421+
fn new(data_dir: String) -> Self {
422+
Self { data_dir, graph_error: None, manager_error: None }
423+
}
424+
425+
fn with_graph_error(self, error: std::io::ErrorKind, message: &'static str) -> Self {
426+
Self { graph_error: Some((error, message)), ..self }
427+
}
428+
429+
fn with_manager_error(self, error: std::io::ErrorKind, message: &'static str) -> Self {
430+
Self { manager_error: Some((error, message)), ..self }
431+
}
416432
}
417433

418434
impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L:Deref> super::Persister<Signer, M, T, K, F, L> for Persister where
@@ -423,11 +439,17 @@ mod tests {
423439
L::Target: 'static + Logger,
424440
{
425441
fn persist_manager(&self, channel_manager: &ChannelManager<Signer, M, T, K, F, L>) -> Result<(), std::io::Error> {
426-
FilesystemPersister::persist_manager(self.data_dir.clone(), channel_manager)
442+
match self.manager_error {
443+
None => FilesystemPersister::persist_manager(self.data_dir.clone(), channel_manager),
444+
Some((error, message)) => Err(std::io::Error::new(error, message)),
445+
}
427446
}
428447

429448
fn persist_graph(&self, network_graph: &NetworkGraph) -> Result<(), std::io::Error> {
430-
FilesystemPersister::persist_network_graph(self.data_dir.clone(), network_graph)
449+
match self.graph_error {
450+
None => FilesystemPersister::persist_network_graph(self.data_dir.clone(), network_graph),
451+
Some((error, message)) => Err(std::io::Error::new(error, message)),
452+
}
431453
}
432454
}
433455

@@ -554,7 +576,7 @@ mod tests {
554576

555577
// Initiate the background processors to watch each node.
556578
let data_dir = nodes[0].persister.get_data_dir();
557-
let persister = Persister { data_dir };
579+
let persister = Persister::new(data_dir);
558580
let event_handler = |_: &_| {};
559581
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].net_graph_msg_handler.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
560582

@@ -615,7 +637,7 @@ mod tests {
615637
// `FRESHNESS_TIMER`.
616638
let nodes = create_nodes(1, "test_timer_tick_called".to_string());
617639
let data_dir = nodes[0].persister.get_data_dir();
618-
let persister = Persister { data_dir };
640+
let persister = Persister::new(data_dir);
619641
let event_handler = |_: &_| {};
620642
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].net_graph_msg_handler.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
621643
loop {
@@ -637,28 +659,8 @@ mod tests {
637659
let nodes = create_nodes(2, "test_persist_error".to_string());
638660
open_channel!(nodes[0], nodes[1], 100000);
639661

640-
struct ChannelManagerErrorPersister {
641-
data_dir: String,
642-
}
643-
644-
impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L:Deref> super::Persister<Signer, M, T, K, F, L> for ChannelManagerErrorPersister where
645-
M::Target: 'static + chain::Watch<Signer>,
646-
T::Target: 'static + BroadcasterInterface,
647-
K::Target: 'static + KeysInterface<Signer = Signer>,
648-
F::Target: 'static + FeeEstimator,
649-
L::Target: 'static + Logger,
650-
{
651-
fn persist_manager(&self, _channel_manager: &ChannelManager<Signer, M, T, K, F, L>) -> Result<(), std::io::Error> {
652-
Err(std::io::Error::new(std::io::ErrorKind::Other, "test"))
653-
}
654-
655-
fn persist_graph(&self, network_graph: &NetworkGraph) -> Result<(), std::io::Error> {
656-
FilesystemPersister::persist_network_graph(self.data_dir.clone(), network_graph)
657-
}
658-
}
659-
660662
let data_dir = nodes[0].persister.get_data_dir();
661-
let persister = ChannelManagerErrorPersister{ data_dir };
663+
let persister = Persister::new(data_dir).with_manager_error(std::io::ErrorKind::Other, "test");
662664
let event_handler = |_: &_| {};
663665
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].net_graph_msg_handler.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
664666
match bg_processor.join() {
@@ -674,28 +676,8 @@ mod tests {
674676
fn test_network_graph_persist_error() {
675677
// Test that if we encounter an error during network graph persistence, an error gets returned.
676678
let nodes = create_nodes(2, "test_persist_network_graph_error".to_string());
677-
struct NetworkGraphErrorPersister {
678-
data_dir: String,
679-
}
680-
681-
impl<Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L:Deref> super::Persister<Signer, M, T, K, F, L> for NetworkGraphErrorPersister where
682-
M::Target: 'static + chain::Watch<Signer>,
683-
T::Target: 'static + BroadcasterInterface,
684-
K::Target: 'static + KeysInterface<Signer = Signer>,
685-
F::Target: 'static + FeeEstimator,
686-
L::Target: 'static + Logger,
687-
{
688-
fn persist_manager(&self, channel_manager: &ChannelManager<Signer, M, T, K, F, L>) -> Result<(), std::io::Error> {
689-
FilesystemPersister::persist_manager(self.data_dir.clone(), channel_manager)
690-
}
691-
692-
fn persist_graph(&self, _network_graph: &NetworkGraph) -> Result<(), std::io::Error> {
693-
Err(std::io::Error::new(std::io::ErrorKind::Other, "test"))
694-
}
695-
}
696-
697679
let data_dir = nodes[0].persister.get_data_dir();
698-
let persister = NetworkGraphErrorPersister { data_dir };
680+
let persister = Persister::new(data_dir).with_graph_error(std::io::ErrorKind::Other, "test");
699681
let event_handler = |_: &_| {};
700682
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].net_graph_msg_handler.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
701683

@@ -713,7 +695,7 @@ mod tests {
713695
let mut nodes = create_nodes(2, "test_background_event_handling".to_string());
714696
let channel_value = 100000;
715697
let data_dir = nodes[0].persister.get_data_dir();
716-
let persister = Persister { data_dir: data_dir.clone() };
698+
let persister = Persister::new(data_dir.clone());
717699

718700
// Set up a background event handler for FundingGenerationReady events.
719701
let (sender, receiver) = std::sync::mpsc::sync_channel(1);
@@ -744,7 +726,7 @@ mod tests {
744726
// Set up a background event handler for SpendableOutputs events.
745727
let (sender, receiver) = std::sync::mpsc::sync_channel(1);
746728
let event_handler = move |event: &Event| sender.send(event.clone()).unwrap();
747-
let bg_processor = BackgroundProcessor::start(Persister{ data_dir: data_dir.clone() }, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].net_graph_msg_handler.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
729+
let bg_processor = BackgroundProcessor::start(Persister::new(data_dir), event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].net_graph_msg_handler.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
748730

749731
// Force close the channel and check that the SpendableOutputs event was handled.
750732
nodes[0].node.force_close_channel(&nodes[0].node.list_channels()[0].channel_id).unwrap();
@@ -770,7 +752,7 @@ mod tests {
770752

771753
// Initiate the background processors to watch each node.
772754
let data_dir = nodes[0].persister.get_data_dir();
773-
let persister = Persister { data_dir };
755+
let persister = Persister::new(data_dir);
774756
let scorer = Arc::new(Mutex::new(test_utils::TestScorer::with_penalty(0)));
775757
let router = DefaultRouter::new(Arc::clone(&nodes[0].network_graph), Arc::clone(&nodes[0].logger), random_seed_bytes);
776758
let invoice_payer = Arc::new(InvoicePayer::new(Arc::clone(&nodes[0].node), router, scorer, Arc::clone(&nodes[0].logger), |_: &_| {}, RetryAttempts(2)));

0 commit comments

Comments
 (0)