77 lines
2.2 KiB
Rust
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:?}"
|
|
);
|
|
}
|