Skip to main content

scx_pandemonium/cli/
test_gate.rs

1use std::process::Command;
2
3use anyhow::{bail, Result};
4
5use super::TARGET_DIR;
6
7pub fn run_test_gate() -> Result<()> {
8    let project_root = env!("CARGO_MANIFEST_DIR");
9
10    log_info!("PANDEMONIUM test gate");
11
12    // LAYER 1: UNIT TESTS (NO ROOT)
13    log_info!("Layer 1: Rust unit tests");
14    let l1 = Command::new("cargo")
15        .args(["test", "--release"])
16        .env("CARGO_TARGET_DIR", TARGET_DIR)
17        .current_dir(project_root)
18        .status()?;
19
20    if !l1.success() {
21        bail!("LAYER 1 FAILED -- SKIPPING REMAINING LAYERS");
22    }
23
24    // LAYERS 2-5: INTEGRATION TESTS (REQUIRES ROOT)
25    log_info!("Layers 2-5: integration (requires root)");
26    let l2 = Command::new("sudo")
27        .args([
28            "-E",
29            &format!("CARGO_TARGET_DIR={}", TARGET_DIR),
30            "cargo",
31            "test",
32            "--test",
33            "gate",
34            "--release",
35            "--",
36            "--ignored",
37            "--test-threads=1",
38            "full_gate",
39        ])
40        .env("CARGO_TARGET_DIR", TARGET_DIR)
41        .current_dir(project_root)
42        .status()?;
43
44    if !l2.success() {
45        std::process::exit(l2.code().unwrap_or(1));
46    }
47
48    Ok(())
49}