diff options
-rw-r--r-- | tests/chain.rs | 70 | ||||
-rw-r--r-- | tests/lib.rs | 20 |
2 files changed, 83 insertions, 7 deletions
diff --git a/tests/chain.rs b/tests/chain.rs new file mode 100644 index 0000000..4b6da91 --- /dev/null +++ b/tests/chain.rs @@ -0,0 +1,70 @@ +use std::ffi::CStr; + +mod sys; +use rustables::MsgType; +use sys::*; + +mod lib; +use lib::*; + +#[test] +fn new_empty_chain() { + let mut chain = get_test_chain(); + let (nlmsghdr, _nfgenmsg, raw_expr) = get_test_nlmsg(&mut chain); + assert_eq!( + get_operation_from_nlmsghdr_type(nlmsghdr.nlmsg_type), + NFT_MSG_NEWCHAIN as u8 + ); + assert_eq!(nlmsghdr.nlmsg_len, 52); + + assert_eq!( + raw_expr, + NetlinkExpr::List(vec![ + NetlinkExpr::Final(NFTA_CHAIN_TABLE, TABLE_NAME.to_vec()), + NetlinkExpr::Final(NFTA_CHAIN_NAME, CHAIN_NAME.to_vec()), + ]) + .to_raw() + ); +} + +#[test] +fn new_empty_chain_with_userdata() { + let mut chain = get_test_chain(); + chain.set_userdata(CStr::from_bytes_with_nul(CHAIN_USERDATA).unwrap()); + let (nlmsghdr, _nfgenmsg, raw_expr) = get_test_nlmsg(&mut chain); + assert_eq!( + get_operation_from_nlmsghdr_type(nlmsghdr.nlmsg_type), + NFT_MSG_NEWCHAIN as u8 + ); + assert_eq!(nlmsghdr.nlmsg_len, 72); + + assert_eq!( + raw_expr, + NetlinkExpr::List(vec![ + NetlinkExpr::Final(NFTA_CHAIN_TABLE, TABLE_NAME.to_vec()), + NetlinkExpr::Final(NFTA_CHAIN_NAME, CHAIN_NAME.to_vec()), + NetlinkExpr::Final(NFTA_CHAIN_USERDATA, CHAIN_USERDATA.to_vec()) + ]) + .to_raw() + ); +} + +#[test] +fn delete_empty_chain() { + let mut chain = get_test_chain(); + let (nlmsghdr, _nfgenmsg, raw_expr) = get_test_nlmsg_with_msg_type(&mut chain, MsgType::Del); + assert_eq!( + get_operation_from_nlmsghdr_type(nlmsghdr.nlmsg_type), + NFT_MSG_DELCHAIN as u8 + ); + assert_eq!(nlmsghdr.nlmsg_len, 52); + + assert_eq!( + raw_expr, + NetlinkExpr::List(vec![ + NetlinkExpr::Final(NFTA_CHAIN_TABLE, TABLE_NAME.to_vec()), + NetlinkExpr::Final(NFTA_CHAIN_NAME, CHAIN_NAME.to_vec()), + ]) + .to_raw() + ); +} diff --git a/tests/lib.rs b/tests/lib.rs index a5a3b45..af599a5 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -92,16 +92,22 @@ pub struct Nfgenmsg { res_id: u16, /* resource id */ } -pub fn get_test_rule() -> Rule { - let table = Rc::new(Table::new( +pub fn get_test_table() -> Table { + Table::new( &CStr::from_bytes_with_nul(TABLE_NAME).unwrap(), ProtoFamily::Inet, - )); - let chain = Rc::new(Chain::new( + ) +} + +pub fn get_test_chain() -> Chain { + Chain::new( &CStr::from_bytes_with_nul(CHAIN_NAME).unwrap(), - Rc::clone(&table), - )); - let rule = Rule::new(Rc::clone(&chain)); + Rc::new(get_test_table()), + ) +} + +pub fn get_test_rule() -> Rule { + let rule = Rule::new(Rc::new(get_test_chain())); rule } |