use super::*;
const LEDGER: &str = r#"{
"installs": {
"trusty-mpm 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)": {
"version_req": null,
"bins": ["tm"],
"features": [],
"all_features": false,
"no_default_features": false,
"profile": "release",
"target": "aarch64-apple-darwin",
"rustc": "rustc 1.90.0",
"supports_options": true
},
"trusty-search 0.39.0 (path+file:///Users/masa/tmp/ts/crates/trusty-search)": {
"bins": ["trusty-search"]
},
"trusty-channels 0.1.0 (git+ssh://git@github.com/bobmatnyc/trusty-tools.git#b45f2ad)": {
"bins": ["slack-mcp", "telegram-mcp"]
}
}
}"#;
fn always_exists(_: &Path) -> bool {
true
}
const CARGO_BIN: &str = "/Users/masa/.cargo/bin";
fn installed(bin: &str) -> PathBuf {
PathBuf::from(CARGO_BIN).join(bin)
}
fn never_exists(_: &Path) -> bool {
false
}
#[test]
fn parses_a_real_ledger() {
let installs = parse_cargo_installs(LEDGER).expect("ledger should parse");
assert_eq!(installs.len(), 3);
let mpm = installs.iter().find(|i| i.package == "trusty-mpm").unwrap();
assert_eq!(mpm.version, "1.3.1");
assert_eq!(mpm.source, InstallSource::Registry);
assert_eq!(mpm.bins, vec!["tm".to_string()]);
let channels = installs
.iter()
.find(|i| i.package == "trusty-channels")
.unwrap();
assert_eq!(channels.bins.len(), 2);
}
#[test]
fn parse_returns_none_for_garbage() {
assert!(parse_cargo_installs("not json").is_none());
}
#[test]
fn parse_skips_malformed_keys() {
let installs = parse_cargo_installs(r#"{"installs":{"nonsense":{"bins":["x"]}}}"#).unwrap();
assert!(installs.is_empty());
}
#[test]
fn classifies_registry_source() {
assert_eq!(
classify_source("registry+https://github.com/rust-lang/crates.io-index"),
InstallSource::Registry
);
}
#[test]
fn classifies_path_source() {
assert_eq!(
classify_source("path+file:///Users/masa/tmp/x"),
InstallSource::Path(PathBuf::from("/Users/masa/tmp/x"))
);
}
#[test]
fn classifies_git_source() {
assert!(matches!(
classify_source("git+ssh://git@example.com/x.git#abc"),
InstallSource::Git(_)
));
}
#[test]
fn classifies_unknown_source() {
assert!(matches!(
classify_source("sparse+https://example.invalid"),
InstallSource::Other(_)
));
}
#[test]
fn unknown_without_a_ledger() {
let (status, msg) = provenance_report(
"tm",
"1.3.1",
&installed("tm"),
Path::new(CARGO_BIN),
None,
&always_exists,
);
assert_eq!(status, CheckStatus::Unknown, "message: {msg}");
assert!(msg.contains("cannot verify"), "message: {msg}");
}
#[test]
fn unknown_when_bin_is_not_in_the_ledger() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, msg) = provenance_report(
"tctl",
"0.4.3",
Path::new("/Users/masa/.local/bin/tctl"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(status, CheckStatus::Unknown, "message: {msg}");
assert!(msg.contains("not recorded"), "message: {msg}");
}
#[test]
fn fails_on_duplicate_installs() {
let ledger = vec![
CargoInstall {
package: "trusty-channels".into(),
version: "0.1.0".into(),
source: InstallSource::Path(PathBuf::from("/a")),
bins: vec!["slack-mcp".into()],
},
CargoInstall {
package: "trusty-channels".into(),
version: "0.1.1".into(),
source: InstallSource::Path(PathBuf::from("/b")),
bins: vec!["slack-mcp".into()],
},
];
let (status, msg) = provenance_report(
"slack-mcp",
"0.1.0",
&installed("slack-mcp"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(status, CheckStatus::Fail, "message: {msg}");
assert!(msg.contains("2 separate installs"), "message: {msg}");
}
#[test]
fn fails_on_version_disagreement() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, msg) = provenance_report(
"tm",
"1.2.3",
&installed("tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(status, CheckStatus::Fail, "message: {msg}");
assert!(msg.contains("1.2.3"), "message: {msg}");
assert!(msg.contains("1.3.1"), "message: {msg}");
assert!(
msg.contains("OLDER"),
"message must name the direction: {msg}"
);
}
#[test]
fn unknown_when_downloader_replaced_the_cargo_install() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, msg) = provenance_report(
"tm",
"1.4.0",
&installed("tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(
status,
CheckStatus::Unknown,
"a successful cargo-free upgrade must not read as a health failure: {msg}"
);
assert!(
msg.contains("NEWER"),
"message must name the direction: {msg}"
);
assert!(
msg.contains("prebuilt installer"),
"message must name the likely writer: {msg}"
);
assert!(msg.contains("#4964"), "message: {msg}");
}
#[test]
fn ledger_stale_message_claims_no_source_tree_freshness() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (_status, msg) = provenance_report(
"tm",
"1.4.0",
&installed("tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert!(
!msg.contains("NOT stale"),
"the row must not assert freshness it never checked: {msg}"
);
assert!(
msg.contains("bundled_asset_lag"),
"the row must name where the source-tree question is answered: {msg}"
);
assert!(msg.contains("#8482"), "message: {msg}");
}
#[test]
fn downloader_placed_binary_is_unknown_in_either_directory() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (before, before_msg) = provenance_report(
"tm",
"1.4.0",
Path::new("/Users/masa/.local/bin/tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
let (after, after_msg) = provenance_report(
"tm",
"1.4.0",
&installed("tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(before, CheckStatus::Unknown, "pre-Phase-3: {before_msg}");
assert_eq!(after, CheckStatus::Unknown, "post-Phase-3: {after_msg}");
assert_eq!(
before, after,
"the destination flip must not change severity"
);
}
#[test]
fn fails_when_versions_cannot_be_ordered() {
let ledger = vec![CargoInstall {
package: "trusty-mpm".into(),
version: "not-a-version".into(),
source: InstallSource::Registry,
bins: vec!["tm".into()],
}];
let (status, msg) = provenance_report(
"tm",
"1.4.0",
&installed("tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(status, CheckStatus::Fail, "message: {msg}");
assert!(msg.contains("cannot be ordered"), "message: {msg}");
}
#[test]
fn skew_is_ledger_stale_when_running_is_newer() {
assert_eq!(
classify_version_skew("1.3.1", "1.4.0"),
VersionSkew::LedgerStale
);
}
#[test]
fn skew_is_running_stale_when_ledger_is_newer() {
assert_eq!(
classify_version_skew("1.4.0", "1.3.1"),
VersionSkew::RunningStale
);
}
#[test]
fn skew_is_unordered_for_unparseable_versions() {
assert_eq!(
classify_version_skew("1.3", "1.4.0"),
VersionSkew::Unordered,
"a two-component version is not semver and must not be guessed at"
);
assert_eq!(
classify_version_skew("1.3.1", "wat"),
VersionSkew::Unordered
);
assert_eq!(
classify_version_skew("1.3.1", "1.3.1"),
VersionSkew::Unordered
);
}
#[test]
fn skew_orders_prereleases_by_semver_not_string() {
assert_eq!(
classify_version_skew("1.4.0", "1.4.0-rc.1"),
VersionSkew::RunningStale
);
assert_eq!(
classify_version_skew("1.4.0-rc.1", "1.4.0"),
VersionSkew::LedgerStale
);
}
#[test]
fn fails_when_path_source_is_gone() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, msg) = provenance_report(
"trusty-search",
"0.39.0",
&installed("trusty-search"),
Path::new(CARGO_BIN),
Some(&ledger),
&never_exists,
);
assert_eq!(status, CheckStatus::Fail, "message: {msg}");
assert!(msg.contains("NO LONGER EXISTS"), "message: {msg}");
}
#[test]
fn warns_for_a_live_path_install() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, msg) = provenance_report(
"trusty-search",
"0.39.0",
&installed("trusty-search"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(status, CheckStatus::Warn, "message: {msg}");
assert!(
msg.contains("invisible to registry update"),
"message: {msg}"
);
}
#[test]
fn warns_for_a_git_install() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, msg) = provenance_report(
"slack-mcp",
"0.1.0",
&installed("slack-mcp"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(status, CheckStatus::Warn, "message: {msg}");
assert!(msg.contains("git"), "message: {msg}");
}
#[test]
fn ok_for_a_matching_registry_install() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, msg) = provenance_report(
"tm",
"1.3.1",
&installed("tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(status, CheckStatus::Ok, "message: {msg}");
assert!(msg.contains("crates.io"), "message: {msg}");
}
#[test]
fn unknown_when_running_binary_is_not_the_cargo_install() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, msg) = provenance_report(
"tm",
"1.3.1",
Path::new("/Users/masa/.local/bin/tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(
status,
CheckStatus::Unknown,
"a binary cargo did not install must never inherit the cargo record: {msg}"
);
assert!(msg.contains("/Users/masa/.local/bin/tm"), "message: {msg}");
assert!(msg.contains("/Users/masa/.cargo/bin/tm"), "message: {msg}");
assert!(
msg.contains("which -a"),
"message must name the diagnosis: {msg}"
);
}
#[test]
fn ok_when_running_binary_is_the_cargo_install() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, msg) = provenance_report(
"tm",
"1.3.1",
&installed("tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(status, CheckStatus::Ok, "message: {msg}");
}
#[test]
fn unknown_for_a_build_run_in_place() {
let ledger = parse_cargo_installs(LEDGER).unwrap();
let (status, _msg) = provenance_report(
"tm",
"1.3.1",
Path::new("/repo/target/debug/tm"),
Path::new(CARGO_BIN),
Some(&ledger),
&always_exists,
);
assert_eq!(status, CheckStatus::Unknown);
}