Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/edda

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}");
}