//! The trampoline through the real binary: a variable of the daemon's //! environment does not reach the program it execs, the runtime's key does. use std::process::Command; #[test] fn the_daemons_store_identity_does_not_reach_claude() { let out = Command::new(env!("CARGO_BIN_EXE_swarm-review-classifier")) // Stands in for `claude`: prints what it was handed. .env("SWARM_REVIEW_CLASSIFIER_EXEC_CLAUDE", "/bin/sh") .env("BAO_CLIENT_KEY", "/run/credentials/x/review-classifier-bao-key") .env("SWARM_REVIEW_CLASSIFIER_NATS_URL", "tls://nats.example:4222") .env("ANTHROPIC_API_KEY", "k") .args([ "-c", r#"printf '%s|%s|%s' "${BAO_CLIENT_KEY-unset}" "${SWARM_REVIEW_CLASSIFIER_NATS_URL-unset}" "${ANTHROPIC_API_KEY-unset}""#, ]) .output() .expect("the binary runs"); assert!(out.status.success(), "{out:?}"); assert_eq!(String::from_utf8_lossy(&out.stdout), "unset|unset|k"); } #[test] fn the_daemons_store_identity_does_not_reach_opencode() { let out = Command::new(env!("CARGO_BIN_EXE_swarm-review-classifier")) // Stands in for `opencode`: prints what it was handed. .env("SWARM_REVIEW_CLASSIFIER_EXEC_OPENCODE", "/bin/sh") .env("BAO_CLIENT_KEY", "/run/credentials/x/review-classifier-bao-key") .env("CREDENTIALS_DIRECTORY", "/run/credentials/x") .env("ANTHROPIC_API_KEY", "k") .env("ACP_PROVIDER_API_KEY", "p") .env("OPENCODE_PERMISSION", r#"{"*":"deny"}"#) .args([ "-c", r#"printf '%s|%s|%s|%s|%s' "${BAO_CLIENT_KEY-unset}" "${CREDENTIALS_DIRECTORY-unset}" "${ANTHROPIC_API_KEY-unset}" "${ACP_PROVIDER_API_KEY-unset}" "${OPENCODE_PERMISSION-unset}""#, ]) .output() .expect("the binary runs"); assert!(out.status.success(), "{out:?}"); assert_eq!( String::from_utf8_lossy(&out.stdout), r#"unset|unset|unset|p|{"*":"deny"}"# ); }