devimint/
lib.rs

1#![deny(clippy::pedantic)]
2#![allow(clippy::cast_possible_truncation)]
3#![allow(clippy::cast_possible_wrap)]
4#![allow(clippy::cast_precision_loss)]
5#![allow(clippy::cast_sign_loss)]
6#![allow(clippy::doc_markdown)]
7#![allow(clippy::explicit_deref_methods)]
8#![allow(clippy::implicit_hasher)]
9#![allow(clippy::items_after_statements)]
10#![allow(clippy::large_futures)]
11#![allow(clippy::missing_errors_doc)]
12#![allow(clippy::missing_panics_doc)]
13#![allow(clippy::module_name_repetitions)]
14#![allow(clippy::must_use_candidate)]
15#![allow(clippy::return_self_not_must_use)]
16#![allow(clippy::too_many_lines)]
17
18use std::ffi;
19
20use clap::Parser as _;
21use cli::cleanup_on_exit;
22use devfed::DevJitFed;
23pub use devfed::{DevFed, dev_fed};
24pub use external::{ExternalDaemons, LightningNode, Lnd, external_daemons};
25use futures::Future;
26pub use gatewayd::Gatewayd;
27pub use recurringd::Recurringd;
28pub use recurringdv2::Recurringdv2;
29use tests::log_binary_versions;
30use util::ProcessManager;
31
32pub mod cli;
33pub mod devfed;
34pub mod envs;
35pub mod external;
36pub mod faucet;
37pub mod federation;
38pub mod gatewayd;
39pub mod recurringd;
40pub mod recurringdv2;
41pub mod tests;
42pub mod util;
43pub mod vars;
44pub mod version_constants;
45
46#[bon::builder]
47pub async fn run_devfed_test<F, FF>(
48    #[builder(finish_fn)] f: F,
49    num_feds: Option<usize>,
50    pre_dkg: Option<bool>,
51) -> anyhow::Result<()>
52where
53    F: FnOnce(DevJitFed, ProcessManager) -> FF,
54    FF: Future<Output = anyhow::Result<()>>,
55{
56    let mut args = cli::CommonArgs::parse_from::<_, ffi::OsString>(vec![]);
57
58    if let Some(num_feds) = num_feds {
59        args.num_feds = num_feds;
60    }
61
62    let (process_mgr, task_group) = cli::setup(args).await?;
63    log_binary_versions().await?;
64    let dev_fed = devfed::DevJitFed::new(&process_mgr, false, pre_dkg.unwrap_or_default())?;
65    // workaround https://github.com/tokio-rs/tokio/issues/6463
66    // by waiting on all jits to complete, we make it less likely
67    // that something is not finished yet and will block in `on_block`
68    let _ = dev_fed.finalize(&process_mgr).await;
69    let res = cleanup_on_exit(f(dev_fed.clone(), process_mgr.clone()), task_group).await;
70    dev_fed.fast_terminate().await;
71    res?;
72
73    Ok(())
74}