Files
DjangoAdmin_FastAPI_NaiveVue/tests/unit/utils/test_ip2region.py
T
2026-09-12 18:24:41 +08:00

40 lines
1.5 KiB
Python
Raw 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.
"""utils/ip2region.py:畸形 IP 不得抛异常中断日志(内部降级返回"未知")。
回归场景:IP 形如 172.abc 时,int(parts[1]) 曾抛 ValueError 冒泡到
record_login_log / record_operation_log,使日志整段丢失。
"""
from utils.ip2region import _is_private_ip, get_ip_location, get_ip_region
def test_is_private_ip_handles_malformed_ip():
# 畸形 IP 不再抛 ValueError,按非内网处理(交查询侧兜底为"未知")
assert _is_private_ip('172.abc') is False
assert _is_private_ip('172.') is False
assert _is_private_ip('172.a.b') is False
def test_is_private_ip_private_ranges():
assert _is_private_ip('172.16.5.5') is True
assert _is_private_ip('172.31.5.5') is True
assert _is_private_ip('172.32.5.5') is False # 不在 172.16/12 私有段
assert _is_private_ip('10.1.2.3') is True
assert _is_private_ip('192.168.1.1') is True
assert _is_private_ip('8.8.8.8') is False
def test_get_ip_location_malformed_ip_degrades_to_unknown():
# 畸形 IP:不抛异常,降级返回"未知"(xdb 未加载时非内网 IP 也返回"未知")
assert get_ip_location('172.abc') == '未知'
def test_get_ip_region_malformed_ip_returns_unknown_dict():
region = get_ip_region('172.abc')
assert region['country'] == '未知'
assert set(region) == {'country', 'province', 'city', 'isp', 'country_code'}
def test_get_ip_location_private_ip_still_works():
# 内网 IP 无需 xdb,仍正常返回"内网IP"
assert get_ip_location('10.0.0.1') == '内网IP'