mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-11-13 12:35:05 +00:00
fix(remote): keep vault keys when a relayed licence is refused
proxy_license now raises ClickException instead of RemoteError (a SystemExit), so dl falls back to the track's vault key; licence messages name the track ("video 360p DV (592464997)").
This commit is contained in:
@@ -12,6 +12,7 @@ import pytest
|
||||
from unshackle.core.api.progress import (
|
||||
DOWNLOAD_PROGRESS_CEILING,
|
||||
build_job_progress_callables,
|
||||
track_log_label,
|
||||
track_progress_label,
|
||||
track_progress_weight,
|
||||
)
|
||||
@@ -48,6 +49,13 @@ def noop(**kwargs):
|
||||
pass
|
||||
|
||||
|
||||
def test_track_log_label_adds_the_track_id():
|
||||
video = Video(2160, "DV")
|
||||
video.id = "592464997"
|
||||
|
||||
assert track_log_label(video) == "video 2160p DV (592464997)"
|
||||
|
||||
|
||||
def test_track_progress_label():
|
||||
assert track_progress_label(Video(2160, "DV")) == "video 2160p DV"
|
||||
assert track_progress_label(Video(1080, "HDR10+")) == "video 1080p HDR10+"
|
||||
|
||||
@@ -96,3 +96,22 @@ def test_proxy_mode_keeps_the_callers_type():
|
||||
assert licence == b"lic"
|
||||
assert svc.client.posts[0]["drm_type"] == "playready"
|
||||
assert svc.client.posts[0]["pssh"] == "PR"
|
||||
|
||||
|
||||
def test_a_refused_relayed_licence_raises_a_click_exception_with_the_server_message():
|
||||
import click
|
||||
|
||||
from unshackle.core.remote_service import RemoteError
|
||||
|
||||
svc = _service("widevine", {})
|
||||
svc._server_cdm = False
|
||||
svc.drain_server_logs = lambda: None
|
||||
|
||||
def refuse(endpoint, payload, expect=()):
|
||||
raise RemoteError("Licence request failed: refused", "SERVICE_ERROR")
|
||||
|
||||
svc.client.post = refuse
|
||||
track = SimpleNamespace(id="vid", drm=[_PlayReady()])
|
||||
|
||||
with pytest.raises(click.ClickException, match="^Licence request failed: refused$"):
|
||||
svc.proxy_license(b"chal", track, "playready")
|
||||
|
||||
@@ -182,7 +182,7 @@ def test_resolve_server_keys_does_not_warn_for_clear_tracks(monkeypatch):
|
||||
|
||||
svc.resolve_server_keys(SimpleNamespace(tracks=Tracks([video_track, audio_track])))
|
||||
|
||||
assert warnings == ["Server CDM returned no content keys for track v-1"]
|
||||
assert warnings == ["Server CDM returned no content keys for track simplenamespace (v-1)"]
|
||||
|
||||
|
||||
def resolve(manifest_drm, drm_type="widevine"):
|
||||
|
||||
Reference in New Issue
Block a user