Files
searchi/tools/media-runtime/test_provision.py
T

60 lines
2.7 KiB
Python
Raw Normal View History

import hashlib
import importlib.util
from pathlib import Path
import tempfile
import unittest
import zipfile
spec = importlib.util.spec_from_file_location("media_provision", Path(__file__).with_name("provision.py"))
provision = importlib.util.module_from_spec(spec)
spec.loader.exec_module(provision)
class ProvisionTests(unittest.TestCase):
def package(self, directory, entries):
archive = directory / "sample.zip"
with zipfile.ZipFile(archive, "w") as package:
for name, data in entries:
package.writestr(name, data)
return archive
def test_selects_only_tools_and_preserves_distinct_notices(self):
with tempfile.TemporaryDirectory() as temporary:
directory = Path(temporary)
archive = self.package(directory, [("build/bin/ffmpeg.exe", b"tool1"),
("build/bin/ffprobe.exe", b"tool2"), ("build/README.txt", b"readme"),
("build/LICENSE", b"first license"), ("build/dependency/LICENSE", b"second license"),
("../../unselected.exe", b"unselected")])
target = directory / "out"
provision.extract(archive, target, True)
self.assertEqual((target / "bin/ffmpeg.exe").read_bytes(), b"tool1")
self.assertEqual(len(list((target / "licenses").rglob("LICENSE"))), 2)
self.assertFalse((directory / "unselected.exe").exists())
def test_missing_and_duplicate_executables_are_explicit_failures(self):
with tempfile.TemporaryDirectory() as temporary:
directory = Path(temporary)
for entries in [[("bin/ffmpeg.exe", b"tool")],
[("a/ffmpeg.exe", b"tool"), ("b/ffmpeg.exe", b"second"), ("bin/ffprobe.exe", b"probe")]]:
with self.assertRaises(ValueError):
provision.extract(self.package(directory, entries), directory / "out", True)
def test_same_size_corruption_is_not_a_verified_cache(self):
with tempfile.TemporaryDirectory() as temporary:
path = Path(temporary) / "archive"
path.write_bytes(b"good")
artifact = {"bytes": 4, "sha256": hashlib.sha256(b"good").hexdigest()}
self.assertTrue(provision.verified(path, artifact))
path.write_bytes(b"evil")
self.assertFalse(provision.verified(path, artifact))
def test_notice_traversal_cannot_escape_output(self):
with tempfile.TemporaryDirectory() as temporary:
directory = Path(temporary)
archive = self.package(directory, [("../../LICENSE", b"escape")])
with self.assertRaises(ValueError):
provision.extract(archive, directory / "out", True)
if __name__ == "__main__":
unittest.main()