pn-dcp 0.3.0

Aim to quickly parsing and splicing pn-dcp packet
Documentation
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(())
}