diff options
Diffstat (limited to 'tests/table.rs')
-rw-r--r-- | tests/table.rs | 61 |
1 files changed, 29 insertions, 32 deletions
diff --git a/tests/table.rs b/tests/table.rs index 971d58b..d8a5f1e 100644 --- a/tests/table.rs +++ b/tests/table.rs @@ -1,7 +1,9 @@ -use std::ffi::CStr; - mod sys; -use rustables::{query::get_operation_from_nlmsghdr_type, MsgType}; +use rustables::{ + nlmsg::NfNetlinkObject, + parser::{get_operation_from_nlmsghdr_type, nft_nlmsg_maxsize}, + MsgType, Table, +}; use sys::*; mod lib; @@ -10,61 +12,56 @@ use lib::*; #[test] fn new_empty_table() { let mut table = get_test_table(); - let (nlmsghdr, _nfgenmsg, raw_expr) = get_test_nlmsg(&mut table); + let mut buf = Vec::with_capacity(nft_nlmsg_maxsize() as usize); + let (nlmsghdr, _nfgenmsg, raw_expr) = get_test_nlmsg(&mut buf, &mut table); assert_eq!( get_operation_from_nlmsghdr_type(nlmsghdr.nlmsg_type), NFT_MSG_NEWTABLE as u8 ); assert_eq!(nlmsghdr.nlmsg_len, 44); - assert_eq!( - raw_expr, - NetlinkExpr::List(vec![ - NetlinkExpr::Final(NFTA_TABLE_NAME, TABLE_NAME.to_vec()), - NetlinkExpr::Final(NFTA_TABLE_FLAGS, 0u32.to_be_bytes().to_vec()), - ]) - .to_raw() - ); + assert_eq!(raw_expr, get_test_table_raw_expr().to_raw()); } #[test] fn new_empty_table_with_userdata() { let mut table = get_test_table(); - table.set_userdata(CStr::from_bytes_with_nul(TABLE_USERDATA).unwrap()); - let (nlmsghdr, _nfgenmsg, raw_expr) = get_test_nlmsg(&mut table); + table.set_userdata(TABLE_USERDATA.as_bytes().to_vec()); + let mut buf = Vec::with_capacity(nft_nlmsg_maxsize() as usize); + let (nlmsghdr, _nfgenmsg, raw_expr) = get_test_nlmsg(&mut buf, &mut table); assert_eq!( get_operation_from_nlmsghdr_type(nlmsghdr.nlmsg_type), NFT_MSG_NEWTABLE as u8 ); assert_eq!(nlmsghdr.nlmsg_len, 64); - assert_eq!( - raw_expr, - NetlinkExpr::List(vec![ - NetlinkExpr::Final(NFTA_TABLE_NAME, TABLE_NAME.to_vec()), - NetlinkExpr::Final(NFTA_TABLE_FLAGS, 0u32.to_be_bytes().to_vec()), - NetlinkExpr::Final(NFTA_TABLE_USERDATA, TABLE_USERDATA.to_vec()) - ]) - .to_raw() - ); + assert_eq!(raw_expr, get_test_table_with_userdata_raw_expr().to_raw()); } #[test] fn delete_empty_table() { let mut table = get_test_table(); - let (nlmsghdr, _nfgenmsg, raw_expr) = get_test_nlmsg_with_msg_type(&mut table, MsgType::Del); + let mut buf = Vec::with_capacity(nft_nlmsg_maxsize() as usize); + let (nlmsghdr, _nfgenmsg, raw_expr) = + get_test_nlmsg_with_msg_type(&mut buf, &mut table, MsgType::Del); assert_eq!( get_operation_from_nlmsghdr_type(nlmsghdr.nlmsg_type), NFT_MSG_DELTABLE as u8 ); assert_eq!(nlmsghdr.nlmsg_len, 44); - assert_eq!( - raw_expr, - NetlinkExpr::List(vec![ - NetlinkExpr::Final(NFTA_TABLE_NAME, TABLE_NAME.to_vec()), - NetlinkExpr::Final(NFTA_TABLE_FLAGS, 0u32.to_be_bytes().to_vec()), - ]) - .to_raw() - ); + assert_eq!(raw_expr, get_test_table_raw_expr().to_raw()); +} + +#[test] +fn parse_table() { + let mut table = get_test_table(); + table.set_userdata(TABLE_USERDATA.as_bytes().to_vec()); + let mut buf = Vec::with_capacity(nft_nlmsg_maxsize() as usize); + let (_nlmsghdr, _nfgenmsg, _raw_expr) = get_test_nlmsg(&mut buf, &mut table); + + let (deserialized_table, remaining) = + Table::deserialize(&buf).expect("Couldn't deserialize the object"); + assert_eq!(table, deserialized_table); + assert_eq!(remaining.len(), 0); } |