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