+
+ #[test]
+ fn test_background_event_handling() {
+ let nodes = create_nodes(2, "test_background_event_handling".to_string());
+ let channel_value = 100000;
+ let data_dir = nodes[0].persister.get_data_dir();
+ let persister = move |node: &_| FilesystemPersister::persist_manager(data_dir.clone(), node);
+
+ // Set up a background event handler for FundingGenerationReady events.
+ let (sender, receiver) = std::sync::mpsc::sync_channel(1);
+ let event_handler = move |event| {
+ sender.send(handle_funding_generation_ready!(event, channel_value)).unwrap();
+ };
+ let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].node.clone(), nodes[0].peer_manager.clone(), nodes[0].logger.clone());
+
+ // Open a channel and check that the FundingGenerationReady event was handled.
+ begin_open_channel!(nodes[0], nodes[1], channel_value);
+ let timeout = Duration::from_secs(5 * FRESHNESS_TIMER);
+ let (temporary_channel_id, tx) = receiver
+ .recv_timeout(timeout)
+ .expect("FundingGenerationReady not handled within deadline");
+ end_open_channel!(nodes[0], nodes[1], temporary_channel_id, tx);
+
+ assert!(bg_processor.stop().is_ok());
+ }