bijux-dag-runtime 0.4.0

Execution engine, replay semantics, and runtime policy layer for Bijux DAG graphs.
Documentation
use crate::policy::policy_allows_effects;
use crate::trace::trace_status_label;
use crate::{NodeStatus, PolicyConfig};
use bijux_dag_core::Effect;

#[test]
fn policy_evaluation_works_without_node_execution() {
    let policy = PolicyConfig {
        deny_network: true,
        deny_env: false,
        deny_clock: true,
        clean_env: true,
        ..PolicyConfig::default()
    };
    assert!(!policy_allows_effects(&policy, &[Effect::Network]));
    assert!(!policy_allows_effects(&policy, &[Effect::Clock]));
    assert!(policy_allows_effects(&policy, &[Effect::Filesystem]));
}

#[test]
fn deny_network_policy_is_consistent_for_shell_and_container_effects() {
    let policy = PolicyConfig {
        deny_network: true,
        deny_env: false,
        deny_clock: false,
        clean_env: true,
        ..PolicyConfig::default()
    };
    assert!(!policy_allows_effects(&policy, &[Effect::Network]));
    assert!(!policy_allows_effects(&policy, &[Effect::Filesystem, Effect::Network]));
}

#[test]
fn clean_env_and_deny_env_interaction_is_deterministic() {
    let strict = PolicyConfig {
        deny_network: false,
        deny_env: true,
        deny_clock: false,
        clean_env: true,
        ..PolicyConfig::default()
    };
    assert!(!policy_allows_effects(&strict, &[Effect::Env]));
    assert!(policy_allows_effects(&strict, &[Effect::Filesystem]));
}

#[test]
fn trace_label_mapping_is_stable_without_filesystem() {
    assert_eq!(trace_status_label(&NodeStatus::Success), "success");
    assert_eq!(trace_status_label(&NodeStatus::Failed), "failed");
    assert_eq!(trace_status_label(&NodeStatus::Skipped), "skipped");
    assert_eq!(trace_status_label(&NodeStatus::Cached), "cached");
}