zapretgui/tests/test_dns_check_plans.py
loop-uh 5d541b833e
All checks were successful
Zapret source guards / validate (push) Successful in 9s
DNS подмена: чужой сертификат проверяется контролем на настоящем адресе, итог один для панели, строки состояния и истории
- Чужой сертификат по адресу из DNS теперь перепроверяется тем же запросом к
  настоящему адресу сайта (как контроль у OONI). Если и там чужой — HTTPS
  подменяет антивирус, прокси или сеть, а не DNS: это «не узнали», а не
  «подмена». Без эталона чужой сертификат тоже ничего не доказывает.
- Сводка итога вынесена из виджетов в dns_check_plans; строка состояния
  строится из неё: при сбое и остановке больше нет зелёного «Проверка
  завершена», «Сохранить» доступно, только когда есть что сохранять.
- Все адреса заданы на компьютере или в сети (hosts, VPN fake-ip, домашний
  фильтр) — не «Ваш DNS честный», а «адреса берутся не у провайдера»; такой
  домен подписан «Адрес не от провайдера», а не «Адрес из файла hosts».
- Проверка, где не удалось проверить ни один адрес, пишется в историю как
  «не узнали», а не предупреждение.
- Удалены неиспользуемые create_dns_check_worker (к тому же сломанный) и
  create_dns_check_save_worker в dns/commands.py, план очистки потока.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 00:01:21 +03:00

38 lines
1.8 KiB
Python

"""Итог вкладки «DNS подмена» один: из него и панель, и строка состояния, и история."""
from __future__ import annotations
import unittest
from dns.dns_check_plans import build_finish_plan, summarize_dns_results
class FinishPlanTests(unittest.TestCase):
def test_failed_or_stopped_check_is_not_green(self) -> None:
failed = build_finish_plan({})
stopped = build_finish_plan({"stopped": True})
self.assertEqual((failed.status_tone, failed.save_enabled), ("error", False))
self.assertEqual(stopped.status_tone, "muted")
self.assertNotIn("✅", failed.status_text + stopped.status_text)
def test_spoofing_and_partial_and_ok(self) -> None:
self.assertEqual(build_finish_plan({"domains": {"a": {"state": "spoofed"}}}).status_tone, "error")
self.assertEqual(build_finish_plan({"domains": {"a": {"state": "unknown"}}}).status_tone, "warning")
self.assertEqual(build_finish_plan({"domains": {"a": {"state": "ok"}}}).status_tone, "success")
def test_addresses_all_set_locally_prove_nothing_about_the_provider(self) -> None:
summary = summarize_dns_results({"domains": {"a": {"state": "local"}, "b": {"state": "local"}}})
self.assertEqual(summary["kind"], "partial")
self.assertNotIn("честный", summary["title"])
def test_history_of_a_check_that_learned_nothing_is_unknown(self) -> None:
from diagnostics.history import dns_check_entry
entry = dns_check_entry({"domains": {"a": {"state": "unknown"}, "b": {"state": "unknown"}}})
self.assertEqual(entry["level"], "unknown")
partly = dns_check_entry({"domains": {"a": {"state": "unknown"}, "b": {"state": "ok"}}})
self.assertEqual(partly["level"], "warn")
if __name__ == "__main__":
unittest.main()