aboutsummaryrefslogtreecommitdiff
path: root/tests/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib.rs')
-rw-r--r--tests/lib.rs74
1 files changed, 59 insertions, 15 deletions
diff --git a/tests/lib.rs b/tests/lib.rs
index 887b383..34fe16c 100644
--- a/tests/lib.rs
+++ b/tests/lib.rs
@@ -1,12 +1,14 @@
#![allow(dead_code)]
+use std::ffi::CString;
+
use libc::{nlmsghdr, AF_UNIX};
-use rustables::nlmsg::{NfNetlinkObject, NfNetlinkWriter, Nfgenmsg};
-use rustables::parser::nft_nlmsg_maxsize;
-use rustables::query::parse_nlmsg;
+use rustables::nlmsg::{NfNetlinkObject, NfNetlinkWriter};
+use rustables::parser::Nfgenmsg;
//use rustables::set::SetKey;
+use rustables::sys::*;
use rustables::{MsgType, ProtoFamily, Table};
+
//use rustables::{nft_nlmsg_maxsize, Chain, MsgType, NlMsg, ProtoFamily, Rule, Set, Table};
-use std::ffi::c_void;
pub const TABLE_NAME: &'static str = "mocktable";
pub const CHAIN_NAME: &'static str = "mockchain";
@@ -25,7 +27,7 @@ type NetLinkType = u16;
#[error("empty data")]
pub struct EmptyDataError;
-#[derive(Debug, PartialEq)]
+#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
pub enum NetlinkExpr {
Nested(NetLinkType, Vec<NetlinkExpr>),
Final(NetLinkType, Vec<u8>),
@@ -81,12 +83,52 @@ impl NetlinkExpr {
}
}
}
+
+ pub fn sort(self) -> Self {
+ match self {
+ NetlinkExpr::Final(_, _) => self,
+ NetlinkExpr::Nested(ty, mut exprs) => {
+ exprs.sort();
+ NetlinkExpr::Nested(ty, exprs)
+ }
+ NetlinkExpr::List(mut exprs) => {
+ exprs.sort();
+ NetlinkExpr::List(exprs)
+ }
+ }
+ }
}
pub fn get_test_table() -> Table {
Table::new(TABLE_NAME, ProtoFamily::Inet)
}
+pub fn get_test_table_raw_expr() -> NetlinkExpr {
+ NetlinkExpr::List(vec![
+ NetlinkExpr::Final(NFTA_TABLE_FLAGS, 0u32.to_be_bytes().to_vec()),
+ NetlinkExpr::Final(
+ NFTA_TABLE_NAME,
+ CString::new(TABLE_NAME).unwrap().to_bytes().to_vec(),
+ ),
+ ])
+ .sort()
+}
+
+pub fn get_test_table_with_userdata_raw_expr() -> NetlinkExpr {
+ NetlinkExpr::List(vec![
+ NetlinkExpr::Final(NFTA_TABLE_FLAGS, 0u32.to_be_bytes().to_vec()),
+ NetlinkExpr::Final(
+ NFTA_TABLE_NAME,
+ CString::new(TABLE_NAME).unwrap().to_bytes().to_vec(),
+ ),
+ NetlinkExpr::Final(
+ NFTA_TABLE_USERDATA,
+ CString::new(TABLE_USERDATA).unwrap().to_bytes().to_vec(),
+ ),
+ ])
+ .sort()
+}
+
/*
pub fn get_test_chain() -> Chain {
Chain::new(CHAIN_NAME, Rc::new(get_test_table()))
@@ -101,17 +143,16 @@ pub fn get_test_set<T: SetKey>() -> Set<T> {
}
*/
-pub fn get_test_nlmsg_with_msg_type(
+pub fn get_test_nlmsg_with_msg_type<'a>(
+ buf: &'a mut Vec<u8>,
obj: &mut impl NfNetlinkObject,
msg_type: MsgType,
-) -> (nlmsghdr, Nfgenmsg, Vec<u8>) {
- let mut buf = Vec::with_capacity(nft_nlmsg_maxsize() as usize);
- let mut writer = NfNetlinkWriter::new(&mut buf);
+) -> (nlmsghdr, Nfgenmsg, &'a [u8]) {
+ let mut writer = NfNetlinkWriter::new(buf);
obj.add_or_remove(&mut writer, msg_type, 0);
- println!("{:?}", &buf);
-
- let (hdr, msg) = rustables::parser::parse_nlmsg(&buf).expect("Couldn't parse the message");
+ let (hdr, msg) =
+ rustables::parser::parse_nlmsg(buf.as_slice()).expect("Couldn't parse the message");
let (nfgenmsg, raw_value) = match msg {
rustables::parser::NlMsg::NfGenMsg(nfgenmsg, raw_value) => (nfgenmsg, raw_value),
@@ -124,9 +165,12 @@ pub fn get_test_nlmsg_with_msg_type(
assert_eq!(nfgenmsg.family, AF_UNIX as u8);
assert_eq!(nfgenmsg.res_id.to_be(), 0);
- (hdr, *nfgenmsg, raw_value.to_owned())
+ (hdr, nfgenmsg, raw_value)
}
-pub fn get_test_nlmsg(obj: &mut impl NfNetlinkObject) -> (nlmsghdr, Nfgenmsg, Vec<u8>) {
- get_test_nlmsg_with_msg_type(obj, MsgType::Add)
+pub fn get_test_nlmsg<'a>(
+ buf: &'a mut Vec<u8>,
+ obj: &mut impl NfNetlinkObject,
+) -> (nlmsghdr, Nfgenmsg, &'a [u8]) {
+ get_test_nlmsg_with_msg_type(buf, obj, MsgType::Add)
}