use crate::{
AccessManager, Role, Resource, RateLimiter,
cache::OptimizedCache, distributed_cache::DistributedCache
};
use tokio;
#[tokio::test]
async fn test_async_access_control() {
let manager = AsyncAccessManager::new();
let admin_role = Role::new("admin", None);
let resource = Resource::new("secure_file", vec!["admin".to_string()]);
let control = AccessControl::new();
manager.add_access_control(control).await.unwrap();
assert!(manager.check_access(&resource).await.unwrap());
let metrics = manager.get_metrics().await;
assert_eq!(metrics.access_checks, 1);
}
#[test]
fn test_distributed_cache() {
let cache = OptimizedCache::new(1000);
cache.insert("test_key".to_string(), true);
assert_eq!(cache.get("test_key"), Some(true));
}
#[test]
fn test_role_hierarchy() {
let user_role = Role::new("user", None);
let admin_role = Role::new("admin", Some(Box::new(user_role.clone())));
let super_admin = Role::new("super_admin", Some(Box::new(admin_role.clone())));
assert!(super_admin.is_higher_or_equal(&user_role));
assert!(super_admin.is_higher_or_equal(&admin_role));
}
#[test]
fn test_audit_logging() {
let event = AuditEvent::new(
EventType::AccessAttempt,
"test_user",
"test_resource",
true
).with_details("Test access attempt".to_string());
assert!(event.success);
assert_eq!(event.user, "test_user");
}