Files
telemt/src/config/tests/load_basic_tests/quota_period_tests.rs
T
2026-10-19 00:15:27 +03:00

70 lines
2.4 KiB
Rust

use super::*;
#[test]
fn quota_period_configuration_survives_round_trip() {
let cfg: ProxyConfig = toml::from_str(
r#"
[access.users]
alice = "0123456789abcdef0123456789abcdef"
[access.user_data_quota]
alice = 1024
[access.user_quota_periods]
alice = "monthly"
"#,
)
.unwrap();
let encoded = serde_json::to_value(&cfg).unwrap();
assert_eq!(encoded["access"]["user_quota_periods"]["alice"], "monthly");
}
#[test]
fn quota_period_requires_a_configured_positive_quota_in_both_validation_paths() {
for tail in [
"[access.user_quota_periods]\nghost = 'daily'\n",
"[access.user_quota_periods]\nalice = 'daily'\n",
"[access.user_data_quota]\nalice = 0\n[access.user_quota_periods]\nalice = 'daily'\n",
] {
let source = format!("[access.users]\nalice = '0123456789abcdef0123456789abcdef'\n{tail}");
let cfg: ProxyConfig = toml::from_str(&source).unwrap();
assert!(
cfg.validate()
.unwrap_err()
.to_string()
.contains("user_quota_periods")
);
assert!(load_config_error_from_temp_toml(&source).contains("user_quota_periods"));
}
for period in ["daily", "weekly", "monthly"] {
let source = format!(
"[general]\nconfig_strict = true\n[access.users]\nalice = '0123456789abcdef0123456789abcdef'\n[access.user_data_quota]\nalice = 1024\n[access.user_quota_periods]\nalice = '{period}'\n"
);
assert_eq!(
load_config_from_temp_toml(&source)
.access
.user_quota_periods
.len(),
1
);
}
}
#[test]
fn quota_period_tokens_are_strict_and_inventory_is_bounded() {
for token in ["'Daily'", "'yearly'", "42", "true"] {
assert!(
toml::from_str::<ProxyConfig>(&format!("[access.user_quota_periods]\nalice = {token}"))
.is_err()
);
}
let mut cfg = ProxyConfig::default();
assert!(cfg.access.user_quota_periods.is_empty());
cfg.access.users = (0..65_537)
.map(|n| (format!("u{n}"), "0123456789abcdef0123456789abcdef".into()))
.collect();
cfg.access.user_data_quota.insert("u0".into(), 1);
cfg.access
.user_quota_periods
.insert("u0".into(), crate::config::UserQuotaPeriod::Daily);
assert!(cfg.validate().unwrap_err().to_string().contains("65536"));
}