"""ProtectionHeader SystemID parsing. MS-SSTR manifests commonly write the GUID in registry format ("{EDEF8BA9-...}"); a bare-GUID comparison silently drops the DRM. """ from __future__ import annotations from uuid import UUID import pytest from pywidevine import PSSH from unshackle.core.drm import Widevine from unshackle.core.manifests.ism import ISM WIDEVINE_PSSH_B64 = PSSH.new(key_ids=["00112233445566778899aabbccddeeff"], system_id=PSSH.SystemId.Widevine).dumps() MANIFEST = """ {pssh} """ @pytest.mark.parametrize( "system_id", [ "EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED", "{EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED}", ], ) def test_get_drm_resolves_braced_and_bare_system_ids(system_id): manifest = MANIFEST.format(system_id=system_id, pssh=WIDEVINE_PSSH_B64) ism = ISM.from_text(manifest, "https://example.test/Manifest") drm = ISM.get_drm(ism.manifest.xpath(".//ProtectionHeader")) assert len(drm) == 1 assert isinstance(drm[0], Widevine) assert drm[0].kid == UUID("00112233-4455-6677-8899-aabbccddeeff") def test_get_drm_warns_on_unparseable_header(caplog): manifest = MANIFEST.format(system_id="EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED", pssh="!!!not-base64!!!") ism = ISM.from_text(manifest, "https://example.test/Manifest") with caplog.at_level("WARNING", logger="ISM"): drm = ISM.get_drm(ism.manifest.xpath(".//ProtectionHeader")) assert drm == [] assert any("unparseable Widevine" in r.message for r in caplog.records)