pub fn resolve_hostname() -> String {
if let Ok(h) = std::env::var("MTRACK_HOSTNAME") {
if !h.is_empty() {
return h;
}
}
hostname::get()
.ok()
.and_then(|h| h.into_string().ok())
.unwrap_or_else(|| "unknown".to_string())
}
#[cfg(test)]
mod tests {
use super::*;
use serial_test::serial;
#[test]
#[serial]
fn test_hostname_env_override() {
let original = std::env::var("MTRACK_HOSTNAME").ok();
std::env::set_var("MTRACK_HOSTNAME", "test-host");
assert_eq!(resolve_hostname(), "test-host");
match original {
Some(val) => std::env::set_var("MTRACK_HOSTNAME", val),
None => std::env::remove_var("MTRACK_HOSTNAME"),
}
}
#[test]
#[serial]
fn test_hostname_empty_env_falls_back() {
let original = std::env::var("MTRACK_HOSTNAME").ok();
std::env::set_var("MTRACK_HOSTNAME", "");
let hostname = resolve_hostname();
assert!(!hostname.is_empty());
match original {
Some(val) => std::env::set_var("MTRACK_HOSTNAME", val),
None => std::env::remove_var("MTRACK_HOSTNAME"),
}
}
}