aiogram/tests/test_dispatcher/test_webhook/test_security.py
Alex Root Junior 1c2c7fd88c
Webhook integration in 3.0 (#737)
* Added base webhook implementation and example
* Added example
* Enable on_startup callback
* Correctly handle response into webhook (silent call)
* Fixed State filter
2021-11-08 23:20:12 +02:00

57 lines
1.8 KiB
Python

from ipaddress import IPv4Address, IPv4Network
import pytest
from aiogram.dispatcher.webhook.security import IPFilter
class TestSecurity:
def test_empty_init(self):
ip_filter = IPFilter()
assert not ip_filter._allowed_ips
@pytest.mark.parametrize(
"ip,result",
[
("127.0.0.1", True),
("127.0.0.2", False),
(IPv4Address("127.0.0.1"), True),
(IPv4Address("127.0.0.2"), False),
(IPv4Address("192.168.0.32"), True),
("192.168.0.33", False),
("10.111.0.5", True),
("10.111.0.100", True),
("10.111.1.100", False),
],
)
def test_check_ip(self, ip, result):
ip_filter = IPFilter(
ips=["127.0.0.1", IPv4Address("192.168.0.32"), IPv4Network("10.111.0.0/24")]
)
assert (ip in ip_filter) is result
def test_default(self):
ip_filter = IPFilter.default()
assert isinstance(ip_filter, IPFilter)
assert len(ip_filter._allowed_ips) == 5116
assert "91.108.4.50" in ip_filter
assert "149.154.160.20" in ip_filter
@pytest.mark.parametrize(
"ip,ip_range",
[
["127.0.0.1", {IPv4Address("127.0.0.1")}],
["91.108.4.0/22", set(IPv4Network("91.108.4.0/22").hosts())],
[IPv4Address("91.108.4.5"), {IPv4Address("91.108.4.5")}],
[IPv4Network("91.108.4.0/22"), set(IPv4Network("91.108.4.0/22").hosts())],
[42, set()],
],
)
def test_allow_ip(self, ip, ip_range):
ip_filter = IPFilter()
if not ip_range:
with pytest.raises(ValueError):
ip_filter.allow_ip(ip)
else:
ip_filter.allow_ip(ip)
assert ip_filter._allowed_ips == ip_range