aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/chain.rs70
-rw-r--r--tests/lib.rs20
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
}