zapretgui/tests/test_address_kinds.py
loop-uh a8ac7b2c8a
All checks were successful
Zapret source guards / validate (push) Successful in 9s
Windows-сборка / Dev Dev 21.1.7.36 опубликован
Проверки сети: общая основа для запросов DNS — у каждого способа связи своя функция (обычный DNS по UDP и по TCP, шифрованный DoT на порту 853 и DoH на порту 443), запрос можно снять кнопкой «Стоп», а вместо текста ошибки возвращается вид сбоя: сервер молчит, порт закрыт, соединение оборвано, чужой сертификат, ошибка HTTP; эталонных серверов для сравнения ответов теперь четыре вместо двух и список один на BlockCheck и «Проверку домена» — если провайдер закрыл один из них (как 8.8.8.8), BlockCheck и «DNS подмена» называют его с причиной и советуют не выбирать для защищённого DNS; перехват DNS по контрольному адресу, виды адресов-заглушек и отмена запросов сведены в одно место вместо двух-трёх копий с разной логикой; адрес внутренней сети провайдера (100.64.0.0/10) в ответе DNS считается подменой; удалена старая проверка, которую никто не вызывал (preflight, isp_page_detector, ping_tester) вместе с её настройками и моделями
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 19:59:00 +03:00

62 lines
2.4 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
import unittest
from utils.address_kinds import (
BLOCK_STUB_OWNERS,
AddressKind,
address_kind,
block_stub_owner,
is_stub_address,
)
class AddressKindTests(unittest.TestCase):
def test_every_kind_is_recognised(self) -> None:
cases = {
"93.184.216.34": AddressKind.PUBLIC,
"2606:2800:220:1::1": AddressKind.PUBLIC,
"195.82.146.214": AddressKind.BLOCK_STUB,
"198.18.0.5": AddressKind.FAKE_IP,
"127.0.0.1": AddressKind.SELF,
"0.0.0.0": AddressKind.SELF,
"::1": AddressKind.SELF,
"192.168.1.1": AddressKind.LOCAL,
"169.254.10.10": AddressKind.LOCAL,
"fe80::1": AddressKind.LOCAL,
"100.64.0.1": AddressKind.CARRIER,
"240.0.0.1": AddressKind.SERVICE,
"224.0.0.1": AddressKind.SERVICE,
"не адрес": AddressKind.INVALID,
"": AddressKind.INVALID,
}
for ip, kind in cases.items():
with self.subTest(ip=ip):
self.assertEqual(address_kind(ip), kind)
def test_known_stub_wins_over_its_network(self) -> None:
"""10.10.10.10 — частный адрес, но это известная заглушка, и подпись у неё своя."""
self.assertEqual(address_kind("10.10.10.10"), AddressKind.BLOCK_STUB)
self.assertEqual(block_stub_owner("10.10.10.10"), "внутренняя заглушка")
self.assertEqual(block_stub_owner("8.8.8.8"), "")
def test_fake_ip_of_users_vpn_is_not_a_provider_stub(self) -> None:
self.assertFalse(is_stub_address("198.18.0.5"))
def test_addresses_a_public_site_cannot_have_are_stubs(self) -> None:
for ip in ("195.82.146.214", "127.0.0.1", "192.168.1.1", "100.64.0.1", "240.0.0.1"):
with self.subTest(ip=ip):
self.assertTrue(is_stub_address(ip))
for ip in ("93.184.216.34", "не адрес"):
with self.subTest(ip=ip):
self.assertFalse(is_stub_address(ip))
def test_every_listed_stub_has_an_owner(self) -> None:
for ip, owner in BLOCK_STUB_OWNERS.items():
with self.subTest(ip=ip):
self.assertTrue(owner)
self.assertEqual(address_kind(ip), AddressKind.BLOCK_STUB)
if __name__ == "__main__":
unittest.main()