Skip to content
File

Blob: firmware/vendor/str0m/tests/no-pre-ice-feedback.rs

rust66 lines
1use std::net::Ipv4Addr;
2use std::time::{Duration, Instant};
3 
4use str0m::media::{Direction, MediaKind};
5use str0m::rtp::RawPacket;
6use str0m::{Rtc, RtcError};
7use tracing::info_span;
8 
9mod common;
10use common::{TestRtc, init_crypto_default, init_log, negotiate, progress};
11 
12#[test]
13pub fn no_pre_ice_feedback() -> Result<(), RtcError> {
14 init_log();
15 init_crypto_default();
16 
17 let now = Instant::now();
18 let l_rtc = Rtc::builder().enable_raw_packets(true).build(now);
19 let r_rtc = Rtc::builder().enable_raw_packets(true).build(now);
20 
21 let mut l = TestRtc::new_with_rtc(info_span!("L"), l_rtc);
22 let mut r = TestRtc::new_with_rtc(info_span!("R"), r_rtc);
23 
24 l.add_host_candidate((Ipv4Addr::new(1, 1, 1, 1), 1000).into());
25 r.add_host_candidate((Ipv4Addr::new(2, 2, 2, 2), 2000).into());
26 
27 negotiate(&mut l, &mut r, |change| {
28 change.add_media(MediaKind::Video, Direction::SendOnly, None, None, None)
29 });
30 
31 // Before ICE is established, introduce a large time delta that spans at least one sender/receiver report
32 // interval
33 let mut t = l.last;
34 l.handle_input(str0m::Input::Timeout(t))?;
35 t += Duration::from_secs(10);
36 l.handle_input(str0m::Input::Timeout(t))?;
37 
38 loop {
39 if l.is_connected() && r.is_connected() {
40 break;
41 }
42 
43 progress(&mut l, &mut r)?;
44 }
45 
46 for (_, event) in l.events.iter() {
47 if let Some(RawPacket::RtcpTx(tx)) = event.as_raw_packet() {
48 panic!(
49 "Sender should not have generated feedback before ICE, but it output {:?}",
50 tx
51 );
52 }
53 }
54 
55 for (_, event) in r.events.iter() {
56 if let Some(RawPacket::RtcpRx(rx)) = event.as_raw_packet() {
57 panic!(
58 "Receiver should not have generated feedback before ICE, but it output {:?}",
59 rx
60 );
61 }
62 }
63 
64 Ok(())
65}