use super::super::daemon::{ensure_daemon, wait_for_daemon_teardown};
#[tokio::test]
#[ignore] async fn ensure_daemon_auto_recovers_on_comm_error() {
let endpoint = crate::ipc::unique_test_endpoint();
let ep = endpoint.clone();
let mut listener = crate::ipc::IpcListener::bind(&ep).unwrap();
let server = tokio::spawn(async move {
let _ = listener.accept().await;
});
tokio::time::sleep(std::time::Duration::from_millis(200)).await;
let result = ensure_daemon(&endpoint).await;
let _ = server.await;
if let Err(msg) = &result {
assert!(
!msg.contains("zccache stop"),
"Bug #27: ensure_daemon requires manual `zccache stop` instead of \
auto-recovering on protocol mismatch: {msg}"
);
}
}
#[test]
fn wait_for_daemon_teardown_returns_when_endpoint_unreachable() {
let tmp = tempfile::tempdir().expect("tempdir");
std::env::set_var("ZCCACHE_STOP_TIMEOUT_SECS", "2");
let unreachable_endpoint = if cfg!(windows) {
r"\\.\pipe\zccache-test-does-not-exist-182".to_string()
} else {
tmp.path()
.join("does-not-exist.sock")
.to_string_lossy()
.into_owned()
};
let rt = tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.expect("runtime");
let started = std::time::Instant::now();
rt.block_on(wait_for_daemon_teardown(&unreachable_endpoint));
let elapsed = started.elapsed();
std::env::remove_var("ZCCACHE_STOP_TIMEOUT_SECS");
assert!(
elapsed < std::time::Duration::from_secs(2),
"wait_for_daemon_teardown blocked for {elapsed:?} despite endpoint unreachable at t=0"
);
}