Files
2026-10-03 22:20:39 -07:00

77 lines
2.2 KiB
Rust

//! A `consult` grant: empty constraints, no paths or hosts. Do not edit.
#[path = "support/tmp.rs"]
mod tmp;
use brokerd::args::{ToolArgs, ToolName, parse};
use brokerd::grants::load;
use tmp::TempDir;
fn body(rest: &str) -> String {
format!("tool = \"consult\"\nmode = \"auto\"\nmax_taint = \"private\"\n{rest}")
}
#[test]
fn consult_parses_and_is_not_a_container_tool() {
assert_eq!(ToolName::parse("consult"), Some(ToolName::Consult));
assert_eq!(ToolName::Consult.as_str(), "consult");
assert!(!ToolName::Consult.is_memory());
assert!(
!ToolName::ALL.contains(&ToolName::Consult),
"ALL is the container tools"
);
let args = parse(ToolName::Consult, r#"{"question":"hello"}"#).unwrap();
assert_eq!(args.tool(), ToolName::Consult);
assert_eq!(
args,
ToolArgs::Consult {
question: "hello".to_string()
}
);
assert_eq!(args.canonical_json(), r#"{"question":"hello"}"#);
}
#[test]
fn unknown_keys_are_invalid_arguments() {
let err = parse(ToolName::Consult, r#"{"question":"hello","history":[]}"#).unwrap_err();
let detail = err.detail();
assert!(
detail.contains("unknown") || detail.contains("history"),
"{detail}"
);
}
#[test]
fn a_consult_grant_with_empty_constraints_loads() {
let dir = TempDir::new("grants-consult");
dir.write("consult.toml", &body(""));
let set = load(dir.path()).unwrap();
assert_eq!(set.grants()[0].grant.tool, "consult");
assert!(set.grants()[0].grant.untrusted);
}
#[test]
fn consult_does_not_take_paths_or_hosts() {
let dir = TempDir::new("grants-consult-paths");
dir.write("consult.toml", &body("[constraints]\npaths = [\"/tmp\"]\n"));
let problems = load(dir.path()).expect_err("paths");
assert!(
problems
.iter()
.any(|p| p.problem.contains("does not take paths")),
"{problems:?}"
);
let dir = TempDir::new("grants-consult-hosts");
dir.write(
"consult.toml",
&body("[constraints]\nhosts = [\"example.com\"]\n"),
);
let problems = load(dir.path()).expect_err("hosts");
assert!(
problems
.iter()
.any(|p| p.problem.contains("does not take hosts")),
"{problems:?}"
);
}