1#![deny(unused_must_use, unused_imports, bare_trait_objects)]
23#![allow(dead_code, unused_imports)]
24pub mod bpf;
25mod bridge_stream;
26mod config;
27pub mod errors;
28mod handle;
29mod info;
30mod packet;
31pub mod pcap_util;
32mod stats;
33mod stream;
34
35pub use crate::{
36 bridge_stream::BridgeStream, config::Config, errors::Error, handle::Handle, info::Info,
37 packet::Packet, stats::Stats, stream::PacketStream, stream::StreamItem,
38};
39pub use byteorder::{BigEndian, LittleEndian, NativeEndian, WriteBytesExt};
40use log::*;
41use std::sync::Arc;
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46 use futures::StreamExt;
47 use std::path::PathBuf;
48
49 #[test]
50 fn capture_from_file() {
51 let _ = env_logger::try_init();
52
53 let pcap_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
54 .join("resources")
55 .join("4SICS-GeekLounge-151020.pcap");
56
57 info!("Benchmarking against {:?}", pcap_path.clone());
58
59 let clone_path = pcap_path.clone();
60
61 let handle = Handle::file_capture(clone_path.to_str().expect("No path found"))
62 .expect("No handle created");
63
64 let mut cfg = Config::default();
65 cfg.with_max_packets_read(5000);
66
67 let packets = smol::block_on(async move {
68 let packet_provider =
69 PacketStream::new(Config::default(), std::sync::Arc::clone(&handle))
70 .expect("Failed to build");
71 let fut_packets = packet_provider.collect::<Vec<_>>();
72 let packets: Result<Vec<_>, Error> = fut_packets.await.into_iter().collect();
73 let packets = packets
74 .expect("Could not get packets")
75 .iter()
76 .flatten()
77 .count();
78
79 handle.interrupt();
80
81 packets
82 });
83
84 assert_eq!(packets, 246137);
85 }
86}