use std::time::Duration;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct TraversalConfig {
pub reflex_timeout: Duration,
pub classify_deadline: Duration,
pub punch_fire_lead: Duration,
pub punch_deadline: Duration,
pub port_mapping_renewal: Duration,
pub punch_budget_window: Duration,
pub punch_requests_per_window: u32,
pub punch_trains_per_window: u32,
pub punch_trains_concurrent_max: usize,
}
impl Default for TraversalConfig {
fn default() -> Self {
Self {
reflex_timeout: Duration::from_secs(3),
classify_deadline: Duration::from_secs(5),
punch_fire_lead: Duration::from_millis(500),
punch_deadline: Duration::from_secs(5),
port_mapping_renewal: Duration::from_secs(30 * 60),
punch_budget_window: Duration::from_secs(10),
punch_requests_per_window: 4,
punch_trains_per_window: 4,
punch_trains_concurrent_max: 8,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn defaults_match_plan() {
let cfg = TraversalConfig::default();
assert_eq!(cfg.reflex_timeout, Duration::from_secs(3));
assert_eq!(cfg.classify_deadline, Duration::from_secs(5));
assert_eq!(cfg.punch_fire_lead, Duration::from_millis(500));
assert_eq!(cfg.punch_deadline, Duration::from_secs(5));
assert_eq!(cfg.port_mapping_renewal, Duration::from_secs(1800));
assert_eq!(cfg.punch_budget_window, Duration::from_secs(10));
assert_eq!(cfg.punch_requests_per_window, 4);
assert_eq!(cfg.punch_trains_per_window, 4);
assert_eq!(cfg.punch_trains_concurrent_max, 8);
}
}