use std::fs;
use broadcast_common::{Parse, Serialize};
use dvb_ci::builder::build_ca_pmt;
use dvb_ci::objects::ca_pmt::{CaPmt, CaPmtCmdId, CaPmtListManagement};
use dvb_si::tables::pmt::PmtSection;
fn real_pmt() -> Vec<u8> {
let path = concat!(
env!("CARGO_MANIFEST_DIR"),
"/../fixtures/shared/real-pmt.bin"
);
fs::read(path).expect("fixture real-pmt.bin must be present")
}
#[test]
fn builds_ca_pmt_from_real_broadcast_pmt() {
let data = real_pmt();
let pmt = PmtSection::parse(&data).expect("real PMT parses");
let original_streams = pmt.streams.len();
assert!(original_streams > 0, "fixture should carry ES");
let built = build_ca_pmt(&pmt, CaPmtListManagement::Only, CaPmtCmdId::OkDescrambling);
let wire = built.to_bytes();
let parsed = CaPmt::parse(&wire).expect("produced ca_pmt parses");
assert_eq!(parsed, built.as_ca_pmt());
assert_eq!(parsed.to_bytes(), wire);
assert_eq!(parsed.program_number, pmt.program_number);
assert_eq!(parsed.version_number, pmt.version_number);
assert_eq!(parsed.streams.len(), original_streams);
assert!(parsed.program_ca_descriptors.is_empty());
assert!(parsed.cmd_id.is_none());
for s in &parsed.streams {
assert!(s.ca_descriptors.is_empty());
assert!(s.cmd_id.is_none());
}
}