use std::env;
use std::time::Duration;
use dash_mpd::fetch::DashDownloader;
#[tokio::test]
#[should_panic(expected = "Parsing")]
async fn test_error_parsing() {
let url = "https://dash.akamaized.net/dash264/TestCasesHD/MultiPeriod_OnDemand/ThreePeriods/ThreePeriod_OnDemand_presentationDur_AudioTrim.mpd";
DashDownloader::new(url)
.best_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "Parsing")]
async fn test_error_group_attribute() {
let url = "http://download.tsi.telecom-paristech.fr/gpac/DASH_CONFORMANCE/TelecomParisTech/advanced/invalid_group_string.mpd";
DashDownloader::new(url)
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "parsing DASH XML")]
async fn test_error_invalidxml() {
let url = "https://httpbin.dmuth.org/xml";
DashDownloader::new(url)
.best_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "parsing DASH XML")]
async fn test_error_bad_closing_tag() {
let url = "https://dash.akamaized.net/akamai/test/isptest.mpd";
DashDownloader::new(url)
.best_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "parsing BaseURL: InvalidPort")]
async fn test_error_bad_baseurl() {
let url = "https://dash.akamaized.net/akamai/test/test.mpd";
DashDownloader::new(url)
.best_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "parsing DASH XML")]
async fn test_error_smoothstreaming() {
let url = "https://github.com/canalplus/rx-player/raw/refs/heads/dev/tests/contents/Smooth_static/media/Manifest_Regular.xml";
DashDownloader::new(url)
.best_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "parsing DASH XML")]
async fn test_error_smoothstreaming2() {
let url = "http://test.playready.microsoft.com/smoothstreaming/SSWSS720H264/SuperSpeedway_720.ism/Manifest";
DashDownloader::new(url)
.best_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "parsing DASH XML")]
async fn test_error_html() {
let url = "https://httpbun.com/html";
DashDownloader::new(url)
.best_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "parsing DASH XML")]
async fn test_error_img() {
let url = "https://picsum.photos/240/120";
DashDownloader::new(url)
.best_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "NetworkConnect")]
async fn test_error_dns() {
let url = "https://nothere.example.org/";
DashDownloader::new(url)
.best_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "max_error_count")]
async fn test_error_ratelimit() {
if env::var("CI").is_ok() {
panic!("max_error_count");
}
let out = env::temp_dir().join("timeout.mkv");
let client = reqwest::Client::builder()
.timeout(Duration::new(10, 0))
.build()
.unwrap();
DashDownloader::new("https://test-speke.s3.eu-west-3.amazonaws.com/tos/clear/manifest.mpd")
.best_quality()
.fragment_retry_count(3)
.max_error_count(1)
.with_http_client(client)
.with_rate_limit(100 * 1024)
.download_to(&out).await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "requesting DASH manifest")]
async fn test_error_missing_mpd() {
let out = env::temp_dir().join("failure1.mkv");
DashDownloader::new("http://httpbin.org/status/404")
.worst_quality()
.download_to(&out).await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "fetching XLink")]
async fn test_error_xlink_gone() {
let out = env::temp_dir().join("failure_xlink.mkv");
DashDownloader::new("https://dash.akamaized.net/dash264/TestCases/5c/nomor/5_1d.mpd")
.worst_quality()
.download_to(&out).await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "download dynamic MPD")]
async fn test_error_dynamic_mpd() {
let mpd = "https://akamaibroadcasteruseast.akamaized.net/cmaf/live/657078/akasource/out.mpd";
DashDownloader::new(mpd)
.worst_quality()
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "NetworkConnect")]
async fn test_error_tls_expired() {
let mpd = "https://expired.badssl.com/ignored.mpd";
DashDownloader::new(mpd)
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "NetworkConnect")]
async fn test_error_tls_untrusted_root() {
let mpd = "https://untrusted-root.badssl.com/ignored.mpd";
DashDownloader::new(mpd)
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "NetworkConnect")]
async fn test_error_tls_wronghost() {
let mpd = "https://wrong.host.badssl.com/ignored.mpd";
DashDownloader::new(mpd)
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "NetworkConnect")]
async fn test_error_tls_self_signed() {
let mpd = "https://self-signed.badssl.com/ignored.mpd";
DashDownloader::new(mpd)
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "NetworkConnect")]
async fn test_error_tls_too_large() {
DashDownloader::new("https://10000-sans.badssl.com/ignored.mpd")
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "NetworkConnect")]
async fn test_error_tls_wrong_name() {
DashDownloader::new("https://wrong.host.badssl.com/ignored.mpd")
.download().await
.unwrap();
}
#[tokio::test]
#[should_panic(expected = "NetworkConnect")]
async fn test_error_tls_3des_insecure() {
#[cfg(all(target_os = "macos", feature = "native-tls"))]
panic!("NetworkConnect failing test on MacOS + native-tls");
DashDownloader::new("https://3des.badssl.com/ignored.mpd")
.download().await
.unwrap();
}