use wsc_attestation::ToolInfo;
fn base_tool() -> ToolInfo {
ToolInfo {
name: "loom".into(),
version: "0.1.0".into(),
tool_hash: None,
parameters: Default::default(),
toolchain: None,
toolchain_manifest_digest: None,
}
}
#[test]
fn toolinfo_captures_the_layer_identity_varve_run_exports() {
unsafe {
std::env::remove_var("VARVE_LAYER");
std::env::remove_var("VARVE_LAYER_MANIFEST_DIGEST");
}
let outside = base_tool().with_varve_env();
assert_eq!(outside.toolchain, None);
assert_eq!(outside.toolchain_manifest_digest, None);
let json = serde_json::to_string(&outside).unwrap();
assert!(
!json.contains("toolchain"),
"absent identity must not serialize: {json}"
);
unsafe {
std::env::set_var("VARVE_LAYER", "2026.07.0");
std::env::set_var(
"VARVE_LAYER_MANIFEST_DIGEST",
"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
);
}
let dispatched = base_tool().with_varve_env();
assert_eq!(dispatched.toolchain.as_deref(), Some("2026.07.0"));
assert_eq!(
dispatched.toolchain_manifest_digest.as_deref(),
Some("sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
);
let json = serde_json::to_string(&dispatched).unwrap();
let parsed: ToolInfo = serde_json::from_str(&json).unwrap();
assert_eq!(parsed.toolchain.as_deref(), Some("2026.07.0"));
unsafe {
std::env::remove_var("VARVE_LAYER");
std::env::remove_var("VARVE_LAYER_MANIFEST_DIGEST");
}
}