#[cfg(test)]
mod tests {
use capfile::Error;
use std::io::Cursor;
#[test]
fn test_error_types() {
let err = Error::parse(100, "test error");
let err_str = format!("{:?}", err);
assert!(
err_str.contains("100"),
"Error should contain offset: {}",
err_str
);
assert!(
err_str.contains("test error"),
"Error should contain message: {}",
err_str
);
let err = Error::truncated(10, 5);
let err_str = format!("{:?}", err);
assert!(
err_str.contains("Truncated"),
"Error should contain Truncated: {}",
err_str
);
let err = Error::InvalidMagic(0x12345678);
let err_str = format!("{:?}", err);
assert!(
err_str.contains("Invalid"),
"Error should contain Invalid: {}",
err_str
);
}
#[test]
fn test_pcap_fixture_read() {
use capfile::PcapReader;
let data = include_bytes!("fixtures/simple.pcap");
let mut reader = PcapReader::from_reader(Cursor::new(data)).unwrap();
let packet = reader.next_packet().unwrap().unwrap();
assert!(
packet.len() > 40,
"Packet should be at least 40 bytes (Ethernet + IPv4)"
);
assert_eq!(packet.captured_len(), packet.len() as u32);
assert!(reader.next_packet().unwrap().is_none());
}
#[test]
fn test_pcap_header_info() {
use capfile::PcapReader;
let data = include_bytes!("fixtures/simple.pcap");
let reader = PcapReader::from_reader(Cursor::new(data)).unwrap();
assert_eq!(reader.link_type(), 1);
}
#[test]
fn test_pcapng_fixture_read() {
use capfile::format::pcapng::Block;
use capfile::PcapngReader;
let data = include_bytes!("fixtures/simple.pcapng");
let mut reader = PcapngReader::from_reader(Cursor::new(data)).unwrap();
let mut found_blocks = 0;
while let Some(block) = reader.next_block().unwrap() {
found_blocks += 1;
if let Block::EnhancedPacket(epb) = block {
assert_eq!(&epb.data, &[0xde, 0xad, 0xbe, 0xef]);
}
}
assert!(found_blocks >= 2, "Should find at least 2 blocks");
}
}