Skip to content

Commit 4abf3ba

Browse files
committed
Use env::temp_dir() for BP tests
Currently `BackgroundProcessor` tests create persister directories in the current working directory and rely on cleaning up in a `Drop` implementation. Unfortunately, it seems that in the async tests that nodes are not `drop()`ed for some reason and so the directories created by those tests remain behind in the current working directory. This commit at least ensures that these test directories are created in a temporary location for the OS using `temp_dir()`. It doesn't aim to solve the lack of cleanup in the async tests. Partial fix for #2224 but I believe it's enough to resolve it as these temp directories that do remain will be purged by the OS at some stage and are overwritten by subsequent tests if there is a conflict.
1 parent c182567 commit 4abf3ba

File tree

1 file changed

+21
-19
lines changed
  • lightning-background-processor/src

1 file changed

+21
-19
lines changed

lightning-background-processor/src/lib.rs

+21-19
Original file line numberDiff line numberDiff line change
@@ -859,7 +859,7 @@ mod tests {
859859
use lightning::util::persist::KVStorePersister;
860860
use lightning_persister::FilesystemPersister;
861861
use std::collections::VecDeque;
862-
use std::fs;
862+
use std::{fs, env};
863863
use std::path::PathBuf;
864864
use std::sync::{Arc, Mutex};
865865
use std::sync::mpsc::SyncSender;
@@ -1116,7 +1116,9 @@ mod tests {
11161116
path.to_str().unwrap().to_string()
11171117
}
11181118

1119-
fn create_nodes(num_nodes: usize, persist_dir: String) -> Vec<Node> {
1119+
fn create_nodes(num_nodes: usize, persist_dir: &str) -> (String, Vec<Node>) {
1120+
let persist_temp_path = env::temp_dir().join(persist_dir);
1121+
let persist_dir = persist_temp_path.to_string_lossy().to_string();
11201122
let network = Network::Testnet;
11211123
let mut nodes = Vec::new();
11221124
for i in 0..num_nodes {
@@ -1129,7 +1131,7 @@ mod tests {
11291131
let seed = [i as u8; 32];
11301132
let router = Arc::new(DefaultRouter::new(network_graph.clone(), logger.clone(), seed, scorer.clone()));
11311133
let chain_source = Arc::new(test_utils::TestChainSource::new(Network::Testnet));
1132-
let persister = Arc::new(FilesystemPersister::new(format!("{}_persister_{}", persist_dir, i)));
1134+
let persister = Arc::new(FilesystemPersister::new(format!("{}_persister_{}", &persist_dir, i)));
11331135
let now = Duration::from_secs(genesis_block.header.time as u64);
11341136
let keys_manager = Arc::new(KeysManager::new(&seed, now.as_secs(), now.subsec_nanos()));
11351137
let chain_monitor = Arc::new(chainmonitor::ChainMonitor::new(Some(chain_source.clone()), tx_broadcaster.clone(), logger.clone(), fee_estimator.clone(), persister.clone()));
@@ -1151,7 +1153,7 @@ mod tests {
11511153
}
11521154
}
11531155

1154-
nodes
1156+
(persist_dir, nodes)
11551157
}
11561158

11571159
macro_rules! open_channel {
@@ -1223,7 +1225,7 @@ mod tests {
12231225
// Test that when a new channel is created, the ChannelManager needs to be re-persisted with
12241226
// updates. Also test that when new updates are available, the manager signals that it needs
12251227
// re-persistence and is successfully re-persisted.
1226-
let nodes = create_nodes(2, "test_background_processor".to_string());
1228+
let (persist_dir, nodes) = create_nodes(2, "test_background_processor");
12271229

12281230
// Go through the channel creation process so that each node has something to persist. Since
12291231
// open_channel consumes events, it must complete before starting BackgroundProcessor to
@@ -1261,7 +1263,7 @@ mod tests {
12611263
}
12621264

12631265
// Check that the initial channel manager data is persisted as expected.
1264-
let filepath = get_full_filepath("test_background_processor_persister_0".to_string(), "manager".to_string());
1266+
let filepath = get_full_filepath(format!("{}_persister_0", &persist_dir), "manager".to_string());
12651267
check_persisted_data!(nodes[0].node, filepath.clone());
12661268

12671269
loop {
@@ -1278,11 +1280,11 @@ mod tests {
12781280
}
12791281

12801282
// Check network graph is persisted
1281-
let filepath = get_full_filepath("test_background_processor_persister_0".to_string(), "network_graph".to_string());
1283+
let filepath = get_full_filepath(format!("{}_persister_0", &persist_dir), "network_graph".to_string());
12821284
check_persisted_data!(nodes[0].network_graph, filepath.clone());
12831285

12841286
// Check scorer is persisted
1285-
let filepath = get_full_filepath("test_background_processor_persister_0".to_string(), "scorer".to_string());
1287+
let filepath = get_full_filepath(format!("{}_persister_0", &persist_dir), "scorer".to_string());
12861288
check_persisted_data!(nodes[0].scorer, filepath.clone());
12871289

12881290
if !std::thread::panicking() {
@@ -1295,7 +1297,7 @@ mod tests {
12951297
// Test that `ChannelManager::timer_tick_occurred` is called every `FRESHNESS_TIMER`,
12961298
// `ChainMonitor::rebroadcast_pending_claims` is called every `REBROADCAST_TIMER`, and
12971299
// `PeerManager::timer_tick_occurred` every `PING_TIMER`.
1298-
let nodes = create_nodes(1, "test_timer_tick_called".to_string());
1300+
let (_, nodes) = create_nodes(1, "test_timer_tick_called");
12991301
let data_dir = nodes[0].persister.get_data_dir();
13001302
let persister = Arc::new(Persister::new(data_dir));
13011303
let event_handler = |_: _| {};
@@ -1320,7 +1322,7 @@ mod tests {
13201322
#[test]
13211323
fn test_channel_manager_persist_error() {
13221324
// Test that if we encounter an error during manager persistence, the thread panics.
1323-
let nodes = create_nodes(2, "test_persist_error".to_string());
1325+
let (_, nodes) = create_nodes(2, "test_persist_error");
13241326
open_channel!(nodes[0], nodes[1], 100000);
13251327

13261328
let data_dir = nodes[0].persister.get_data_dir();
@@ -1340,7 +1342,7 @@ mod tests {
13401342
#[cfg(feature = "futures")]
13411343
async fn test_channel_manager_persist_error_async() {
13421344
// Test that if we encounter an error during manager persistence, the thread panics.
1343-
let nodes = create_nodes(2, "test_persist_error_sync".to_string());
1345+
let (_, nodes) = create_nodes(2, "test_persist_error_sync");
13441346
open_channel!(nodes[0], nodes[1], 100000);
13451347

13461348
let data_dir = nodes[0].persister.get_data_dir();
@@ -1368,7 +1370,7 @@ mod tests {
13681370
#[test]
13691371
fn test_network_graph_persist_error() {
13701372
// Test that if we encounter an error during network graph persistence, an error gets returned.
1371-
let nodes = create_nodes(2, "test_persist_network_graph_error".to_string());
1373+
let (_, nodes) = create_nodes(2, "test_persist_network_graph_error");
13721374
let data_dir = nodes[0].persister.get_data_dir();
13731375
let persister = Arc::new(Persister::new(data_dir).with_graph_error(std::io::ErrorKind::Other, "test"));
13741376
let event_handler = |_: _| {};
@@ -1386,7 +1388,7 @@ mod tests {
13861388
#[test]
13871389
fn test_scorer_persist_error() {
13881390
// Test that if we encounter an error during scorer persistence, an error gets returned.
1389-
let nodes = create_nodes(2, "test_persist_scorer_error".to_string());
1391+
let (_, nodes) = create_nodes(2, "test_persist_scorer_error");
13901392
let data_dir = nodes[0].persister.get_data_dir();
13911393
let persister = Arc::new(Persister::new(data_dir).with_scorer_error(std::io::ErrorKind::Other, "test"));
13921394
let event_handler = |_: _| {};
@@ -1403,7 +1405,7 @@ mod tests {
14031405

14041406
#[test]
14051407
fn test_background_event_handling() {
1406-
let mut nodes = create_nodes(2, "test_background_event_handling".to_string());
1408+
let (_, mut nodes) = create_nodes(2, "test_background_event_handling");
14071409
let channel_value = 100000;
14081410
let data_dir = nodes[0].persister.get_data_dir();
14091411
let persister = Arc::new(Persister::new(data_dir.clone()));
@@ -1477,7 +1479,7 @@ mod tests {
14771479

14781480
#[test]
14791481
fn test_scorer_persistence() {
1480-
let nodes = create_nodes(2, "test_scorer_persistence".to_string());
1482+
let (_, nodes) = create_nodes(2, "test_scorer_persistence");
14811483
let data_dir = nodes[0].persister.get_data_dir();
14821484
let persister = Arc::new(Persister::new(data_dir));
14831485
let event_handler = |_: _| {};
@@ -1549,7 +1551,7 @@ mod tests {
15491551
fn test_not_pruning_network_graph_until_graph_sync_completion() {
15501552
let (sender, receiver) = std::sync::mpsc::sync_channel(1);
15511553

1552-
let nodes = create_nodes(2, "test_not_pruning_network_graph_until_graph_sync_completion".to_string());
1554+
let (_, nodes) = create_nodes(2, "test_not_pruning_network_graph_until_graph_sync_completion");
15531555
let data_dir = nodes[0].persister.get_data_dir();
15541556
let persister = Arc::new(Persister::new(data_dir).with_graph_persistence_notifier(sender));
15551557

@@ -1568,7 +1570,7 @@ mod tests {
15681570
async fn test_not_pruning_network_graph_until_graph_sync_completion_async() {
15691571
let (sender, receiver) = std::sync::mpsc::sync_channel(1);
15701572

1571-
let nodes = create_nodes(2, "test_not_pruning_network_graph_until_graph_sync_completion_async".to_string());
1573+
let (_, nodes) = create_nodes(2, "test_not_pruning_network_graph_until_graph_sync_completion_async");
15721574
let data_dir = nodes[0].persister.get_data_dir();
15731575
let persister = Arc::new(Persister::new(data_dir).with_graph_persistence_notifier(sender));
15741576

@@ -1708,7 +1710,7 @@ mod tests {
17081710
_ => panic!("Unexpected event: {:?}", event),
17091711
};
17101712

1711-
let nodes = create_nodes(1, "test_payment_path_scoring".to_string());
1713+
let (_, nodes) = create_nodes(1, "test_payment_path_scoring");
17121714
let data_dir = nodes[0].persister.get_data_dir();
17131715
let persister = Arc::new(Persister::new(data_dir));
17141716
let bg_processor = BackgroundProcessor::start(persister, event_handler, nodes[0].chain_monitor.clone(), nodes[0].node.clone(), nodes[0].no_gossip_sync(), nodes[0].peer_manager.clone(), nodes[0].logger.clone(), Some(nodes[0].scorer.clone()));
@@ -1737,7 +1739,7 @@ mod tests {
17371739
}
17381740
};
17391741

1740-
let nodes = create_nodes(1, "test_payment_path_scoring_async".to_string());
1742+
let (_, nodes) = create_nodes(1, "test_payment_path_scoring_async");
17411743
let data_dir = nodes[0].persister.get_data_dir();
17421744
let persister = Arc::new(Persister::new(data_dir));
17431745

0 commit comments

Comments
 (0)