start_regtest.rs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. use std::fs::OpenOptions;
  2. use std::io::Write;
  3. use std::sync::Arc;
  4. use std::time::Duration;
  5. use anyhow::{bail, Result};
  6. use cdk_integration_tests::init_regtest::{get_temp_dir, start_regtest_end};
  7. use tokio::signal;
  8. use tokio::sync::{oneshot, Notify};
  9. use tokio::time::timeout;
  10. use tracing_subscriber::EnvFilter;
  11. fn signal_progress() {
  12. let temp_dir = get_temp_dir();
  13. let mut pipe = OpenOptions::new()
  14. .write(true)
  15. .open(temp_dir.join("progress_pipe"))
  16. .expect("Failed to open pipe");
  17. pipe.write_all(b"checkpoint1\n")
  18. .expect("Failed to write to pipe");
  19. }
  20. #[tokio::main]
  21. async fn main() -> Result<()> {
  22. let default_filter = "debug";
  23. let sqlx_filter = "sqlx=warn";
  24. let hyper_filter = "hyper=warn";
  25. let h2_filter = "h2=warn";
  26. let rustls_filter = "rustls=warn";
  27. let env_filter = EnvFilter::new(format!(
  28. "{default_filter},{sqlx_filter},{hyper_filter},{h2_filter},{rustls_filter}"
  29. ));
  30. tracing_subscriber::fmt().with_env_filter(env_filter).init();
  31. let shutdown_regtest = Arc::new(Notify::new());
  32. let shutdown_clone = shutdown_regtest.clone();
  33. let (tx, rx) = oneshot::channel();
  34. tokio::spawn(async move {
  35. start_regtest_end(tx, shutdown_clone)
  36. .await
  37. .expect("Error starting regtest");
  38. });
  39. match timeout(Duration::from_secs(300), rx).await {
  40. Ok(_) => {
  41. tracing::info!("Regtest set up");
  42. signal_progress();
  43. }
  44. Err(_) => {
  45. tracing::error!("regtest setup timed out after 5 minutes");
  46. bail!("Could not set up regtest");
  47. }
  48. }
  49. signal::ctrl_c().await?;
  50. Ok(())
  51. }