...

Text file src/github.com/emissary-ingress/emissary/v3/python/tests/unit/test_cidrrange.py

Documentation: github.com/emissary-ingress/emissary/v3/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.v3.v3cidrrange import CIDRRange
    15
    16
    17@pytest.mark.compilertest
    18def test_cidrrange():
    19    for spec, wanted_result, wanted_address, wanted_prefix_len, wanted_error in [
    20        ("127.0.0.1", True, "127.0.0.1", 32, None),  # IPv4 exact
    21        ("::1", True, "::1", 128, None),  # IPv6 exact
    22        ("192.168.0.0/16", True, "192.168.0.0", 16, None),  # IPv4 range
    23        ("2001:2000::/64", True, "2001:2000::", 64, None),  # IPv6 range
    24        ("2001:2000:0:0:0::/64", True, "2001:2000::", 64, None),  # IPv6 range
    25        ("10", False, None, None, "Invalid IP address 10"),
    26        ("10/8", False, None, None, "Invalid IP address 10"),
    27        ("10.0.0.0/a", False, None, None, "CIDR range 10.0.0.0/a has an invalid length, ignoring"),
    28        ("10.0.0.0/99", False, None, None, "Invalid prefix length for IPv4 address 10.0.0.0/99"),
    29        ("2001:2000::/99", True, "2001:2000::", 99, None),
    30        (
    31            "2001:2000::/199",
    32            False,
    33            None,
    34            None,
    35            "Invalid prefix length for IPv6 address 2001:2000::/199",
    36        ),
    37    ]:
    38        c = CIDRRange(spec)
    39
    40        if wanted_result:
    41            assert bool(c), f"{spec} should be a valid CIDRRange but is not: {c.error}"
    42
    43            assert c.address == wanted_address
    44            assert c.prefix_len == wanted_prefix_len
    45            assert c.error == None
    46        else:
    47            assert not bool(c), f"{spec} should be an invalid CIDRRange but is valid? {c}"
    48
    49            assert c.address == None
    50            assert c.prefix_len == None
    51            assert c.error == wanted_error
    52
    53
    54@pytest.mark.compilertest
    55def test_cidrrange_v3():
    56    for spec, wanted_result, wanted_address, wanted_prefix_len, wanted_error in [
    57        ("127.0.0.1", True, "127.0.0.1", 32, None),  # IPv4 exact
    58        ("::1", True, "::1", 128, None),  # IPv6 exact
    59        ("192.168.0.0/16", True, "192.168.0.0", 16, None),  # IPv4 range
    60        ("2001:2000::/64", True, "2001:2000::", 64, None),  # IPv6 range
    61        ("2001:2000:0:0:0::/64", True, "2001:2000::", 64, None),  # IPv6 range
    62        ("10", False, None, None, "Invalid IP address 10"),
    63        ("10/8", False, None, None, "Invalid IP address 10"),
    64        ("10.0.0.0/a", False, None, None, "CIDR range 10.0.0.0/a has an invalid length, ignoring"),
    65        ("10.0.0.0/99", False, None, None, "Invalid prefix length for IPv4 address 10.0.0.0/99"),
    66        ("2001:2000::/99", True, "2001:2000::", 99, None),
    67        (
    68            "2001:2000::/199",
    69            False,
    70            None,
    71            None,
    72            "Invalid prefix length for IPv6 address 2001:2000::/199",
    73        ),
    74    ]:
    75        c = CIDRRange(spec)
    76
    77        if wanted_result:
    78            assert bool(c), f"{spec} should be a valid CIDRRange but is not: {c.error}"
    79
    80            assert c.address == wanted_address
    81            assert c.prefix_len == wanted_prefix_len
    82            assert c.error == None
    83        else:
    84            assert not bool(c), f"{spec} should be an invalid CIDRRange but is valid? {c}"
    85
    86            assert c.address == None
    87            assert c.prefix_len == None
    88            assert c.error == wanted_error
    89
    90
    91if __name__ == "__main__":
    92    pytest.main(sys.argv)

View as plain text