//! Channel-centric unit scaffolding validating mock sinks. #[path = "../support/mod.rs"] mod support; mod helpers; use helpers::*; use niom_turn::stun::{build_channel_data, parse_channel_data}; use support::mocks; #[tokio::test(flavor = "current_thread")] async fn channel_sink_mock_records_payload() { let mut sink = mocks::MockChannelSink::new(); sink .expect_send_channel_data() .withf(|channel, payload| *channel == sample_channel_number() && payload == &sample_payload()) .returning(|_, _| Box::pin(async { Ok(()) })); sink .send_channel_data(sample_channel_number(), sample_payload()) .await .expect("channel data to send"); } #[test] fn parse_channel_data_round_trip() { let payload = sample_payload(); let frame = build_channel_data(sample_channel_number(), &payload); let (channel, body) = parse_channel_data(&frame).expect("parse channel frame"); assert_eq!(channel, sample_channel_number()); assert_eq!(body, payload.as_slice()); } #[test] fn parse_channel_data_rejects_invalid_channel_range() { let mut frame = build_channel_data(sample_channel_number(), &sample_payload()); frame[0] = 0x20; // invalid prefix (must be 0x40) assert!(parse_channel_data(&frame).is_none()); }