diff options
author | lafleur <lafleur@boum.org> | 2021-10-25 16:17:21 +0200 |
---|---|---|
committer | lafleur <lafleur@boum.org> | 2021-11-05 11:21:27 +0100 |
commit | 06e667d3ab7d2d34d436c035f460d8ece811c444 (patch) | |
tree | dbf647eef7b661a600bd9bca61e2e566a5811b52 | |
parent | 46b22d88c36863851e4b27efa767d28c8aeecfe0 (diff) |
draft: counter expr test
-rw-r--r-- | rustables/src/expr/counter.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/rustables/src/expr/counter.rs b/rustables/src/expr/counter.rs index 099e7fa..11b8482 100644 --- a/rustables/src/expr/counter.rs +++ b/rustables/src/expr/counter.rs @@ -44,3 +44,41 @@ impl Expression for Counter { } } } + +#[cfg(test)] +mod tests { + use super::Expression; + use std::ffi::CString; + use std::rc::Rc; + + #[test] + fn counter_expr_is_valid() { + let mut counter = super::Counter::new(); + counter.nb_bytes = 0; + counter.nb_packets = 0; + let table = Rc::new(crate::Table::new( + &CString::new("mocktable").unwrap(), + crate::ProtoFamily::Inet) + ); + let chain = Rc::new(crate::Chain::new( + &CString::new("mockchain").unwrap(), + Rc::clone(&table)) + ); + let rule = crate::Rule::new(Rc::clone(&chain)); + let view = &counter.to_expr(&rule) as *const _ as *const u8; + let slice = unsafe { + std::slice::from_raw_parts(view, std::mem::size_of::<super::Counter>()) + }; + assert_eq!(slice[0], 64); + assert_eq!(slice[1], 15); + assert_eq!(slice[2], 0); + assert_eq!(slice[5], 127); + assert_eq!(slice[6], 0); + assert_eq!(slice[7], 0); + assert_eq!(slice[8], 200); + assert_eq!(slice[13], 127); + assert_eq!(slice[14], 0); + assert_eq!(slice[15], 0); + //assert_eq!(slice, [64, 15, 0, 1, 1, 127, 0, 0, 200, 1, 1, 1, 1, 127, 0, 0]); + } +} |