aboutsummaryrefslogtreecommitdiff
path: root/tests/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib.rs')
-rw-r--r--tests/lib.rs169
1 files changed, 0 insertions, 169 deletions
diff --git a/tests/lib.rs b/tests/lib.rs
deleted file mode 100644
index 0d7132c..0000000
--- a/tests/lib.rs
+++ /dev/null
@@ -1,169 +0,0 @@
-#![allow(dead_code)]
-use libc::{nlmsghdr, AF_UNIX, NFNETLINK_V0, NFNL_SUBSYS_NFTABLES};
-use rustables::set::SetKey;
-use rustables::{nft_nlmsg_maxsize, Chain, MsgType, NlMsg, ProtoFamily, Rule, Set, Table};
-use std::ffi::{c_void, CStr};
-use std::mem::size_of;
-use std::rc::Rc;
-
-pub fn get_subsystem_from_nlmsghdr_type(x: u16) -> u8 {
- ((x & 0xff00) >> 8) as u8
-}
-
-pub fn get_operation_from_nlmsghdr_type(x: u16) -> u8 {
- (x & 0x00ff) as u8
-}
-
-pub const TABLE_NAME: &[u8; 10] = b"mocktable\0";
-pub const CHAIN_NAME: &[u8; 10] = b"mockchain\0";
-pub const SET_NAME: &[u8; 8] = b"mockset\0";
-
-pub const TABLE_USERDATA: &[u8; 14] = b"mocktabledata\0";
-pub const CHAIN_USERDATA: &[u8; 14] = b"mockchaindata\0";
-pub const RULE_USERDATA: &[u8; 13] = b"mockruledata\0";
-pub const SET_USERDATA: &[u8; 12] = b"mocksetdata\0";
-
-pub const SET_ID: u32 = 123456;
-
-type NetLinkType = u16;
-
-#[derive(Debug, thiserror::Error)]
-#[error("empty data")]
-pub struct EmptyDataError;
-
-#[derive(Debug, PartialEq)]
-pub enum NetlinkExpr {
- Nested(NetLinkType, Vec<NetlinkExpr>),
- Final(NetLinkType, Vec<u8>),
- List(Vec<NetlinkExpr>),
-}
-
-impl NetlinkExpr {
- pub fn to_raw(self) -> Vec<u8> {
- match self {
- NetlinkExpr::Final(ty, val) => {
- let len = val.len() + 4;
- let mut res = Vec::with_capacity(len);
-
- res.extend(&(len as u16).to_le_bytes());
- res.extend(&ty.to_le_bytes());
- res.extend(val);
- // alignment
- while res.len() % 4 != 0 {
- res.push(0);
- }
-
- res
- }
- NetlinkExpr::Nested(ty, exprs) => {
- // some heuristic to decrease allocations (even though this is
- // only useful for testing so performance is not an objective)
- let mut sub = Vec::with_capacity(exprs.len() * 50);
-
- for expr in exprs {
- sub.append(&mut expr.to_raw());
- }
-
- let len = sub.len() + 4;
- let mut res = Vec::with_capacity(len);
-
- // set the "NESTED" flag
- res.extend(&(len as u16).to_le_bytes());
- res.extend(&(ty | 0x8000).to_le_bytes());
- res.extend(sub);
-
- res
- }
- NetlinkExpr::List(exprs) => {
- // some heuristic to decrease allocations (even though this is
- // only useful for testing so performance is not an objective)
- let mut list = Vec::with_capacity(exprs.len() * 50);
-
- for expr in exprs {
- list.append(&mut expr.to_raw());
- }
-
- list
- }
- }
- }
-}
-
-#[repr(C)]
-#[derive(Clone, Copy)]
-pub struct Nfgenmsg {
- family: u8, /* AF_xxx */
- version: u8, /* nfnetlink version */
- res_id: u16, /* resource id */
-}
-
-pub fn get_test_table() -> Table {
- Table::new(
- &CStr::from_bytes_with_nul(TABLE_NAME).unwrap(),
- ProtoFamily::Inet,
- )
-}
-
-pub fn get_test_chain() -> Chain {
- Chain::new(
- &CStr::from_bytes_with_nul(CHAIN_NAME).unwrap(),
- Rc::new(get_test_table()),
- )
-}
-
-pub fn get_test_rule() -> Rule {
- Rule::new(Rc::new(get_test_chain()))
-}
-
-pub fn get_test_set<T: SetKey>() -> Set<T> {
- Set::new(
- CStr::from_bytes_with_nul(SET_NAME).unwrap(),
- SET_ID,
- Rc::new(get_test_table()),
- ProtoFamily::Ipv4,
- )
-}
-
-pub fn get_test_nlmsg_with_msg_type(
- obj: &mut dyn NlMsg,
- msg_type: MsgType,
-) -> (nlmsghdr, Nfgenmsg, Vec<u8>) {
- let mut buf = vec![0u8; nft_nlmsg_maxsize() as usize];
- unsafe {
- obj.write(buf.as_mut_ptr() as *mut c_void, 0, msg_type);
-
- // right now the message is composed of the following parts:
- // - nlmsghdr (contains the message size and type)
- // - nfgenmsg (nftables header that describes the message family)
- // - the raw value that we want to validate
-
- let size_of_hdr = size_of::<nlmsghdr>();
- let size_of_nfgenmsg = size_of::<Nfgenmsg>();
- let nlmsghdr = *(buf[0..size_of_hdr].as_ptr() as *const nlmsghdr);
- let nfgenmsg =
- *(buf[size_of_hdr..size_of_hdr + size_of_nfgenmsg].as_ptr() as *const Nfgenmsg);
- let raw_value = buf[size_of_hdr + size_of_nfgenmsg..nlmsghdr.nlmsg_len as usize]
- .iter()
- .map(|x| *x)
- .collect();
-
- // sanity checks on the global message (this should be very similar/factorisable for the
- // most part in other tests)
- // TODO: check the messages flags
- assert_eq!(
- get_subsystem_from_nlmsghdr_type(nlmsghdr.nlmsg_type),
- NFNL_SUBSYS_NFTABLES as u8
- );
- assert_eq!(nlmsghdr.nlmsg_seq, 0);
- assert_eq!(nlmsghdr.nlmsg_pid, 0);
- assert_eq!(nfgenmsg.family, AF_UNIX as u8);
- assert_eq!(nfgenmsg.version, NFNETLINK_V0 as u8);
- assert_eq!(nfgenmsg.res_id.to_be(), 0);
-
- (nlmsghdr, nfgenmsg, raw_value)
- }
-}
-
-pub fn get_test_nlmsg(obj: &mut dyn NlMsg) -> (nlmsghdr, Nfgenmsg, Vec<u8>) {
- get_test_nlmsg_with_msg_type(obj, MsgType::Add)
-}