You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
synctv/synctv-proto/tests/provider_resource_boundary_...

52 lines
2.0 KiB
Rust

const ALLOWED_PROVIDER_RESOURCE_STREAMS: &[&str] = &[
"synctv.provider.emby.EmbyProviderService/GetThumbnail",
"synctv.provider.fnos.FnosProviderService/GetThumbnail",
"synctv.provider.nextcloud.NextcloudProviderService/GetPreview",
"synctv.provider.qnap.QnapProviderService/GetThumbnail",
"synctv.provider.seafile.SeafileProviderService/GetThumbnail",
"synctv.provider.synology.SynologyProviderService/GetImage",
];
#[test]
fn provider_services_only_stream_pre_add_resource_previews() {
let mut actual_streams = Vec::new();
for service in synctv_proto::PROVIDERS_DESCRIPTOR_POOL.services() {
for method in service.methods() {
let method_path = format!("{}/{}", service.full_name(), method.name());
if method.is_server_streaming() {
actual_streams.push(method_path.clone());
}
let normalized = method.name().to_ascii_lowercase();
assert!(
!normalized.contains("subtitle")
&& !normalized.contains("danmaku")
&& !normalized.contains("hls")
&& !normalized.contains("dash")
&& !normalized.contains("flv")
&& !normalized.ends_with("resource")
&& !normalized.starts_with("watch"),
"room playback resource method leaked into provider service: {method_path}"
);
}
}
actual_streams.sort();
let mut expected_streams = ALLOWED_PROVIDER_RESOURCE_STREAMS.to_vec();
expected_streams.sort_unstable();
assert_eq!(actual_streams, expected_streams);
}
#[test]
fn emby_provider_exposes_only_browse_thumbnail_stream() {
let provider = synctv_proto::PROVIDERS_DESCRIPTOR_POOL
.get_service_by_name("synctv.provider.emby.EmbyProviderService")
.expect("Emby provider service descriptor");
assert_eq!(provider.methods().count(), 6);
assert!(provider
.methods()
.any(|method| method.name() == "GetThumbnail" && method.is_server_streaming()));
}