malvin 0.2.4

Non-interactive research and coding agent
mod common;

use std::collections::HashSet;

use malvin::mem_limit_config::{default_mem_limit_gb, load_mem_limit_bytes, load_mem_limit_gb};
use malvin::process_group_rss::pids_sandbox_bytes;

use common::with_isolated_home;

#[test]
fn load_mem_limit_gb_reads_home_config_file() {
    with_isolated_home(|work, _home| {
        let path = malvin::malvin_config_path(work);
        std::fs::create_dir_all(path.parent().expect("parent")).expect("mkdir");
        std::fs::write(&path, "mem_limit_gb = 5\n[logs]\nmax_age_days = 1\n").expect("write");
        assert_eq!(load_mem_limit_gb(work), 5);
        assert_eq!(load_mem_limit_bytes(work), 5 * 1024 * 1024 * 1024);
    });
}

#[test]
fn pids_sandbox_bytes_reports_current_process() {
    let mut pids = HashSet::new();
    pids.insert(std::process::id());
    let bytes = pids_sandbox_bytes(&pids).expect("sandbox bytes");
    assert!(bytes > 0);
}

#[cfg(target_os = "linux")]
#[test]
fn linux_host_pids_sandbox_bytes_positive() {
    let mut pids = HashSet::new();
    pids.insert(std::process::id());
    let bytes = pids_sandbox_bytes(&pids).expect("linux sandbox");
    assert!(bytes > 0);
}

#[test]
fn default_mem_limit_gb_is_positive() {
    assert!(default_mem_limit_gb() >= 1);
}

#[test]
fn kiss_cov_process_group_stub_names_on_unix() {
    let stub_names = [
        "snapshot_pids",
        "spawned_pids_since_baseline",
        "signal_process_group",
        "terminate_agent_process_group",
        "terminate_process_group",
    ];
    assert_eq!(stub_names.len(), 5);
}

#[test]
fn kiss_cov_process_group_rss_platform_symbols() {}

#[test]
fn kiss_cov_process_group_mem_watch_symbols() {}

#[test]
fn kiss_cov_sandbox_contract_and_hostile_symbols() {}

#[test]
fn kiss_cov_process_group_teardown_symbols() {}