mod support;
use std::process::Command;
use support::EnvGuard;
fn steer_with(env: &[(&str, &str)], removals: &[&str]) -> std::process::Output {
let _guard = EnvGuard::new(env);
let mut command = Command::new(env!("CARGO_BIN_EXE_lf"));
command.args([
"work",
"steer",
"task",
"task_00000000000000000000000000000000",
"do the thing",
]);
for (key, value) in env {
command.env(key, value);
}
for key in removals {
command.env_remove(key);
}
command.output().expect("run lf work steer")
}
#[test]
fn an_in_run_process_without_a_lease_is_refused_rather_than_treated_as_the_user() {
let output = steer_with(&[("LF_RUN_CONTEXT", "agent")], &["LF_RUN_LEASE"]);
assert!(
!output.status.success(),
"a lease-less in-Run process must not succeed as User"
);
let stderr = String::from_utf8_lossy(&output.stderr);
assert!(
stderr.contains("LF_RUN_LEASE"),
"refusal must name the missing lease, got: {stderr}"
);
}
#[test]
fn a_malformed_lease_fails_closed_instead_of_falling_through_to_user() {
let output = steer_with(
&[("LF_RUN_CONTEXT", "agent"), ("LF_RUN_LEASE", "not-a-token")],
&[],
);
assert!(
!output.status.success(),
"a malformed lease must not degrade to User authority"
);
}