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