use super::*;
const SOCKET: &str = "unix socket /tmp/t/trusty-mpm.sock";
#[test]
fn daemon_row_is_ok_when_reachable() {
let check = daemon_check(DaemonReachability::Reachable, SOCKET);
assert_eq!(check.name, CHECK_NAME);
assert_eq!(check.status, CheckStatus::Ok);
assert!(
check.message.contains("trusty-mpm daemon: reachable"),
"got: {}",
check.message
);
}
#[test]
fn daemon_row_warns_when_not_running() {
let check = daemon_check(DaemonReachability::NotRunning, SOCKET);
assert_eq!(check.status, CheckStatus::Warn);
assert!(
check.message.contains("trusty-mpm daemon: not running"),
"got: {}",
check.message
);
assert!(
check.message.contains("every local check above still ran"),
"got: {}",
check.message
);
}
#[test]
fn daemon_row_is_unknown_when_unresponsive() {
let check = daemon_check(DaemonReachability::Unresponsive, SOCKET);
assert_eq!(check.status, CheckStatus::Unknown);
assert!(
check.message.contains("trusty-mpm daemon: unresponsive"),
"got: {}",
check.message
);
}
#[test]
fn daemon_row_names_its_transport_and_no_port() {
for reachability in [
DaemonReachability::Reachable,
DaemonReachability::NotRunning,
DaemonReachability::Denied(Some(1)),
DaemonReachability::Unresponsive,
] {
let message = daemon_check(reachability, SOCKET).message;
assert!(message.contains(SOCKET), "{reachability:?}: {message}");
for forbidden in ["7880", "port", "tcp"] {
assert!(
!message.to_lowercase().contains(forbidden),
"{reachability:?} row names {forbidden:?}: {message}"
);
}
}
}
#[tokio::test]
async fn daemon_probe_reports_not_running_when_nothing_listens() {
let (reachability, snapshot) = probe_daemon(&DaemonClient::new("http://127.0.0.1:1")).await;
assert_eq!(reachability, DaemonReachability::NotRunning);
assert!(snapshot.is_none());
}
#[tokio::test]
async fn daemon_probe_over_an_absent_socket_is_not_running() {
let dir = tempfile::tempdir().expect("tempdir");
let client = DaemonClient::over_socket(dir.path().join("absent.sock"));
let (reachability, snapshot) = probe_daemon(&client).await;
assert_eq!(reachability, DaemonReachability::NotRunning);
assert!(snapshot.is_none());
}
#[test]
fn daemon_probe_names_the_errno_when_the_os_denies_the_dial() {
use trusty_common::uds::{UdsRpcError, UdsSecurityError};
let path = std::path::PathBuf::from("/tmp/t/trusty-mpm.sock");
let dial = UdsRpcError::Dial {
path: path.clone(),
source: UdsSecurityError::Connect {
path,
source: std::io::Error::from_raw_os_error(1),
},
};
let err = trusty_mpm::client::DaemonCallError::Unreachable {
target: SOCKET.to_string(),
source: dial.into(),
};
let (reachability, snapshot) = classify_probe(Err(err));
assert_eq!(reachability, DaemonReachability::Denied(Some(1)));
assert!(snapshot.is_none());
let row = daemon_check(reachability, SOCKET);
assert!(row.message.contains("EPERM"), "{}", row.message);
assert!(!row.message.contains("tm start"), "{}", row.message);
}