File
Blob: firmware/vendor/str0m/tests/no-pre-ice-feedback.rs
| 1 | use std::net::Ipv4Addr; |
| 2 | use std::time::{Duration, Instant}; |
| 3 | |
| 4 | use str0m::media::{Direction, MediaKind}; |
| 5 | use str0m::rtp::RawPacket; |
| 6 | use str0m::{Rtc, RtcError}; |
| 7 | use tracing::info_span; |
| 8 | |
| 9 | mod common; |
| 10 | use common::{TestRtc, init_crypto_default, init_log, negotiate, progress}; |
| 11 | |
| 12 | #[test] |
| 13 | pub 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 | } |