diff --git a/crates/xy/tests/reload.rs b/crates/xy/tests/reload.rs new file mode 100644 index 0000000..13c8f61 --- /dev/null +++ b/crates/xy/tests/reload.rs @@ -0,0 +1,37 @@ +mod common; +use common::*; + +#[tokio::test] +async fn reload_adds_removes_and_changes() { + let xy = xy_bin(); + let sleeper = sleep_server_bin(); + let mut h = Harness::new(); + h.write_server("a", sleeper.to_str().unwrap(), 19_020, "always"); + h.start_daemon(&xy).await; + + for _ in 0..40 { + let (_c, out, _e) = h.run_cli(&xy, &["list"]).await; + if out.contains("a") && out.contains("running") { + break; + } + tokio::time::sleep(std::time::Duration::from_millis(100)).await; + } + + h.write_server("a", sleeper.to_str().unwrap(), 19_021, "always"); + h.write_server("b", sleeper.to_str().unwrap(), 19_022, "always"); + let (code, out, _e) = h.run_cli(&xy, &["reload"]).await; + assert_eq!(code, 0); + assert!(out.contains("added:") && out.contains("b"), "stdout: {out}"); + assert!( + out.contains("changed:") && out.contains("a"), + "stdout: {out}" + ); + + std::fs::remove_file(h.config_dir.join("a.kdl")).unwrap(); + let (code, out, _e) = h.run_cli(&xy, &["reload"]).await; + assert_eq!(code, 0); + assert!( + out.contains("removed:") && out.contains("a"), + "stdout: {out}" + ); +}