crates/admit/tests/settings_toml.rs
//! The `[admit]` table as an estate config writes it.
#![cfg(feature = "serde")]
use edda_admit::{Settings, Slots, DEFAULT_ANONYMOUS_PER_DAY, DEFAULT_LIMIT_BYTES};
#[derive(serde::Deserialize)]
struct Estate {
admit: Settings,
}
fn parse(s: &str) -> Settings {
toml::from_str::<Estate>(s).expect("parses").admit
}
#[test]
fn an_empty_table_is_the_shipped_defaults() {
let s = parse("[admit]\n");
assert_eq!(s, Settings::default());
assert_eq!(s.limit, Some(DEFAULT_LIMIT_BYTES));
assert_eq!(s.anonymous_per_day, Some(DEFAULT_ANONYMOUS_PER_DAY));
}
#[test]
fn limit_none_is_pass_through() {
let s = parse("[admit]\nlimit = \"none\"\n");
assert!(s.is_pass_through());
assert_eq!(s.build().policy(), "pass-through");
}
#[test]
fn sizes_and_slots() {
let s = parse(
"[admit]\nlimit = \"250 GB\"\nwindow_days = 7\nanonymous_per_day = 1000\nslots = { full = 64, anonymous = 5 }\nmax_consumers = 1024\n",
);
assert_eq!(s.limit, Some(250_000_000_000));
assert_eq!(s.window_days, 7);
assert_eq!(s.anonymous_per_day, Some(1000));
assert_eq!(s.slots, Some(Slots { full: 64, anonymous: 5 }));
assert_eq!(s.max_consumers, 1024);
}
#[test]
fn a_typo_is_refused_by_name() {
let e = toml::from_str::<Estate>("[admit]\nlimt = \"1 GB\"\n").err().unwrap().to_string();
assert!(e.contains("limt"), "{e}");
let e = toml::from_str::<Estate>("[admit]\nlimit = \"1 GX\"\n").err().unwrap().to_string();
assert!(e.contains("GX"), "{e}");
}