Files
libretro/tests/test_finalize_pack_names.py
T

66 lines
2.5 KiB
Python

"""The post-build check judges only the packs this run would name.
A MiSTer _Custom pack left in the directory by a --from-md5 run was
attached to misterfpga by substring and checked against the full list:
0/81, FAILED, exit code 1, for a run whose own pack was 81/81.
"""
from __future__ import annotations
import os
import sys
import tempfile
import unittest
import zipfile
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(REPO_ROOT / "scripts"))
from generate_pack import verify_and_finalize_packs # noqa: E402
class FinalizeByExactName(unittest.TestCase):
def test_a_custom_pack_is_not_judged_as_the_platform_pack(self):
previous = os.getcwd()
os.chdir(REPO_ROOT)
self.addCleanup(os.chdir, previous)
with tempfile.TemporaryDirectory(dir=REPO_ROOT / "tmp") as tmp:
with zipfile.ZipFile(Path(tmp) / "MiSTer_FPGA_Custom_BIOS_Pack.zip", "w") as zf:
zf.writestr("README.txt", "custom")
ok = verify_and_finalize_packs(tmp, {"files": {}, "indexes": {}})
self.assertTrue(ok)
class APackFromAnotherRunIsLeftAlone(unittest.TestCase):
"""A one-platform build verified, recompressed and gave a new manifest to
every pack in the directory: MiSTer's lost its pack_systems fields after a
MinUI run, and a bizhawk run rewrote 52 GB of packs it never built."""
def test_a_second_platform_does_not_rewrite_the_first(self):
import json
import subprocess
with tempfile.TemporaryDirectory(dir=REPO_ROOT / "tmp") as tmp:
def build(platform: str) -> str:
proc = subprocess.run(
[sys.executable, "scripts/generate_pack.py", "--platform", platform,
"--offline", "--output-dir", tmp],
cwd=REPO_ROOT, capture_output=True, text=True, timeout=600, check=False,
)
self.assertEqual(proc.returncode, 0, proc.stdout[-2000:] + proc.stderr[-2000:])
return proc.stdout
build("misterfpga")
(first,) = Path(tmp).glob("MiSTer*_BIOS_Pack.zip")
before = first.read_bytes()
output = build("minui")
self.assertNotIn(first.name, output)
self.assertEqual(first.read_bytes(), before)
with zipfile.ZipFile(first) as zf:
manifest = json.loads(zf.read("manifest.json"))
self.assertIn("install_list", manifest)
if __name__ == "__main__":
unittest.main()