use anyhow::Result; use srt_tokio::SrtSocket; use std::time::Duration; use tokio::time::sleep; use futures::prelude::*; async fn test_latency_exchange( connector_send_latency: Duration, connector_rec_latency: Duration, listener_send_latency: Duration, listener_recv_latency: Duration, ) -> Result<()> { let connector = SrtSocket::builder() .send_latency(connector_send_latency) .receive_latency(connector_rec_latency) .call("127.0.0.1:4200", None); let listener = SrtSocket::builder() .send_latency(listener_send_latency) .receive_latency(listener_recv_latency) .listen_on(":4200"); let ((l2c1, c2l1), (l2c2, c2l2)) = futures::join!( async move { let mut c = connector.await.unwrap(); let c2l = c.settings().send_tsbpd_latency; let l2c = c.settings().recv_tsbpd_latency; c.close().await.unwrap(); (l2c, c2l) }, async move { let mut c = listener.await.unwrap(); let l2c = c.settings().send_tsbpd_latency; let c2l = c.settings().recv_tsbpd_latency; c.close().await.unwrap(); (l2c, c2l) }, ); let expected_l2c = Duration::max(connector_rec_latency, listener_send_latency); let expected_c2l = Duration::max(connector_send_latency, listener_recv_latency); assert_eq!(l2c1, expected_l2c); assert_eq!(l2c2, expected_l2c); assert_eq!(c2l1, expected_c2l); assert_eq!(c2l2, expected_c2l); Ok(()) } #[tokio::test] async fn latency_exchange() -> Result<()> { let from_secs = Duration::from_secs; let _ = pretty_env_logger::try_init(); test_latency_exchange(from_secs(3), from_secs(4), from_secs(5), from_secs(4)).await?; sleep(from_secs(2)).await; test_latency_exchange(from_secs(4), from_secs(5), from_secs(5), from_secs(3)).await?; Ok(()) }