@@ -26,18 +26,13 @@ async fn test_twcc_receiver_interceptor_before_any_packets() -> Result<()> {
2626 )
2727 . await ;
2828
29- let pkts = stream. written_rtcp ( ) . await . unwrap ( ) ;
30- assert_eq ! ( pkts. len( ) , 1 ) ;
31- if let Some ( tlcc) = pkts[ 0 ] . as_any ( ) . downcast_ref :: < TransportLayerCc > ( ) {
32- assert_eq ! ( 0 , tlcc. packet_status_count) ;
33- assert_eq ! ( 0 , tlcc. fb_pkt_count) ;
34- assert_eq ! ( 0 , tlcc. base_sequence_number) ;
35- assert_eq ! ( 0 , tlcc. media_ssrc) ;
36- assert_eq ! ( 0 , tlcc. reference_time) ;
37- assert_eq ! ( 0 , tlcc. recv_deltas. len( ) ) ;
38- assert_eq ! ( 0 , tlcc. packet_chunks. len( ) ) ;
39- } else {
40- assert ! ( false ) ;
29+ tokio:: select! {
30+ pkts = stream. written_rtcp( ) => {
31+ assert!( pkts. map( |p| p. is_empty( ) ) . unwrap_or( true ) , "Should not have sent an RTCP packet before receiving the first RTP packets" )
32+ }
33+ _ = tokio:: time:: sleep( Duration :: from_millis( 300 ) ) => {
34+ // All good
35+ }
4136 }
4237
4338 stream. close ( ) . await ?;
@@ -101,9 +96,7 @@ async fn test_twcc_receiver_interceptor_after_rtp_packets() -> Result<()> {
10196 Ok ( ( ) )
10297}
10398
104- //TODO: remove this conditional test
105- #[ cfg( not( any( target_os = "macos" , target_os = "windows" ) ) ) ]
106- #[ tokio:: test]
99+ #[ tokio:: test( start_paused = true ) ]
107100async fn test_twcc_receiver_interceptor_different_delays_between_rtp_packets ( ) -> Result < ( ) > {
108101 let builder = Receiver :: builder ( ) . with_interval ( Duration :: from_millis ( 500 ) ) ;
109102 let icpr = builder. build ( "" ) ?;
@@ -124,7 +117,7 @@ async fn test_twcc_receiver_interceptor_different_delays_between_rtp_packets() -
124117
125118 let delays = vec ! [ 0 , 10 , 100 , 200 ] ;
126119 for ( i, d) in delays. iter ( ) . enumerate ( ) {
127- tokio:: time:: sleep ( Duration :: from_millis ( * d) ) . await ;
120+ tokio:: time:: advance ( Duration :: from_millis ( * d) ) . await ;
128121
129122 let mut hdr = rtp:: header:: Header :: default ( ) ;
130123 let tcc = TransportCcExtension {
@@ -139,13 +132,17 @@ async fn test_twcc_receiver_interceptor_different_delays_between_rtp_packets() -
139132 ..Default :: default ( )
140133 } )
141134 . await ;
135+
136+ // Yield so this packet can be processed
137+ tokio:: task:: yield_now ( ) . await ;
142138 }
143139
144- // tick immediately, let's ignore the first rtcp pkt
145- let _ = stream. written_rtcp ( ) . await . unwrap ( ) ;
140+ // Force a packet to be generated
141+ tokio:: time:: advance ( Duration :: from_millis ( 2001 ) ) . await ;
142+ tokio:: task:: yield_now ( ) . await ;
146143
147- // the second 500ms tick will works
148144 let pkts = stream. written_rtcp ( ) . await . unwrap ( ) ;
145+
149146 assert_eq ! ( pkts. len( ) , 1 ) ;
150147 if let Some ( cc) = pkts[ 0 ] . as_any ( ) . downcast_ref :: < TransportLayerCc > ( ) {
151148 assert_eq ! ( 0 , cc. base_sequence_number) ;
@@ -171,9 +168,7 @@ async fn test_twcc_receiver_interceptor_different_delays_between_rtp_packets() -
171168 Ok ( ( ) )
172169}
173170
174- //TODO: remove this conditional test
175- #[ cfg( not( target_os = "macos" ) ) ]
176- #[ tokio:: test]
171+ #[ tokio:: test( start_paused = true ) ]
177172async fn test_twcc_receiver_interceptor_packet_loss ( ) -> Result < ( ) > {
178173 let builder = Receiver :: builder ( ) . with_interval ( Duration :: from_secs ( 2 ) ) ;
179174 let icpr = builder. build ( "" ) ?;
@@ -192,26 +187,21 @@ async fn test_twcc_receiver_interceptor_packet_loss() -> Result<()> {
192187 )
193188 . await ;
194189
195- let sequence_number_to_delay: HashMap < u16 , u64 > = [
190+ let sequence_number_to_delay = & [
196191 ( 0 , 0 ) ,
197192 ( 1 , 10 ) ,
198193 ( 4 , 100 ) ,
199194 ( 8 , 200 ) ,
200195 ( 9 , 20 ) ,
201196 ( 10 , 20 ) ,
202197 ( 30 , 300 ) ,
203- ]
204- . iter ( )
205- . cloned ( )
206- . collect ( ) ;
207-
208- for i in & [ 0 , 1 , 4 , 8 , 9 , 10 , 30 ] {
209- let d = sequence_number_to_delay. get ( i) . unwrap ( ) ;
210- tokio:: time:: sleep ( Duration :: from_millis ( * d) ) . await ;
198+ ] ;
211199
200+ for ( i, d) in sequence_number_to_delay {
201+ tokio:: time:: advance ( Duration :: from_millis ( * d) ) . await ;
212202 let mut hdr = rtp:: header:: Header :: default ( ) ;
213203 let tcc = TransportCcExtension {
214- transport_sequence : * i as u16 ,
204+ transport_sequence : * i,
215205 }
216206 . marshal ( ) ?;
217207 hdr. set_extension ( 1 , tcc) ?;
@@ -221,13 +211,17 @@ async fn test_twcc_receiver_interceptor_packet_loss() -> Result<()> {
221211 ..Default :: default ( )
222212 } )
223213 . await ;
214+
215+ // Yield so this packet can be processed
216+ tokio:: task:: yield_now ( ) . await ;
224217 }
225218
226- // tick immediately, let's ignore the first rtcp pkt
227- let _ = stream. written_rtcp ( ) . await . unwrap ( ) ;
219+ // Force a packet to be generated
220+ tokio:: time:: advance ( Duration :: from_millis ( 2001 ) ) . await ;
221+ tokio:: task:: yield_now ( ) . await ;
228222
229- // the second 500ms tick will works
230223 let pkts = stream. written_rtcp ( ) . await . unwrap ( ) ;
224+
231225 assert_eq ! ( pkts. len( ) , 1 ) ;
232226 if let Some ( cc) = pkts[ 0 ] . as_any ( ) . downcast_ref :: < TransportLayerCc > ( ) {
233227 assert_eq ! ( 0 , cc. base_sequence_number) ;
0 commit comments