async fn connect_with_version(version: &str) {
let version: moq_native::moq_lite::Version = version.parse().expect("invalid version");
let mut server_config = moq_native::ServerConfig::default();
server_config.bind = Some("[::]:0".to_string());
server_config.tls.generate = vec!["localhost".into()];
server_config.version = vec![version];
let mut server = server_config.init().expect("failed to init server");
let addr = server.local_addr().expect("failed to get local addr");
let origin = moq_native::moq_lite::Origin::produce();
let consumer = origin.consume();
let mut client_config = moq_native::ClientConfig::default();
client_config.version = vec![version];
client_config.tls.disable_verify = Some(true);
let client = client_config.init().expect("failed to init client");
let url: url::Url = format!("moqt://localhost:{}", addr.port()).parse().unwrap();
let server_handle = tokio::spawn(async move {
let request = server.accept().await.expect("no incoming connection");
request.with_publish(consumer).ok().await
});
let client = client.with_publish(origin.consume());
let client_result = client.connect(url).await;
let server_result = server_handle.await.expect("server task panicked");
if let Err(err) = &client_result {
panic!("client handshake failed for version {version}: {err}");
}
if let Err(err) = &server_result {
panic!("server handshake failed for version {version}: {err}");
}
}
async fn connect_with_webtransport(version: Option<&str>) {
let version: Option<moq_native::moq_lite::Version> = version.map(|v| v.parse().expect("invalid version"));
let mut server_config = moq_native::ServerConfig::default();
server_config.bind = Some("[::]:0".to_string());
server_config.tls.generate = vec!["localhost".into()];
if let Some(v) = version {
server_config.version = vec![v];
}
let mut server = server_config.init().expect("failed to init server");
let addr = server.local_addr().expect("failed to get local addr");
let origin = moq_native::moq_lite::Origin::produce();
let consumer = origin.consume();
let mut client_config = moq_native::ClientConfig::default();
client_config.tls.disable_verify = Some(true);
if let Some(v) = version {
client_config.version = vec![v];
}
let client = client_config.init().expect("failed to init client");
let url: url::Url = format!("https://localhost:{}", addr.port()).parse().unwrap();
let server_handle = tokio::spawn(async move {
let request = server.accept().await.expect("no incoming connection");
request.with_publish(consumer).ok().await
});
let client = client.with_publish(origin.consume());
let client_result = client.connect(url).await;
let server_result = server_handle.await.expect("server task panicked");
let label = version.map_or("default".to_string(), |v| v.to_string());
if let Err(err) = &client_result {
panic!("client WebTransport handshake failed for {label}: {err}");
}
if let Err(err) = &server_result {
panic!("server WebTransport handshake failed for {label}: {err}");
}
}
#[tracing_test::traced_test]
#[tokio::test]
async fn version_moq_lite_01() {
connect_with_version("moq-lite-01").await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn version_moq_lite_02() {
connect_with_version("moq-lite-02").await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn version_moq_lite_03() {
connect_with_version("moq-lite-03").await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn version_moq_transport_14() {
connect_with_version("moq-transport-14").await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn version_moq_transport_15() {
connect_with_version("moq-transport-15").await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn version_moq_transport_16() {
connect_with_version("moq-transport-16").await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn webtransport() {
connect_with_webtransport(None).await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn webtransport_moq_lite_01() {
connect_with_webtransport(Some("moq-lite-01")).await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn webtransport_moq_lite_02() {
connect_with_webtransport(Some("moq-lite-02")).await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn webtransport_moq_lite_03() {
connect_with_webtransport(Some("moq-lite-03")).await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn webtransport_moq_transport_14() {
connect_with_webtransport(Some("moq-transport-14")).await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn webtransport_moq_transport_15() {
connect_with_webtransport(Some("moq-transport-15")).await;
}
#[tracing_test::traced_test]
#[tokio::test]
async fn webtransport_moq_transport_16() {
connect_with_webtransport(Some("moq-transport-16")).await;
}