Skip to content
File

Blob: firmware/vendor/str0m/tests/flappy-ice-state.rs

rust60 lines
1use std::net::Ipv4Addr;
2use std::time::{Duration, Instant};
3 
4use str0m::RtcConfig;
5use str0m::{Event, RtcError};
6use tracing::info_span;
7 
8mod common;
9use common::{Peer, TestRtc, init_crypto_default, init_log, progress};
10 
11#[test]
12pub fn flappy_ice_lite_state() -> Result<(), RtcError> {
13 init_log();
14 init_crypto_default();
15 
16 let mut l = TestRtc::new(Peer::Left);
17 
18 let rtc = RtcConfig::new().set_ice_lite(true).build(Instant::now());
19 let mut r = TestRtc::new_with_rtc(info_span!("R"), rtc);
20 
21 l.add_host_candidate((Ipv4Addr::new(1, 1, 1, 1), 1000).into());
22 r.add_host_candidate((Ipv4Addr::new(2, 2, 2, 2), 2000).into());
23 
24 let mut change = l.sdp_api();
25 let _ = change.add_channel("My little channel".into());
26 let (offer, pending) = change.apply().unwrap();
27 
28 let answer = r.rtc.sdp_api().accept_offer(offer)?;
29 l.rtc.sdp_api().accept_answer(pending, answer)?;
30 
31 loop {
32 if l.is_connected() || r.is_connected() {
33 break;
34 }
35 progress(&mut l, &mut r)?;
36 }
37 
38 let max = l.last.max(r.last);
39 l.last = max;
40 r.last = max;
41 
42 loop {
43 progress(&mut l, &mut r)?;
44 
45 if l.duration() > Duration::from_secs(120) {
46 break;
47 }
48 }
49 
50 let ice_events = r
51 .events
52 .iter()
53 .filter(|(_, e)| matches!(e, Event::IceConnectionStateChange(_)))
54 .count();
55 
56 assert!(ice_events < 10);
57 
58 Ok(())
59}