Skip to content
File

Blob: firmware/vendor/str0m/tests/ice-restart.rs

rust89 lines
1use std::net::Ipv4Addr;
2use std::time::{Duration, Instant};
3 
4use str0m::RtcConfig;
5use str0m::RtcError;
6use tracing::info_span;
7 
8mod common;
9use common::{Peer, TestRtc, init_crypto_default, init_log, progress};
10 
11#[test]
12pub fn ice_restart() -> 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 (offer, pending) = l.span.in_scope(|| {
25 let mut change = l.rtc.sdp_api();
26 let _ = change.add_channel("My little channel".into());
27 
28 change.apply().unwrap()
29 });
30 println!("L Initial Offer: {}", offer);
31 
32 let answer = r.span.in_scope(|| r.rtc.sdp_api().accept_offer(offer))?;
33 println!("R Initial answer: {}", answer);
34 
35 l.span
36 .in_scope(|| l.rtc.sdp_api().accept_answer(pending, answer))?;
37 
38 loop {
39 if l.is_connected() && r.is_connected() {
40 break;
41 }
42 progress(&mut l, &mut r)?;
43 }
44 
45 let l_creds = l._local_ice_creds();
46 let r_creds = r._local_ice_creds();
47 
48 let (offer, pending) = r.span.in_scope(|| {
49 let mut change = r.rtc.sdp_api();
50 change.ice_restart(true);
51 
52 change.apply().expect("Should be able to apply changes")
53 });
54 println!("R Offer: {}", offer);
55 
56 let answer = l.span.in_scope(|| l.rtc.sdp_api().accept_offer(offer))?;
57 println!("L Answer: {}", answer);
58 r.span
59 .in_scope(|| r.rtc.sdp_api().accept_answer(pending, answer))?;
60 
61 assert!(!l.rtc.is_connected());
62 assert!(!r.rtc.is_connected());
63 
64 loop {
65 if l.duration() > Duration::from_secs(10) {
66 panic!("Failed to re-establish connectivity after ICE restart in 10 seconds");
67 }
68 
69 if l.is_connected() && r.is_connected() {
70 break;
71 }
72 
73 progress(&mut l, &mut r)?;
74 }
75 
76 assert_ne!(
77 r_creds,
78 r._local_ice_creds(),
79 "After an ICE restart ICE credentials should have changed"
80 );
81 assert_ne!(
82 l_creds,
83 l._local_ice_creds(),
84 "After an ICE restart ICE credentials should have changed"
85 );
86 
87 Ok(())
88}