spawn-access-control 0.1.12

A Rust library for access control management with WebAssembly support, including role-based access control (RBAC), permissions, and audit logging.
Documentation
use crate::monitoring::{ModelMonitor, MonitoringConfig, HealthStatus, AlertSeverity};
use crate::ml_metrics::ModelMetrics;
use crate::model_explainer::{SecurityImpactAnalysis, RiskFactor};
use chrono::{Duration, Utc};
use std::time::Duration as StdDuration;

#[tokio::test]
async fn test_model_monitoring() {
    let config = MonitoringConfig {
        metrics_window_size: 10,
        performance_threshold: 0.8,
        security_threshold: 0.3,
        alert_cooldown: Duration::hours(1),
    };

    let monitor = ModelMonitor::new(config);

    let metrics = create_test_metrics(0.75);    
    monitor.update_metrics(metrics).await;

    let security = create_test_security_analysis(0.4);
    monitor.update_security_analysis(security).await;

    let health = monitor.get_model_health().await;
    
    assert_eq!(health.current_status, HealthStatus::Degraded);
    assert!(!health.alerts.is_empty());
    
    let critical_alerts: Vec<_> = health.alerts.iter()
        .filter(|a| a.severity == AlertSeverity::Critical)
        .collect();
    assert!(!critical_alerts.is_empty());
}

fn create_test_metrics(f1_score: f64) -> ModelMetrics {
    ModelMetrics {
        model_id: "test_model".to_string(),
        timestamp: Utc::now(),
        accuracy: f1_score,
        precision: f1_score,
        recall: f1_score,
        f1_score,
        confusion_matrix: Default::default(),
        feature_importance: Default::default(),
        training_duration: StdDuration::from_secs(60),
    }
}

fn create_test_security_analysis(risk_level: f64) -> SecurityImpactAnalysis {
    SecurityImpactAnalysis {
        false_positive_impact: risk_level,
        false_negative_impact: risk_level / 2.0,
        risk_factors: vec![
            RiskFactor {
                name: "Test Risk".to_string(),
                impact_score: risk_level,
                mitigation_strategy: "Test mitigation".to_string(),
            }
        ],
    }
}