use std::time::Duration;
use crate::provider_store::ProviderStoreLimits;
#[derive(Debug, Clone)]
pub struct DhtConfig {
pub k: usize,
pub alpha: usize,
pub provider_ttl: Duration,
pub republish_interval: Duration,
pub refresh_interval: Duration,
pub rpc_timeout: Duration,
pub provider_store_limits: ProviderStoreLimits,
}
impl Default for DhtConfig {
fn default() -> Self {
DhtConfig {
k: 20,
alpha: 3,
provider_ttl: Duration::from_secs(2 * 60 * 60),
republish_interval: Duration::from_secs(60 * 60),
refresh_interval: Duration::from_secs(60 * 60),
rpc_timeout: Duration::from_secs(5),
provider_store_limits: ProviderStoreLimits::default(),
}
}
}
impl DhtConfig {
pub fn provider_ttl_secs(&self) -> u64 {
self.provider_ttl.as_secs()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn defaults_follow_kademlia() {
let c = DhtConfig::default();
assert_eq!(c.k, 20);
assert_eq!(c.alpha, 3);
assert_eq!(c.provider_ttl_secs(), 7200);
}
#[test]
fn republish_is_shorter_than_ttl() {
let c = DhtConfig::default();
assert!(c.republish_interval < c.provider_ttl);
}
#[test]
fn default_provider_store_limits_are_bounded() {
let c = DhtConfig::default();
assert!(c.provider_store_limits.max_providers_per_key > 0);
assert!(c.provider_store_limits.max_total_records > 0);
}
}