#[path = "../src/control.rs"] mod control; use std::os::unix::fs::PermissionsExt; use tempfile::tempdir; use tokio::time::{sleep, Duration}; #[tokio::test] async fn control_commands_and_socket_permissions() { let dir = tempdir().unwrap(); let path = dir.path().join("control.sock"); let state = control::ControlState::default(); state.set_status("ready").await; state.set_stats_json("{\"packets\":3}").await; let server = control::ControlServer::bind(&path, state.clone()) .await .unwrap(); assert_eq!( std::fs::metadata(&path).unwrap().permissions().mode() & 0o777, 0o600 ); let task = tokio::spawn(server.run()); sleep(Duration::from_millis(10)).await; assert!(control::send_command(&path, "status") .await .unwrap() .contains("ready")); assert!(control::send_command(&path, "stats") .await .unwrap() .contains("packets")); assert!(control::send_command(&path, "reconnect") .await .unwrap() .contains("true")); assert!(control::send_command(&path, "reload") .await .unwrap() .contains("true")); assert!(control::send_command(&path, "shutdown") .await .unwrap() .contains("true")); task.await.unwrap().unwrap(); }