use lsofrs::filter::{Filter, parse_inet_filter};
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
#[test]
fn parsed_host_set_for_bare_ipv4_with_port() {
let mut f = Filter::default();
parse_inet_filter("TCP@10.0.0.1:443", &mut f);
let nf = &f.network_filters[0];
assert_eq!(
nf.parsed_host,
Some(IpAddr::V4(Ipv4Addr::new(10, 0, 0, 1))),
"parsed_host must be precomputed as IpAddr for bare IPv4 host (host string was {:?})",
nf.host
);
}
#[test]
fn parsed_host_set_for_bracketed_ipv6_with_port() {
let mut f = Filter::default();
parse_inet_filter("TCP[::1]:443", &mut f);
let nf = &f.network_filters[0];
assert_eq!(nf.host.as_deref(), Some("[::1]"));
assert_eq!(
nf.parsed_host,
Some(IpAddr::V6(Ipv6Addr::LOCALHOST)),
"parsed_host for bracketed [::1] must strip brackets and parse as ::1"
);
}
#[test]
fn parsed_host_none_for_non_ip_hostname() {
let mut f = Filter::default();
parse_inet_filter("TCP@example.com:80", &mut f);
let nf = &f.network_filters[0];
assert_eq!(nf.host.as_deref(), Some("example.com"));
assert!(
nf.parsed_host.is_none(),
"DNS names that don't parse as IpAddr must yield parsed_host: None, got {:?}",
nf.parsed_host
);
}
#[test]
fn parsed_host_set_for_ipv4_with_4_selector_prefix() {
let mut f = Filter::default();
parse_inet_filter("4TCP@172.16.0.5:53", &mut f);
assert_eq!(f.network_type, Some(4));
let nf = &f.network_filters[0];
assert_eq!(
nf.parsed_host,
Some(IpAddr::V4(Ipv4Addr::new(172, 16, 0, 5))),
"selector + protocol + @host:port chain must still leave parsed_host populated"
);
}