#[cfg(unix)]
use std::path::Path;
use shep_core::paths::ShepPaths;
use crate::whistle::{Whistle, gate};
fn test_paths(
socket: std::path::PathBuf,
barks: std::path::PathBuf,
daemon_config: std::path::PathBuf,
) -> ShepPaths {
ShepPaths {
home: std::path::PathBuf::new(),
daemon_config,
dogs_config: std::path::PathBuf::new(),
snapshot: std::path::PathBuf::new(),
logs: std::path::PathBuf::new(),
pids: std::path::PathBuf::new(),
run: std::path::PathBuf::new(),
socket,
barks,
kv: std::path::PathBuf::new(),
overrides: std::path::PathBuf::new(),
secrets: std::path::PathBuf::new(),
secrets_cache: std::path::PathBuf::new(),
dog_index_cache: std::path::PathBuf::new(),
dogs_dir: std::path::PathBuf::new(),
}
}
pub(super) fn whistle_at(socket: std::path::PathBuf, barks_path: std::path::PathBuf) -> Whistle {
Whistle::new(
test_paths(socket, barks_path, dir_placeholder("no-shep.toml")),
gate::Control::ReadOnly,
)
}
fn dir_placeholder(name: &str) -> std::path::PathBuf {
std::path::Path::new("/nonexistent").join(name)
}
#[cfg(unix)]
pub(super) fn whistle_with_hosts(dir: &Path, hosts: &[&str], program: &Path) -> Whistle {
let quoted: Vec<String> = hosts.iter().map(|host| format!("\"{host}\"")).collect();
let config = dir.join("shep.toml");
std::fs::write(&config, format!("hosts = [{}]\n", quoted.join(", "))).unwrap();
Whistle::for_test_with_ssh_program(
test_paths(
shep_client::testing::control_address(dir),
dir.join("barks.jsonl"),
config,
),
gate::Control::ReadOnly,
program,
)
}