#![recursion_limit = "512"]
#![cfg(all(feature = "plugin-metadata", feature = "plugin-whoami"))]
use pharos_corefile::{configure, parse};
use pharos_plugins::{Chain, directives};
#[test]
fn coredns_metadata_setup_cases() {
for directive in [
"metadata",
"metadata example.com.",
"metadata example.com. net.",
"metadata {}",
] {
let text = format!(".:53 {{\n{directive}\n whoami\n}}");
let blocks = parse("Corefile", &text).unwrap();
assert!(
configure::<Chain>(&blocks, directives()).is_ok(),
"{directive}"
);
}
for directive in ["metadata example.com. { some_param }", "metadata\nmetadata"] {
let text = format!(".:53 {{\n{directive}\n whoami\n}}");
let blocks = parse("Corefile", &text).unwrap();
assert!(
configure::<Chain>(&blocks, directives()).is_err(),
"{directive}"
);
}
}
#[test]
fn coredns_metadata_setup_domains() {
for (directive, expected) in [
("metadata", vec!["example.org."]),
("metadata example.com.", vec!["example.com."]),
("metadata example.com. net.", vec!["example.com.", "net."]),
] {
let text = format!("example.org:53 {{\n{directive}\n}}");
let blocks = parse("Corefile", &text).unwrap();
let configured = configure::<Chain>(&blocks, directives()).unwrap();
let domains = &configured[0].config.metadata.as_ref().unwrap().domains;
assert_eq!(
domains.iter().map(ToString::to_string).collect::<Vec<_>>(),
expected
);
}
}