...

Text file src/github.com/datawire/ambassador/v2/python/tests/unit/test_cidrrange.py

Documentation: github.com/datawire/ambassador/v2/python/tests/unit

     1import logging
     2import sys
     3
     4import pytest
     5
     6logging.basicConfig(
     7    level=logging.INFO,
     8    format="%(asctime)s test %(levelname)s: %(message)s",
     9    datefmt="%Y-%m-%d %H:%M:%S",
    10)
    11
    12logger = logging.getLogger("ambassador")
    13
    14from ambassador.envoy.v2.v2cidrrange import CIDRRange
    15from ambassador.envoy.v3.v3cidrrange import CIDRRange as CIDRRangeV3
    16
    17
    18@pytest.mark.compilertest
    19def test_cidrrange():
    20    for spec, wanted_result, wanted_address, wanted_prefix_len, wanted_error in [
    21        ("127.0.0.1", True, "127.0.0.1", 32, None),  # IPv4 exact
    22        ("::1", True, "::1", 128, None),  # IPv6 exact
    23        ("192.168.0.0/16", True, "192.168.0.0", 16, None),  # IPv4 range
    24        ("2001:2000::/64", True, "2001:2000::", 64, None),  # IPv6 range
    25        ("2001:2000:0:0:0::/64", True, "2001:2000::", 64, None),  # IPv6 range
    26        ("10", False, None, None, "Invalid IP address 10"),
    27        ("10/8", False, None, None, "Invalid IP address 10"),
    28        ("10.0.0.0/a", False, None, None, "CIDR range 10.0.0.0/a has an invalid length, ignoring"),
    29        ("10.0.0.0/99", False, None, None, "Invalid prefix length for IPv4 address 10.0.0.0/99"),
    30        ("2001:2000::/99", True, "2001:2000::", 99, None),
    31        (
    32            "2001:2000::/199",
    33            False,
    34            None,
    35            None,
    36            "Invalid prefix length for IPv6 address 2001:2000::/199",
    37        ),
    38    ]:
    39        c = CIDRRange(spec)
    40
    41        if wanted_result:
    42            assert bool(c), f"{spec} should be a valid CIDRRange but is not: {c.error}"
    43
    44            assert c.address == wanted_address
    45            assert c.prefix_len == wanted_prefix_len
    46            assert c.error == None
    47        else:
    48            assert not bool(c), f"{spec} should be an invalid CIDRRange but is valid? {c}"
    49
    50            assert c.address == None
    51            assert c.prefix_len == None
    52            assert c.error == wanted_error
    53
    54
    55@pytest.mark.compilertest
    56def test_cidrrange_v3():
    57    for spec, wanted_result, wanted_address, wanted_prefix_len, wanted_error in [
    58        ("127.0.0.1", True, "127.0.0.1", 32, None),  # IPv4 exact
    59        ("::1", True, "::1", 128, None),  # IPv6 exact
    60        ("192.168.0.0/16", True, "192.168.0.0", 16, None),  # IPv4 range
    61        ("2001:2000::/64", True, "2001:2000::", 64, None),  # IPv6 range
    62        ("2001:2000:0:0:0::/64", True, "2001:2000::", 64, None),  # IPv6 range
    63        ("10", False, None, None, "Invalid IP address 10"),
    64        ("10/8", False, None, None, "Invalid IP address 10"),
    65        ("10.0.0.0/a", False, None, None, "CIDR range 10.0.0.0/a has an invalid length, ignoring"),
    66        ("10.0.0.0/99", False, None, None, "Invalid prefix length for IPv4 address 10.0.0.0/99"),
    67        ("2001:2000::/99", True, "2001:2000::", 99, None),
    68        (
    69            "2001:2000::/199",
    70            False,
    71            None,
    72            None,
    73            "Invalid prefix length for IPv6 address 2001:2000::/199",
    74        ),
    75    ]:
    76        c = CIDRRangeV3(spec)
    77
    78        if wanted_result:
    79            assert bool(c), f"{spec} should be a valid CIDRRange but is not: {c.error}"
    80
    81            assert c.address == wanted_address
    82            assert c.prefix_len == wanted_prefix_len
    83            assert c.error == None
    84        else:
    85            assert not bool(c), f"{spec} should be an invalid CIDRRange but is valid? {c}"
    86
    87            assert c.address == None
    88            assert c.prefix_len == None
    89            assert c.error == wanted_error
    90
    91
    92if __name__ == "__main__":
    93    pytest.main(sys.argv)

View as plain text