41 lines
1.3 KiB
Rust
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());
|
|
}
|