use criterion::{black_box, criterion_group, criterion_main, Criterion};
use spawn_access_control::{
security_analyzer::{SecurityAnalyzer, SecurityConfig},
audit::{AuditLogEntry, ActionResult},
};
use chrono::{Duration, Utc};
fn benchmark_security_analysis(c: &mut Criterion) {
let config = SecurityConfig {
recent_window: Duration::minutes(30),
max_failures: 5,
min_suspicious_score: 0.7,
};
let analyzer = SecurityAnalyzer::new(config);
let test_data = vec![AuditLogEntry {
id: "test_1".to_string(),
timestamp: Utc::now(),
user_id: "test_user".to_string(),
action: "test_action".to_string(),
resource_id: "test_resource".to_string(),
result: ActionResult::Success,
details: Some("test details".to_string()),
ip_address: Some("127.0.0.1".to_string()),
user_agent: Some("test agent".to_string()),
}; 1000];
c.bench_function("security_analysis_1000", |b| {
b.iter(|| analyzer.analyze_recent_activity(black_box(&test_data)))
});
}
criterion_group!(benches, benchmark_security_analysis);
criterion_main!(benches);