write the review-classifier fake agent scripts from a child process
This commit is contained in:
parent
c16cf1756f
commit
41f832458e
4 changed files with 31 additions and 11 deletions
|
|
@ -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"),
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
25
swarm-review-classifier/src/test_script.rs
Normal file
25
swarm-review-classifier/src/test_script.rs
Normal 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());
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue