malvin 0.2.4

Non-interactive research and coding agent
use std::ffi::OsStr;

#[test]
fn kiss_cov_malvin_sandbox_symbols() {
    let _ = stringify!(crate::malvin_sandbox::init_malvin_spawn_baseline);
    let _ = crate::acp::reap_baseline_amnestied_agent_orphans_blocking;
    let _ = stringify!(crate::malvin_sandbox::malvin_std_command);
    let _ = stringify!(crate::malvin_sandbox::install_parent_death_signal);
    let _ = stringify!(crate::malvin_sandbox::install_tokio_parent_death_signal);
    let _ = stringify!(crate::malvin_sandbox::note_active_sandbox_session);
}

#[allow(unsafe_code)]
fn with_env_set(key: &str, value: &str, f: impl FnOnce()) {
    let prior = std::env::var_os(key);
    unsafe {
        std::env::set_var(key, value);
    }
    f();
    unsafe {
        match prior {
            Some(v) => std::env::set_var(key, v),
            None => std::env::remove_var(key),
        }
    }
}

#[test]
fn sandbox_commands_do_not_force_cargo_build_jobs() {
    with_env_set("CARGO_BUILD_JOBS", "8", || {
        let std_cmd = crate::malvin_sandbox::malvin_std_command("true");
        let jobs = std_cmd
            .get_envs()
            .find_map(|(k, v)| (k == "CARGO_BUILD_JOBS").then_some(v));
        assert!(jobs.is_none());
    });
}

#[test]
fn sandbox_commands_do_not_force_nextest_test_threads() {
    with_env_set("NEXTEST_TEST_THREADS", "8", || {
        let std_cmd = crate::malvin_sandbox::malvin_std_command("true");
        let threads = std_cmd
            .get_envs()
            .find_map(|(k, v)| (k == "NEXTEST_TEST_THREADS").then_some(v));
        assert!(threads.is_none());
    });
}

#[test]
fn sandbox_commands_do_not_force_rust_test_threads() {
    with_env_set("RUST_TEST_THREADS", "8", || {
        let std_cmd = crate::malvin_sandbox::malvin_std_command("true");
        let threads = std_cmd
            .get_envs()
            .find_map(|(k, v)| (k == "RUST_TEST_THREADS").then_some(v));
        assert!(threads.is_none());
    });
}

#[test]
fn sandbox_commands_force_malloc_arena_max_to_two() {
    with_env_set("MALLOC_ARENA_MAX", "8", || {
        let std_cmd = crate::malvin_sandbox::malvin_std_command("true");
        let arenas = std_cmd
            .get_envs()
            .find_map(|(k, v)| (k == "MALLOC_ARENA_MAX").then_some(v));
        assert_eq!(arenas, Some(Some(OsStr::new("2"))));
    });
}

#[test]
fn note_active_sandbox_session_cleared_after_end() {
    let tmp = tempfile::tempdir().expect("tempdir");
    crate::malvin_sandbox::clear_active_sandbox_session_for_test();
    crate::malvin_sandbox::note_active_sandbox_session(
        None,
        crate::malvin_sandbox::malvin_spawn_baseline(),
        tmp.path(),
    )
    .expect("note");
    crate::malvin_sandbox::clear_active_sandbox_session();
    crate::malvin_sandbox::clear_active_sandbox_session_for_test();
}