41 lines
1.3 KiB
Rust

//! 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());
}