use super::*;
use crate::boundary::dispatch::{Caller, Deps};
use crate::cli_outbound::Cli;
use std::path::PathBuf;
use std::sync::Arc;
use tempfile::{TempDir, tempdir};
fn deps(tmp: &TempDir, caller: Caller) -> Deps {
let world = crate::test_support::world_under(tmp.path());
Deps {
litany: Cli::new("/no/such/litany"),
bl: Cli::new("/no/such/bl"),
state_root: tmp.path().join("state-root"),
home: tmp.path().join("home"),
yog_data_root: tmp.path().join("data"),
yog_binary: PathBuf::from("/no/such/yog"),
world,
snapshot: Arc::new(crate::app::Snapshot::empty(0)),
caller,
}
}
fn row(rows: &[Row], check: &str) -> Row {
rows.iter()
.find(|row| row.check == check)
.unwrap_or_else(|| panic!("no {check} row in {rows:?}"))
.clone()
}
#[test]
fn an_unwired_box_fails_every_check_and_names_an_act_for_each() {
let tmp = tempdir().expect("tmp");
let deps = deps(&tmp, Caller::default());
let rows = examine(&deps, None);
assert_eq!(rows.len(), 4, "the engine's own four: {rows:?}");
for row in &rows {
assert!(!row.ok, "{row:?}");
let remedy = row.remedy.as_deref().unwrap_or_default();
assert!(!remedy.is_empty(), "a failing row names an act: {row:?}");
}
assert!(row(&rows, "wire").fact.contains("no wire material"));
assert!(
row(&rows, "address")
.remedy
.as_deref()
.unwrap_or_default()
.contains("WIRE_PORT")
);
assert!(row(&rows, "git").fact.contains("no git identity"));
}
#[test]
fn a_self_provisioned_box_passes_the_material_and_fails_the_endpoint() {
let tmp = tempdir().expect("tmp");
let deps = deps(&tmp, Caller::default());
let dir = crate::wire::material::dir(&deps.world);
crate::wire::provision::ensure(&dir).expect("the boot's own mint");
let rows = examine(&deps, None);
assert!(row(&rows, "wire").ok, "{rows:?}");
assert!(!row(&rows, "address").ok, "a `:0` is a request");
assert!(row(&rows, "address").fact.contains("127.0.0.1:0"));
crate::wire::provision::state(&dir, "127.0.0.1:7737").expect("stated");
assert!(row(&examine(&deps, None), "address").ok);
}
#[test]
fn the_listener_row_answers_what_this_process_bound() {
let tmp = tempdir().expect("tmp");
let listening = crate::wire::Listening::default();
let deps = deps(
&tmp,
Caller {
listening: listening.clone(),
..Caller::default()
},
);
assert!(!row(&examine(&deps, None), "listener").ok, "nothing bound");
assert_eq!(report(&deps, None).rendezvous, None, "no loop to speak of");
listening.state("127.0.0.1:39969");
let standing = crate::wire::rendezvous::Standing::default();
assert_eq!(
report(&deps, None).rendezvous,
Some(standing),
"bound, no loop"
);
let bound = examine(&deps, None);
assert!(row(&bound, "listener").ok);
assert!(row(&bound, "listener").fact.contains("127.0.0.1:39969"));
}
#[test]
fn the_git_row_reads_this_worlds_own_identity() {
let tmp = tempdir().expect("tmp");
let deps = deps(&tmp, Caller::default());
std::fs::create_dir_all(&deps.home).expect("home");
std::fs::write(
deps.home.join(".gitconfig"),
"[user]\n\tname = A Name\n\temail = someone@example.com\n",
)
.expect("gitconfig");
let row = row(&examine(&deps, None), "git");
assert!(row.ok, "{row:?}");
assert!(row.fact.contains("A Name"), "{row:?}");
}
#[test]
fn a_half_provisioned_directory_fails_the_wire_row_in_materials_words() {
let tmp = tempdir().expect("tmp");
let deps = deps(&tmp, Caller::default());
let dir = crate::wire::material::dir(&deps.world);
crate::wire::provision::ensure(&dir).expect("the boot's own mint");
std::fs::remove_file(dir.join("server.key")).expect("half a leaf");
let row = row(&examine(&deps, None), "wire");
assert!(!row.ok, "{row:?}");
assert!(row.fact.contains("half-provisioned"), "{row:?}");
assert!(
row.remedy.unwrap_or_default().contains("FORCE=1"),
"a rotation is the only act that heals it"
);
}
#[test]
fn a_signed_in_wall_passes_its_row() {
let tmp = tempdir().expect("tmp");
let mut deps = deps(&tmp, Caller::default());
deps.world = crate::test_support::signed(&deps.world);
let ws = tmp.path().join("names").join("alba");
let row = row(&examine(&deps, Some(("alba", &ws))), "wall");
assert!(row.ok, "{row:?}");
assert!(row.fact.contains("alba"), "{row:?}");
assert!(
row.remedy.is_none(),
"nothing to do about a wall that works"
);
}
#[test]
fn a_named_workspace_adds_its_wall_and_its_roster() {
let tmp = tempdir().expect("tmp");
let deps = deps(&tmp, Caller::default());
let ws = tmp.path().join("names").join("alba");
let rows = examine(&deps, Some(("alba", &ws)));
assert_eq!(rows.len(), 6, "four engine rows and two workspace ones");
assert!(row(&rows, "clients").ok, "informational, and it passes");
assert!(row(&rows, "clients").fact.contains("0 registered"));
let wall = row(&rows, "wall");
assert!(
wall.fact.contains("alba"),
"the wall row names the workspace: {wall:?}"
);
assert_eq!(
wall.ok,
wall.remedy.is_none(),
"a remedy exactly when it failed"
);
}