pub mod acl;
pub mod cache;
#[cfg(feature = "cron")]
pub mod cron;
pub mod dataset;
pub mod domain_validator;
pub mod executable;
pub mod flow;
pub mod forward;
pub mod geoip;
pub mod geosite;
pub use acl::{AclAction, QueryAclPlugin};
pub use cache::CachePlugin;
pub use dataset::{ArbitraryPlugin, DomainSetPlugin, HostsPlugin, IpSetPlugin};
pub use flow::{
AcceptPlugin, GotoPlugin, JumpPlugin, PreferIpv4Plugin, PreferIpv6Plugin, RejectPlugin,
ReturnPlugin,
};
pub use forward::{ForwardPlugin, LoadBalanceStrategy};
pub use geoip::GeoIpPlugin;
pub use geosite::GeoSitePlugin;
pub use executable::{
BlackholePlugin, DebugPrintPlugin, DropRespPlugin, DualSelectorPlugin, Edns0OptPlugin,
Edns0Option, FallbackPlugin, IpPreference, MarkPlugin, NftSetPlugin, QuerySummaryPlugin,
RateLimitPlugin, RedirectPlugin, ReverseLookupPlugin, RosAddrlistPlugin, SequencePlugin,
SequenceStep, SleepPlugin, TtlPlugin,
};
#[cfg(feature = "cron")]
pub use cron::CronPlugin;
#[cfg(test)]
mod tests {
use super::*;
use crate::plugin::Plugin;
use std::sync::Arc;
#[test]
fn test_forward_plugin_accessible() {
let plugin = ForwardPlugin::new(vec!["8.8.8.8:53".to_string()]);
assert_eq!(plugin.name(), "forward");
}
#[test]
fn test_cache_plugin_accessible() {
let plugin = CachePlugin::new(100);
assert_eq!(plugin.name(), "cache");
}
#[test]
fn test_hosts_plugin_accessible() {
let plugin = HostsPlugin::new();
assert_eq!(plugin.name(), "hosts");
}
#[test]
fn test_ratelimit_plugin_accessible() {
let plugin = RateLimitPlugin::new(10, 60);
assert_eq!(plugin.name(), "rate_limit"); }
#[test]
fn test_advanced_plugins_accessible() {
let _blackhole = BlackholePlugin::new_from_strs(Vec::<&str>::new()).unwrap();
let _ttl = TtlPlugin::new(300, 0, 0);
let _return = ReturnPlugin::new();
}
#[test]
fn test_load_balance_strategy() {
let _rr = LoadBalanceStrategy::RoundRobin;
let _random = LoadBalanceStrategy::Random;
let _fastest = LoadBalanceStrategy::Fastest;
assert_eq!(
LoadBalanceStrategy::RoundRobin,
LoadBalanceStrategy::RoundRobin
);
}
#[test]
fn test_acl_action() {
let _allow = AclAction::Allow;
let _deny = AclAction::Deny;
}
#[test]
fn test_plugins_implement_trait() {
let forward: Arc<dyn Plugin> = Arc::new(ForwardPlugin::new(vec!["8.8.8.8:53".to_string()]));
let cache: Arc<dyn Plugin> = Arc::new(CachePlugin::new(100));
let hosts: Arc<dyn Plugin> = Arc::new(HostsPlugin::new());
assert_eq!(forward.name(), "forward");
assert_eq!(cache.name(), "cache");
assert_eq!(hosts.name(), "hosts");
}
}