mod comm;
use anyhow::Result;
use comm::*;
use pn_dcp::block::{BlockResp, BlockSet};
use pn_dcp::options::{BlockError, BlockQualifier, InnerIpAddr, OptionAndSub};
use pn_dcp::packet::set_req::PacketSetReq;
use pn_dcp::packet::set_resp::PacketSetResp;
use std::net::Ipv4Addr;
#[test]
fn test_req() -> Result<()> {
let data = get_set_req();
let set = PacketSetReq::try_from(data.as_slice())?;
let src = get_src_array(data.as_slice()).unwrap();
let dest = get_destination_array(data.as_slice()).unwrap();
let ip = InnerIpAddr::new_by_ipv4(
Ipv4Addr::from(0xc0a8c7f5),
Ipv4Addr::from(0xffffff00),
Ipv4Addr::from(0xc0a8c7fe),
);
let mut get_req = PacketSetReq::new(
init_mac_by_array(src),
init_mac_by_array(dest),
ip.clone().to_option(),
BlockQualifier::SavePermanent,
);
get_req.set_xid(get_xid(data.as_slice()).unwrap());
assert_eq!(
get_req.blocks(),
BlockSet::new(ip.to_option(), BlockQualifier::SavePermanent)
);
assert_eq!(data, get_req.to_vec());
assert_eq!(set, get_req);
Ok(())
}
#[test]
fn test_resp() -> Result<()> {
let data = get_set_resp();
let set = PacketSetResp::try_from(data.as_slice())?;
let src = get_src_array(data.as_slice()).unwrap();
let dest = get_destination_array(data.as_slice()).unwrap();
let mut get_req = PacketSetResp::new(
init_mac_by_array(src),
init_mac_by_array(dest),
OptionAndSub::IpAddr,
BlockError::Ok,
);
get_req.set_xid(get_xid(data.as_slice()).unwrap());
assert_eq!(
get_req.blocks(),
vec![BlockResp(OptionAndSub::IpAddr, BlockError::Ok)]
);
assert_eq!(data, get_req.to_vec());
assert_eq!(set, get_req);
Ok(())
}
#[test]
fn test_get_ext() -> Result<()> {
let req = PacketSetReq::try_from(get_set_req().as_slice())?;
let req_ext = PacketSetReq::try_from(get_set_req_ext().as_slice())?;
assert_eq!(req, req_ext);
let resp = PacketSetResp::try_from(get_set_resp().as_slice())?;
let resp_ext = PacketSetResp::try_from(get_set_resp_ext().as_slice())?;
assert_eq!(resp, resp_ext);
Ok(())
}