aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlafleur <lafleur@boum.org>2021-10-25 16:17:21 +0200
committerlafleur <lafleur@boum.org>2021-11-05 11:21:27 +0100
commit06e667d3ab7d2d34d436c035f460d8ece811c444 (patch)
treedbf647eef7b661a600bd9bca61e2e566a5811b52
parent46b22d88c36863851e4b27efa767d28c8aeecfe0 (diff)
draft: counter expr test
-rw-r--r--rustables/src/expr/counter.rs38
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]);
+ }
+}