rtlp-lib 0.5.1

Rust library for parsing PCI Express Transaction Layer Packets (TLPs)
Documentation
#![cfg(feature = "serde")]

use rtlp_lib::*;

#[test]
fn roundtrip_tlp_mode() {
    let mode = TlpMode::Flit;
    let json = serde_json::to_string(&mode).unwrap();
    let back: TlpMode = serde_json::from_str(&json).unwrap();
    assert_eq!(mode, back);
}

#[test]
fn roundtrip_tlp_error() {
    let err = TlpError::InvalidLength;
    let json = serde_json::to_string(&err).unwrap();
    let back: TlpError = serde_json::from_str(&json).unwrap();
    assert_eq!(err, back);
}

#[test]
fn roundtrip_tlp_fmt() {
    for fmt in [
        TlpFmt::NoDataHeader3DW,
        TlpFmt::NoDataHeader4DW,
        TlpFmt::WithDataHeader3DW,
        TlpFmt::WithDataHeader4DW,
        TlpFmt::TlpPrefix,
    ] {
        let json = serde_json::to_string(&fmt).unwrap();
        let back: TlpFmt = serde_json::from_str(&json).unwrap();
        assert_eq!(fmt, back);
    }
}

#[test]
fn roundtrip_tlp_type() {
    let t = TlpType::MemReadReq;
    let json = serde_json::to_string(&t).unwrap();
    let back: TlpType = serde_json::from_str(&json).unwrap();
    assert_eq!(t, back);
}

#[test]
fn roundtrip_atomic_op() {
    for op in [AtomicOp::FetchAdd, AtomicOp::Swap, AtomicOp::CompareSwap] {
        let json = serde_json::to_string(&op).unwrap();
        let back: AtomicOp = serde_json::from_str(&json).unwrap();
        assert_eq!(op, back);
    }
}

#[test]
fn roundtrip_atomic_width() {
    for w in [AtomicWidth::W32, AtomicWidth::W64] {
        let json = serde_json::to_string(&w).unwrap();
        let back: AtomicWidth = serde_json::from_str(&json).unwrap();
        assert_eq!(w, back);
    }
}

#[test]
fn roundtrip_flit_tlp_type() {
    let t = FlitTlpType::MemWrite32;
    let json = serde_json::to_string(&t).unwrap();
    let back: FlitTlpType = serde_json::from_str(&json).unwrap();
    assert_eq!(t, back);
}

#[test]
fn roundtrip_flit_dw0() {
    let dw0 = FlitDW0::from_dw0(&[0x40, 0x00, 0x00, 0x04]).unwrap();
    let json = serde_json::to_string(&dw0).unwrap();
    let back: FlitDW0 = serde_json::from_str(&json).unwrap();
    assert_eq!(dw0, back);
}

#[test]
fn roundtrip_flit_ohc_a() {
    let ohc = FlitOhcA::from_bytes(&[0x0A, 0xBC, 0xDE, 0xF3]).unwrap();
    let json = serde_json::to_string(&ohc).unwrap();
    let back: FlitOhcA = serde_json::from_str(&json).unwrap();
    assert_eq!(ohc, back);
}

#[test]
fn json_output_readable() {
    let dw0 = FlitDW0::from_dw0(&[0x40, 0x00, 0x00, 0x04]).unwrap();
    let json = serde_json::to_string_pretty(&dw0).unwrap();
    assert!(json.contains("\"tlp_type\""));
    assert!(json.contains("\"MemWrite32\""));
    assert!(json.contains("\"length\""));
    assert!(json.contains(": 4"));
}