zapretgui/tests/test_update_core_identity.py
loop-uh 5daa4950f8
All checks were successful
Zapret source guards / validate (push) Successful in 11s
Windows-сборка / Dev Dev 21.1.7.158 опубликован
Обновление: распаковщик проверяется до скачивания, zstandard — запасной
Живая проверка 21.1.7.157 на win10: план собрался (13,8 МБ вместо 41,8),
но в сборке не оказалось compression.zstd — программа скачала изменения
и ушла на установщик. У Zapret KVN (Python 3.12) этого модуля нет вовсе,
и путь из хранилища там не работал ни разу.

- store.codecs(): что программа умеет распаковать (zstd — compression.zstd
  или пакет zstandard; bsdiff — bz2).
- plan.make_plan без распаковщика zstd отказывает до скачивания и не
  выбирает заплатки, которые нечем наложить.
- store: на старом Python распаковка пакетом zstandard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-15 02:49:45 +03:00

44 lines
2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from __future__ import annotations
"""Общее ядро обновления: сумма в CORE_SHA256 совпадает с файлами.
Ядро одно на Zapret 2 GUI и Zapret KVN. Если этот тест упал, ядро правили без
пересчёта суммы: запустите ``python scripts/update_core_hash.py`` и перенесите
ядро в Zapret KVN (``scripts/sync_update_core.py`` там).
"""
import importlib.util
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
def test_core_hash_matches_files() -> None:
spec = importlib.util.spec_from_file_location("update_core_hash", ROOT / "scripts" / "update_core_hash.py")
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
recorded = (module.CORE / module.HASH_FILE).read_text(encoding="ascii").strip()
assert recorded == module.core_hash()
def test_core_has_no_dependencies_beyond_the_standard_library() -> None:
import ast
import sys
for path in (ROOT / "src" / "zapret_update").glob("*.py"):
tree = ast.parse(path.read_text(encoding="utf-8"))
for node in ast.walk(tree):
names = []
if isinstance(node, ast.Import):
names = [alias.name for alias in node.names]
elif isinstance(node, ast.ImportFrom) and not node.level:
names = [node.module or ""]
# compression (zstd) — стандартная библиотека с Python 3.14.
# zstandard — только запасной распаковщик в store.py для программ
# на старом Python (Zapret KVN на 3.12); ядро работает и без него.
allowed = {"__future__", "compression"} | ({"zstandard"} if path.name == "store.py" else set())
for name in names:
top = name.split(".")[0]
assert top in sys.stdlib_module_names or top in allowed, f"{path.name}: {name}"