zapretgui/tests/test_dns_ipv6_provider_apply.py
loop-uh 28292aba7c
All checks were successful
Zapret source guards / validate (push) Successful in 6s
Windows-сборка / Dev Dev 21.1.6.36 опубликован
DNS переписан на чистом WinAPI: только настоящие адаптеры, виртуалки и VPN не трогаются; добавлены AstraCat и GeoHide
- dns/winapi.py: GetAdaptersAddresses без GAA_FLAG_INCLUDE_ALL_INTERFACES
  (из-за него на странице были WFP/QoS/Npcap-фильтры, отладчик ядра и т.п.),
  признаки «аппаратный / фильтр / разъём» из GetIfEntry2, адаптер интернета
  через GetBestInterfaceEx, DNS читается GetInterfaceDnsSettings вместо
  реестра, пишется SetInterfaceDnsSettings (DoH на Windows 11), кэш —
  DnsFlushResolverCache.
- dns/adapters.py: показываются настоящие сетевые карты (в том числе внутри
  виртуалки) и адаптер, через который идёт интернет (Hyper-V vEthernet);
  внутренние сети Hyper-V/VMware/VirtualBox/WSL, VPN и Wi-Fi Direct не
  показываются и не меняются.
- Адаптер опознаётся по GUID; запись только адаптерам со страницы — Windows
  молча заводит ветку реестра под любой GUID.
- Страница: таблетки со значком Ethernet/Wi-Fi и пометками «интернет» /
  «не подключён», по умолчанию отмечены только подключённые, отметки
  сохраняются после применения; ошибки Windows видны во всплывашке.
- Шаблоны DoH берутся из списка серверов (один источник), IPv6 тоже с DoH.
- Новые DNS из профилей hosts: AstraCat и GeoHide (проверены с Windows).
- Удалены мёртвые dns_core, dns_force, dns_worker, «DNS при запуске»,
  ключи force_dns_enabled и dns_crash_count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 23:43:52 +03:00

47 lines
1.5 KiB
Python

from __future__ import annotations
import unittest
class DnsIpv6ProviderApplyTests(unittest.TestCase):
def test_provider_dns_plan_accepts_ipv6_only_when_ipv6_is_available(self) -> None:
from dns.page_plans import build_provider_dns_plan
plan = build_provider_dns_plan(
name="Мой IPv6 DNS",
data={"ipv4": [], "ipv6": ["2001:4860:4860::8888"]},
ipv6_available=True,
)
self.assertTrue(plan.valid)
self.assertEqual(plan.ipv4, [])
self.assertEqual(plan.ipv6, ["2001:4860:4860::8888"])
def test_provider_dns_plan_rejects_ipv6_only_when_ipv6_is_unavailable(self) -> None:
from dns.page_plans import build_provider_dns_plan
plan = build_provider_dns_plan(
name="Мой IPv6 DNS",
data={"ipv4": [], "ipv6": ["2001:4860:4860::8888"]},
ipv6_available=False,
)
self.assertFalse(plan.valid)
self.assertIn("нет DNS", plan.log_message)
class DnsProviderPlanTests(unittest.TestCase):
def test_ipv6_addresses_are_kept_even_without_ipv6_route(self) -> None:
from dns.page_plans import build_provider_dns_plan
plan = build_provider_dns_plan(
name="Cloudflare",
data={"ipv4": ["1.1.1.1"], "ipv6": ["2606:4700:4700::1111"]},
ipv6_available=False,
)
self.assertTrue(plan.valid)
self.assertEqual(plan.ipv6, ["2606:4700:4700::1111"])
if __name__ == "__main__":
unittest.main()