mod common;
use bssh::config::Config;
use common::EnvGuard;
use serial_test::serial;
#[tokio::test]
#[serial]
async fn test_backendai_env_auto_detection() {
let _hosts = EnvGuard::set("BACKENDAI_CLUSTER_HOSTS", "node1.ai,node2.ai,node3.ai");
let _host = EnvGuard::set("BACKENDAI_CLUSTER_HOST", "node1.ai");
let _role = EnvGuard::set("BACKENDAI_CLUSTER_ROLE", "main");
let temp_dir = tempfile::tempdir().unwrap();
let nonexistent_path = temp_dir.path().join("nonexistent.yaml");
let config = Config::load_with_priority(&nonexistent_path)
.await
.expect("Config should load with Backend.AI env");
assert!(config.clusters.contains_key("bai_auto"));
let cluster = config.clusters.get("bai_auto").unwrap();
assert_eq!(
cluster.defaults.ssh_key,
Some("/home/config/ssh/id_cluster".to_string()),
"Backend.AI cluster should use /home/config/ssh/id_cluster as SSH key"
);
assert_eq!(cluster.nodes.len(), 3);
let nodes = config
.resolve_nodes("bai_auto")
.expect("Should resolve bai_auto nodes");
assert_eq!(nodes.len(), 3);
assert_eq!(nodes[0].host, "node1.ai");
assert_eq!(nodes[0].port, 2200); assert_eq!(nodes[1].host, "node2.ai");
assert_eq!(nodes[2].host, "node3.ai");
assert_eq!(
config.get_ssh_key(Some("bai_auto")),
Some("/home/config/ssh/id_cluster".to_string()),
"get_ssh_key should return Backend.AI cluster key path"
);
}
#[tokio::test]
#[serial]
async fn test_backendai_env_with_single_host() {
let _hosts = EnvGuard::set("BACKENDAI_CLUSTER_HOSTS", "single-node.ai");
let _host = EnvGuard::set("BACKENDAI_CLUSTER_HOST", "single-node.ai");
let _role = EnvGuard::remove("BACKENDAI_CLUSTER_ROLE");
let temp_dir = tempfile::tempdir().unwrap();
let nonexistent_path = temp_dir.path().join("nonexistent.yaml");
let config = Config::load_with_priority(&nonexistent_path)
.await
.expect("Config should load");
assert!(config.clusters.contains_key("bai_auto"));
let nodes = config
.resolve_nodes("bai_auto")
.expect("Should resolve nodes");
assert_eq!(nodes.len(), 1);
assert_eq!(nodes[0].host, "single-node.ai");
assert_eq!(nodes[0].port, 2200);
}
#[tokio::test]
#[serial]
async fn test_no_backendai_env() {
let _hosts = EnvGuard::remove("BACKENDAI_CLUSTER_HOSTS");
let _host = EnvGuard::remove("BACKENDAI_CLUSTER_HOST");
let _role = EnvGuard::remove("BACKENDAI_CLUSTER_ROLE");
let config = Config::load_with_priority(&std::path::PathBuf::from("nonexistent.yaml"))
.await
.expect("Config should load");
assert!(!config.clusters.contains_key("backendai"));
}