#[cfg(test)]
mod tests {
use crate::cli::pdsh::PDSH_COMPAT_ENV_VAR;
use serial_test::serial;
use std::env;
#[test]
#[serial]
fn test_env_var_detection_one() {
let original = env::var(PDSH_COMPAT_ENV_VAR).ok();
env::set_var(PDSH_COMPAT_ENV_VAR, "1");
let value = env::var(PDSH_COMPAT_ENV_VAR).ok();
assert!(value.is_some());
let value = value.unwrap();
assert!(value == "1" || value.to_lowercase() == "true");
match original {
Some(v) => env::set_var(PDSH_COMPAT_ENV_VAR, v),
None => env::remove_var(PDSH_COMPAT_ENV_VAR),
}
}
#[test]
#[serial]
fn test_env_var_detection_true() {
let original = env::var(PDSH_COMPAT_ENV_VAR).ok();
env::set_var(PDSH_COMPAT_ENV_VAR, "true");
let value = env::var(PDSH_COMPAT_ENV_VAR).ok();
assert!(value.is_some());
assert_eq!(value.unwrap().to_lowercase(), "true");
match original {
Some(v) => env::set_var(PDSH_COMPAT_ENV_VAR, v),
None => env::remove_var(PDSH_COMPAT_ENV_VAR),
}
}
#[test]
fn test_env_var_detection_case_insensitive() {
let test_values = ["TRUE", "True", "true", "TrUe"];
for test_val in test_values {
let is_enabled = test_val == "1" || test_val.to_lowercase() == "true";
assert!(
is_enabled,
"Expected '{test_val}' to be detected as enabled"
);
}
}
#[test]
#[serial]
fn test_env_var_not_set() {
let original = env::var(PDSH_COMPAT_ENV_VAR).ok();
env::remove_var(PDSH_COMPAT_ENV_VAR);
let value = env::var(PDSH_COMPAT_ENV_VAR).ok();
assert!(value.is_none());
if let Some(v) = original {
env::set_var(PDSH_COMPAT_ENV_VAR, v);
}
}
#[test]
#[serial]
fn test_env_var_invalid_values() {
let original = env::var(PDSH_COMPAT_ENV_VAR).ok();
env::set_var(PDSH_COMPAT_ENV_VAR, "0");
let value = env::var(PDSH_COMPAT_ENV_VAR).unwrap();
let enabled = value == "1" || value.to_lowercase() == "true";
assert!(!enabled);
env::set_var(PDSH_COMPAT_ENV_VAR, "false");
let value = env::var(PDSH_COMPAT_ENV_VAR).unwrap();
let enabled = value == "1" || value.to_lowercase() == "true";
assert!(!enabled);
env::set_var(PDSH_COMPAT_ENV_VAR, "");
let value = env::var(PDSH_COMPAT_ENV_VAR).unwrap();
let enabled = value == "1" || value.to_lowercase() == "true";
assert!(!enabled);
match original {
Some(v) => env::set_var(PDSH_COMPAT_ENV_VAR, v),
None => env::remove_var(PDSH_COMPAT_ENV_VAR),
}
}
#[test]
fn test_binary_name_pdsh() {
use std::path::Path;
let arg0 = "/usr/bin/pdsh";
let binary_name = Path::new(arg0)
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("");
assert_eq!(binary_name, "pdsh");
assert!(binary_name == "pdsh" || binary_name.starts_with("pdsh."));
}
#[test]
fn test_binary_name_relative_path() {
use std::path::Path;
let arg0 = "./pdsh";
let binary_name = Path::new(arg0)
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("");
assert_eq!(binary_name, "pdsh");
}
#[test]
#[cfg(windows)]
fn test_binary_name_windows() {
use std::path::Path;
let arg0 = "C:\\Program Files\\bssh\\pdsh.exe";
let binary_name = Path::new(arg0)
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("");
assert!(binary_name.starts_with("pdsh."));
}
#[test]
fn test_binary_name_exe_extension() {
use std::path::Path;
let arg0 = "pdsh.exe";
let binary_name = Path::new(arg0)
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("");
assert!(binary_name.starts_with("pdsh."));
}
#[test]
fn test_binary_name_bssh() {
use std::path::Path;
let arg0 = "/usr/bin/bssh";
let binary_name = Path::new(arg0)
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("");
assert_eq!(binary_name, "bssh");
assert!(!(binary_name == "pdsh" || binary_name.starts_with("pdsh.")));
}
#[test]
fn test_binary_name_symlink() {
use std::path::Path;
let arg0 = "/usr/local/bin/pdsh";
let binary_name = Path::new(arg0)
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("");
assert_eq!(binary_name, "pdsh");
}
#[test]
fn test_binary_name_empty() {
use std::path::Path;
let arg0 = "";
let binary_name = Path::new(arg0)
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("");
assert!(binary_name.is_empty());
assert!(!(binary_name == "pdsh" || binary_name.starts_with("pdsh.")));
}
#[test]
fn test_binary_name_no_path() {
use std::path::Path;
let arg0 = "pdsh";
let binary_name = Path::new(arg0)
.file_name()
.and_then(|n| n.to_str())
.unwrap_or("");
assert_eq!(binary_name, "pdsh");
}
}