#[test]
fn test_internal_types_not_exported_in_public_api() {
let _ = std::mem::size_of::<limiteron::Governor>();
let _ = std::mem::size_of::<limiteron::GovernorStats>();
let _ = std::mem::size_of::<limiteron::FlowControlConfig>();
let _ = std::mem::size_of::<limiteron::DecisionChain>();
let _ = std::mem::size_of::<limiteron::BanInfo>();
}
#[test]
fn test_ban_info_fields_are_encapsulated() {
use limiteron::BanInfo;
use std::time::{Duration, SystemTime};
let expires_at = SystemTime::now() + Duration::from_secs(3600);
let ban_info = BanInfo::new(
"test reason".to_string(),
chrono::DateTime::<chrono::Utc>::from(expires_at),
1,
);
let _ = ban_info.reason();
let _ = ban_info.banned_until();
let _ = ban_info.ban_times();
}
#[test]
fn test_config_uses_type_safe_enums() {
use limiteron::config::{Action, ActionConfig, GlobalConfig};
let action_config = ActionConfig {
on_exceed: Action::Reject,
ban: None,
};
assert!(matches!(action_config.on_exceed, Action::Reject));
let global_config = GlobalConfig::default();
let _ = format!("{:?}", global_config);
}
#[test]
fn test_trusted_proxy_config_security() {
use limiteron::config::TrustedProxyConfig;
let config = TrustedProxyConfig::default();
assert!(!config.enabled);
assert!(!config.is_trusted("192.168.1.1"));
}
#[test]
fn test_config_validation_logic_exists() {
use limiteron::config::{ActionConfig, FlowControlConfig, LimiterConfig, Matcher, Rule};
let config = FlowControlConfig {
version: "1.0.0".to_string(),
global: limiteron::config::GlobalConfig::default(),
rules: vec![Rule {
id: "test_rule".to_string(),
name: "Test Rule".to_string(),
priority: 100,
matchers: vec![Matcher::User {
user_ids: vec!["*".to_string()],
}],
limiters: vec![LimiterConfig::TokenBucket {
capacity: 100,
refill_rate: 10,
}],
action: ActionConfig::default(),
}],
};
let result = config.validate();
assert!(result.is_ok(), "有效配置应验证通过,但得到: {:?}", result);
}