mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-24 04:39:06 -05:00
A row said the declared hash was contradicted by the local file and named neither. The table now prints the hashes the platform declares and the path and hashes of the copy the collection holds.
75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
"""A platform page shows each row the hash its own declaration carries.
|
|
|
|
The page joined verify's details to the platform YAML by file name alone,
|
|
the last declaration winning: MiSTer declares boot.rom 23 times with 21
|
|
distinct MD5s, and every boot.rom row showed the same one, so a user
|
|
checking a dump against the page was told the wrong hash.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(REPO_ROOT / "scripts"))
|
|
|
|
from generate_site import _render_platform_systems # noqa: E402
|
|
|
|
A, B, C = "a" * 32, "b" * 32, "c" * 32
|
|
|
|
|
|
class EachRowItsDeclaration(unittest.TestCase):
|
|
def test_same_name_in_two_systems_and_twice_in_one(self):
|
|
config_files = {
|
|
("psx", "boot.rom"): [{"name": "boot.rom", "md5": A}],
|
|
("saturn", "boot.rom"): [
|
|
{"name": "boot.rom", "md5": B},
|
|
{"name": "boot.rom", "md5": C},
|
|
],
|
|
}
|
|
by_system = {
|
|
"psx": [{"name": "boot.rom", "status": "ok", "system": "psx"}],
|
|
"saturn": [
|
|
{"name": "boot.rom", "status": "ok", "system": "saturn"},
|
|
{"name": "boot.rom", "status": "ok", "system": "saturn"},
|
|
],
|
|
}
|
|
text = "\n".join(_render_platform_systems(by_system, config_files, {}))
|
|
psx, saturn = text.split("saturn", 1)[0], text.split("saturn", 1)[1]
|
|
self.assertIn(A, psx)
|
|
self.assertNotIn(B, psx)
|
|
self.assertLess(saturn.index(B), saturn.index(C))
|
|
self.assertNotIn(A, saturn)
|
|
|
|
|
|
class AnUntestedRowNamesBothHashes(unittest.TestCase):
|
|
"""The gaps page said "declared hash contradicted by the local file" for
|
|
RetroDECK's dsifirmware.bin and named neither the dump RetroDECK asks for
|
|
nor the one the collection holds."""
|
|
|
|
def test_declared_and_held(self):
|
|
import generate_site as gs
|
|
|
|
path = "bios/Nintendo/Nintendo DS/dsifirmware.bin"
|
|
declared, held = "1" * 64, "2" * 64
|
|
config = {"systems": {"nintendo-ds": {"files": [
|
|
{"name": "dsifirmware.bin", "sha256": declared}]}}}
|
|
detail = {"name": "dsifirmware.bin", "system": "nintendo-ds"}
|
|
problem = {
|
|
"platform": "RetroDECK", "name": "dsifirmware.bin", "status": "untested",
|
|
"required": True, "reason": "declared hash contradicted by the local file",
|
|
"declared": gs._declared_hashes(config, detail), "path": path,
|
|
}
|
|
db = {"files": {"f" * 40: {"path": path, "sha256": held}}}
|
|
table = "\n".join(gs._render_problem_files([problem], db=db))
|
|
row = next(line for line in table.splitlines() if "dsifirmware" in line)
|
|
self.assertIn(f"sha256 `{declared}`", row)
|
|
self.assertIn(f"sha256 `{held}`", row)
|
|
self.assertIn(f"`{path}`", row)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|