use netflow_parser::NetflowParser;
#[test]
fn test_cache_info_stay_within_bounds() {
let max_cache = 3;
let mut parser = NetflowParser::builder()
.with_cache_size(max_cache)
.build()
.expect("valid config");
for template_id in 256u16..266 {
let tid = template_id.to_be_bytes();
let v9_template_packet: Vec<u8> = vec![
0, 9, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
12, tid[0], tid[1], 0, 1, 0, 1, 0, 4, ];
assert!(
!parser.parse_bytes(&v9_template_packet).packets.is_empty(),
"Template packet for tid {} should parse successfully",
template_id
);
}
let v9_info = parser.v9_cache_info();
assert_eq!(
v9_info.current_size, max_cache,
"V9 cache should be full at max capacity {}, got {}",
max_cache, v9_info.current_size
);
}
#[test]
fn test_error_sample_size_bounded() {
let max_sample = 32;
let mut parser = NetflowParser::builder()
.with_max_error_sample_size(max_sample)
.build()
.expect("valid config");
assert_eq!(parser.max_error_sample_size(), max_sample);
let garbage = vec![0xFFu8; 256];
let result = parser.parse_bytes(&garbage);
match result.error {
Some(netflow_parser::NetflowError::UnsupportedVersion { sample, .. }) => {
assert!(
sample.len() <= max_sample,
"error sample {} bytes exceeds max {}",
sample.len(),
max_sample
);
}
other => panic!("expected UnsupportedVersion error, got {:?}", other),
}
}
#[test]
fn test_default_error_sample_size() {
let parser = NetflowParser::default();
assert_eq!(parser.max_error_sample_size(), 256);
}