Watch
0
0
Fork
You've already forked hyperhive
0

write the review-classifier fake agent scripts from a child process

This commit is contained in:
atlas 2026-10-28 11:29:35 +01:00 • committed by mara
commit 41f832458e
4 changed files with 31 additions and 11 deletions

View file

@ -274,8 +274,6 @@ impl Sink for FinalText {
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::os::unix::fs::PermissionsExt as _;
use swarm_wire::review_classifier::Prices; use swarm_wire::review_classifier::Prices;
use super::*; use super::*;
@ -347,12 +345,10 @@ done
fn acp(dir: &Path) -> (Acp<Arc<Costs>>, Arc<Costs>) { fn acp(dir: &Path) -> (Acp<Arc<Costs>>, Arc<Costs>) {
let script = dir.join("agent.sh"); let script = dir.join("agent.sh");
let log = dir.join("log"); let log = dir.join("log");
std::fs::write( crate::test_script::write_executable(
&script, &script,
AGENT.replacen("log=\"$1\"", &format!("log='{}'", log.display()), 1), &AGENT.replacen("log=\"$1\"", &format!("log='{}'", log.display()), 1),
) );
.expect("written");
std::fs::set_permissions(&script, std::fs::Permissions::from_mode(0o755)).expect("chmod");
let costs = Arc::new(Costs::default()); let costs = Arc::new(Costs::default());
let acp = Acp { let acp = Acp {
program: PathBuf::from("/nix/store/x-opencode/bin/opencode"), program: PathBuf::from("/nix/store/x-opencode/bin/opencode"),

View file

@ -25,6 +25,8 @@ mod child_env;
mod cost; mod cost;
mod prompt; mod prompt;
mod run; mod run;
#[cfg(test)]
mod test_script;
/// The cert-auth role this service logs in to the store as. `swarm-bao.nix` /// The cert-auth role this service logs in to the store as. `swarm-bao.nix`
/// writes it, matching the leaf's subject. /// writes it, matching the leaf's subject.

View file

@ -856,12 +856,9 @@ printf '{"type":"result","subtype":"success","is_error":false,"result":"ok"}\n'
#[tokio::test] #[tokio::test]
async fn claude_reads_the_shared_context_and_the_question_as_separate_blocks() { async fn claude_reads_the_shared_context_and_the_question_as_separate_blocks() {
use std::os::unix::fs::PermissionsExt as _;
let tmp = tempfile::tempdir().expect("a dir"); let tmp = tempfile::tempdir().expect("a dir");
let script = tmp.path().join("claude.sh"); let script = tmp.path().join("claude.sh");
std::fs::write(&script, CLAUDE).expect("written"); crate::test_script::write_executable(&script, CLAUDE);
std::fs::set_permissions(&script, std::fs::Permissions::from_mode(0o755)).expect("chmod");
let claude = Claude { let claude = Claude {
program: PathBuf::from("claude"), program: PathBuf::from("claude"),
trampoline: script.clone(), trampoline: script.clone(),

View file

@ -0,0 +1,25 @@
//! Fake agent scripts for the tests.
use std::path::Path;
/// Write the script `body` to `path` as an executable, from a child process
/// rather than from this one: a write fd on it held here could be inherited
/// by a child another test thread forks, and exec'ing a file some process
/// still holds open for writing fails with `ETXTBSY`.
///
/// # Panics
///
/// If `/bin/sh` cannot run or the write fails.
pub fn write_executable(path: &Path, body: &str) {
let status = std::process::Command::new("/bin/sh")
.args([
"-c",
r#"printf '%s' "$1" > "$2" && chmod 755 "$2""#,
"sh",
body,
])
.arg(path)
.status()
.expect("run /bin/sh");
assert!(status.success(), "writing {} failed", path.display());
}