vls_proxy/util/
testing.rs

1use std::{
2    fs,
3    path::{Path, PathBuf},
4};
5
6use lightning_signer::util::crypto_utils::generate_seed;
7use tracing::warn;
8
9pub fn read_integration_test_seed<P: AsRef<Path>>(datadir: P) -> Option<[u8; 32]> {
10    let path = PathBuf::from(datadir.as_ref()).join("hsm_secret");
11    warn!("reading integration hsm_secret from {:?}", path);
12    let result = fs::read(path);
13    if let Ok(data) = result {
14        Some(
15            data.as_slice().try_into().unwrap_or_else(|_| {
16                panic!("Expected hsm_secret to be 32 bytes, got {}", data.len())
17            }),
18        )
19    } else {
20        None
21    }
22}
23
24/// Read integration test seed, and generate/persist it if it's missing
25pub fn integration_test_seed_or_generate(seeddir: Option<PathBuf>) -> [u8; 32] {
26    let seeddir = seeddir.unwrap_or(PathBuf::from("."));
27    match read_integration_test_seed(&seeddir) {
28        None => {
29            let seed = generate_seed();
30            write_integration_test_seed(&seeddir, &seed);
31            seed
32        }
33        Some(seed) => seed,
34    }
35}
36
37fn write_integration_test_seed<P: AsRef<Path>>(datadir: P, seed: &[u8; 32]) {
38    let path = PathBuf::from(datadir.as_ref()).join("hsm_secret");
39    warn!("writing integration hsm_secret to {:?}", path);
40    fs::write(path, seed).expect("writing hsm_secret");
41}