]>
Commit | Line | Data |
---|---|---|
522d829b TL |
1 | import json |
2 | from textwrap import dedent | |
3 | from unittest import mock | |
4 | ||
5 | import pytest | |
6 | ||
1e59de90 | 7 | from tests.fixtures import with_cephadm_ctx, cephadm_fs, import_cephadm |
522d829b | 8 | |
1e59de90 | 9 | _cephadm = import_cephadm() |
522d829b TL |
10 | |
11 | ||
12 | class TestCommandListNetworks: | |
13 | @pytest.mark.parametrize("test_input, expected", [ | |
14 | ( | |
15 | dedent(""" | |
16 | default via 192.168.178.1 dev enxd89ef3f34260 proto dhcp metric 100 | |
17 | 10.0.0.0/8 via 10.4.0.1 dev tun0 proto static metric 50 | |
18 | 10.3.0.0/21 via 10.4.0.1 dev tun0 proto static metric 50 | |
19 | 10.4.0.1 dev tun0 proto kernel scope link src 10.4.0.2 metric 50 | |
20 | 137.1.0.0/16 via 10.4.0.1 dev tun0 proto static metric 50 | |
21 | 138.1.0.0/16 via 10.4.0.1 dev tun0 proto static metric 50 | |
22 | 139.1.0.0/16 via 10.4.0.1 dev tun0 proto static metric 50 | |
23 | 140.1.0.0/17 via 10.4.0.1 dev tun0 proto static metric 50 | |
24 | 141.1.0.0/16 via 10.4.0.1 dev tun0 proto static metric 50 | |
33c7a0ef TL |
25 | 172.16.100.34 via 172.16.100.34 dev eth1 proto kernel scope link src 172.16.100.34 |
26 | 192.168.122.1 dev ens3 proto dhcp scope link src 192.168.122.236 metric 100 | |
522d829b TL |
27 | 169.254.0.0/16 dev docker0 scope link metric 1000 |
28 | 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 | |
29 | 192.168.39.0/24 dev virbr1 proto kernel scope link src 192.168.39.1 linkdown | |
30 | 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown | |
31 | 192.168.178.0/24 dev enxd89ef3f34260 proto kernel scope link src 192.168.178.28 metric 100 | |
32 | 192.168.178.1 dev enxd89ef3f34260 proto static scope link metric 100 | |
33 | 195.135.221.12 via 192.168.178.1 dev enxd89ef3f34260 proto static metric 100 | |
34 | """), | |
35 | { | |
33c7a0ef TL |
36 | '172.16.100.34/32': {'eth1': {'172.16.100.34'}}, |
37 | '192.168.122.1/32': {'ens3': {'192.168.122.236'}}, | |
38 | '10.4.0.1/32': {'tun0': {'10.4.0.2'}}, | |
522d829b TL |
39 | '172.17.0.0/16': {'docker0': {'172.17.0.1'}}, |
40 | '192.168.39.0/24': {'virbr1': {'192.168.39.1'}}, | |
41 | '192.168.122.0/24': {'virbr0': {'192.168.122.1'}}, | |
42 | '192.168.178.0/24': {'enxd89ef3f34260': {'192.168.178.28'}} | |
43 | } | |
44 | ), ( | |
45 | dedent(""" | |
46 | default via 10.3.64.1 dev eno1 proto static metric 100 | |
47 | 10.3.64.0/24 dev eno1 proto kernel scope link src 10.3.64.23 metric 100 | |
48 | 10.3.64.0/24 dev eno1 proto kernel scope link src 10.3.64.27 metric 100 | |
49 | 10.88.0.0/16 dev cni-podman0 proto kernel scope link src 10.88.0.1 linkdown | |
50 | 172.21.0.0/20 via 172.21.3.189 dev tun0 | |
51 | 172.21.1.0/20 via 172.21.3.189 dev tun0 | |
52 | 172.21.2.1 via 172.21.3.189 dev tun0 | |
53 | 172.21.3.1 dev tun0 proto kernel scope link src 172.21.3.2 | |
54 | 172.21.4.0/24 via 172.21.3.1 dev tun0 | |
55 | 172.21.5.0/24 via 172.21.3.1 dev tun0 | |
56 | 172.21.6.0/24 via 172.21.3.1 dev tun0 | |
57 | 172.21.7.0/24 via 172.21.3.1 dev tun0 | |
58 | 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown | |
59 | 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown | |
60 | 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown | |
61 | 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown | |
62 | """), | |
63 | { | |
64 | '10.3.64.0/24': {'eno1': {'10.3.64.23', '10.3.64.27'}}, | |
65 | '10.88.0.0/16': {'cni-podman0': {'10.88.0.1'}}, | |
33c7a0ef | 66 | '172.21.3.1/32': {'tun0': {'172.21.3.2'}}, |
522d829b TL |
67 | '192.168.122.0/24': {'virbr0': {'192.168.122.1'}} |
68 | } | |
69 | ), | |
70 | ]) | |
71 | def test_parse_ipv4_route(self, test_input, expected): | |
1e59de90 | 72 | assert _cephadm._parse_ipv4_route(test_input) == expected |
522d829b TL |
73 | |
74 | @pytest.mark.parametrize("test_routes, test_ips, expected", [ | |
75 | ( | |
76 | dedent(""" | |
77 | ::1 dev lo proto kernel metric 256 pref medium | |
78 | fe80::/64 dev eno1 proto kernel metric 100 pref medium | |
79 | fe80::/64 dev br-3d443496454c proto kernel metric 256 linkdown pref medium | |
80 | fe80::/64 dev tun0 proto kernel metric 256 pref medium | |
81 | fe80::/64 dev br-4355f5dbb528 proto kernel metric 256 pref medium | |
82 | fe80::/64 dev docker0 proto kernel metric 256 linkdown pref medium | |
83 | fe80::/64 dev cni-podman0 proto kernel metric 256 linkdown pref medium | |
84 | fe80::/64 dev veth88ba1e8 proto kernel metric 256 pref medium | |
85 | fe80::/64 dev vethb6e5fc7 proto kernel metric 256 pref medium | |
86 | fe80::/64 dev vethaddb245 proto kernel metric 256 pref medium | |
87 | fe80::/64 dev vethbd14d6b proto kernel metric 256 pref medium | |
88 | fe80::/64 dev veth13e8fd2 proto kernel metric 256 pref medium | |
89 | fe80::/64 dev veth1d3aa9e proto kernel metric 256 pref medium | |
90 | fe80::/64 dev vethe485ca9 proto kernel metric 256 pref medium | |
91 | """), | |
92 | dedent(""" | |
93 | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000 | |
94 | inet6 ::1/128 scope host | |
95 | valid_lft forever preferred_lft forever | |
96 | 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000 | |
97 | inet6 fe80::225:90ff:fee5:26e8/64 scope link noprefixroute | |
98 | valid_lft forever preferred_lft forever | |
99 | 6: br-3d443496454c: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 state DOWN | |
100 | inet6 fe80::42:23ff:fe9d:ee4/64 scope link | |
101 | valid_lft forever preferred_lft forever | |
102 | 7: br-4355f5dbb528: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP | |
103 | inet6 fe80::42:6eff:fe35:41fe/64 scope link | |
104 | valid_lft forever preferred_lft forever | |
105 | 8: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 state DOWN | |
106 | inet6 fe80::42:faff:fee6:40a0/64 scope link | |
107 | valid_lft forever preferred_lft forever | |
108 | 11: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 state UNKNOWN qlen 100 | |
109 | inet6 fe80::98a6:733e:dafd:350/64 scope link stable-privacy | |
110 | valid_lft forever preferred_lft forever | |
111 | 28: cni-podman0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 state DOWN qlen 1000 | |
112 | inet6 fe80::3449:cbff:fe89:b87e/64 scope link | |
113 | valid_lft forever preferred_lft forever | |
114 | 31: vethaddb245@if30: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP | |
115 | inet6 fe80::90f7:3eff:feed:a6bb/64 scope link | |
116 | valid_lft forever preferred_lft forever | |
117 | 33: veth88ba1e8@if32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP | |
118 | inet6 fe80::d:f5ff:fe73:8c82/64 scope link | |
119 | valid_lft forever preferred_lft forever | |
120 | 35: vethbd14d6b@if34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP | |
121 | inet6 fe80::b44f:8ff:fe6f:813d/64 scope link | |
122 | valid_lft forever preferred_lft forever | |
123 | 37: vethb6e5fc7@if36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP | |
124 | inet6 fe80::4869:c6ff:feaa:8afe/64 scope link | |
125 | valid_lft forever preferred_lft forever | |
126 | 39: veth13e8fd2@if38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP | |
127 | inet6 fe80::78f4:71ff:fefe:eb40/64 scope link | |
128 | valid_lft forever preferred_lft forever | |
129 | 41: veth1d3aa9e@if40: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP | |
130 | inet6 fe80::24bd:88ff:fe28:5b18/64 scope link | |
131 | valid_lft forever preferred_lft forever | |
132 | 43: vethe485ca9@if42: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP | |
133 | inet6 fe80::6425:87ff:fe42:b9f0/64 scope link | |
134 | valid_lft forever preferred_lft forever | |
135 | """), | |
136 | { | |
137 | "fe80::/64": { | |
138 | "eno1": {"fe80::225:90ff:fee5:26e8"}, | |
139 | "br-3d443496454c": {"fe80::42:23ff:fe9d:ee4"}, | |
140 | "tun0": {"fe80::98a6:733e:dafd:350"}, | |
141 | "br-4355f5dbb528": {"fe80::42:6eff:fe35:41fe"}, | |
142 | "docker0": {"fe80::42:faff:fee6:40a0"}, | |
143 | "cni-podman0": {"fe80::3449:cbff:fe89:b87e"}, | |
144 | "veth88ba1e8": {"fe80::d:f5ff:fe73:8c82"}, | |
145 | "vethb6e5fc7": {"fe80::4869:c6ff:feaa:8afe"}, | |
146 | "vethaddb245": {"fe80::90f7:3eff:feed:a6bb"}, | |
147 | "vethbd14d6b": {"fe80::b44f:8ff:fe6f:813d"}, | |
148 | "veth13e8fd2": {"fe80::78f4:71ff:fefe:eb40"}, | |
149 | "veth1d3aa9e": {"fe80::24bd:88ff:fe28:5b18"}, | |
150 | "vethe485ca9": {"fe80::6425:87ff:fe42:b9f0"}, | |
151 | } | |
152 | } | |
153 | ), | |
154 | ( | |
155 | dedent(""" | |
156 | ::1 dev lo proto kernel metric 256 pref medium | |
157 | 2001:1458:301:eb::100:1a dev ens20f0 proto kernel metric 100 pref medium | |
158 | 2001:1458:301:eb::/64 dev ens20f0 proto ra metric 100 pref medium | |
159 | fd01:1458:304:5e::/64 dev ens20f0 proto ra metric 100 pref medium | |
160 | fe80::/64 dev ens20f0 proto kernel metric 100 pref medium | |
161 | default proto ra metric 100 | |
162 | nexthop via fe80::46ec:ce00:b8a0:d3c8 dev ens20f0 weight 1 | |
163 | nexthop via fe80::46ec:ce00:b8a2:33c8 dev ens20f0 weight 1 pref medium | |
164 | """), | |
165 | dedent(""" | |
166 | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000 | |
167 | inet6 ::1/128 scope host | |
168 | valid_lft forever preferred_lft forever | |
169 | 2: ens20f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000 | |
170 | inet6 2001:1458:301:eb::100:1a/128 scope global dynamic noprefixroute | |
171 | valid_lft 590879sec preferred_lft 590879sec | |
172 | inet6 fe80::2e60:cff:fef8:da41/64 scope link noprefixroute | |
173 | valid_lft forever preferred_lft forever | |
174 | inet6 fe80::2e60:cff:fef8:da41/64 scope link noprefixroute | |
175 | valid_lft forever preferred_lft forever | |
176 | inet6 fe80::2e60:cff:fef8:da41/64 scope link noprefixroute | |
177 | valid_lft forever preferred_lft forever | |
178 | """), | |
179 | { | |
33c7a0ef | 180 | '2001:1458:301:eb::100:1a/128': { |
522d829b TL |
181 | 'ens20f0': { |
182 | '2001:1458:301:eb::100:1a' | |
183 | }, | |
184 | }, | |
33c7a0ef TL |
185 | '2001:1458:301:eb::/64': { |
186 | 'ens20f0': set(), | |
187 | }, | |
522d829b TL |
188 | 'fe80::/64': { |
189 | 'ens20f0': {'fe80::2e60:cff:fef8:da41'}, | |
190 | }, | |
191 | 'fd01:1458:304:5e::/64': { | |
192 | 'ens20f0': set() | |
193 | }, | |
194 | } | |
195 | ), | |
20effc67 TL |
196 | ( |
197 | dedent(""" | |
198 | ::1 dev lo proto kernel metric 256 pref medium | |
199 | fe80::/64 dev ceph-brx proto kernel metric 256 pref medium | |
200 | fe80::/64 dev brx.0 proto kernel metric 256 pref medium | |
201 | default via fe80::327c:5e00:6487:71e0 dev enp3s0f1 proto ra metric 1024 expires 1790sec hoplimit 64 pref medium """), | |
202 | dedent(""" | |
203 | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000 | |
204 | inet6 ::1/128 scope host | |
205 | valid_lft forever preferred_lft forever | |
206 | 5: enp3s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000 | |
207 | inet6 fe80::ec4:7aff:fe8f:cb83/64 scope link noprefixroute | |
208 | valid_lft forever preferred_lft forever | |
209 | 6: ceph-brx: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000 | |
210 | inet6 fe80::d8a1:69ff:fede:8f58/64 scope link | |
211 | valid_lft forever preferred_lft forever | |
212 | 7: brx.0@eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000 | |
213 | inet6 fe80::a4cb:54ff:fecc:f2a2/64 scope link | |
214 | valid_lft forever preferred_lft forever | |
215 | """), | |
216 | { | |
217 | 'fe80::/64': { | |
218 | 'brx.0': {'fe80::a4cb:54ff:fecc:f2a2'}, | |
219 | 'ceph-brx': {'fe80::d8a1:69ff:fede:8f58'} | |
220 | } | |
221 | } | |
222 | ), | |
522d829b TL |
223 | ]) |
224 | def test_parse_ipv6_route(self, test_routes, test_ips, expected): | |
1e59de90 | 225 | assert _cephadm._parse_ipv6_route(test_routes, test_ips) == expected |
522d829b | 226 | |
1e59de90 | 227 | @mock.patch.object(_cephadm, 'call_throws', return_value=('10.4.0.1 dev tun0 proto kernel scope link src 10.4.0.2 metric 50\n', '', '')) |
522d829b TL |
228 | def test_command_list_networks(self, cephadm_fs, capsys): |
229 | with with_cephadm_ctx([]) as ctx: | |
1e59de90 | 230 | _cephadm.command_list_networks(ctx) |
522d829b | 231 | assert json.loads(capsys.readouterr().out) == { |
33c7a0ef | 232 | '10.4.0.1/32': {'tun0': ['10.4.0.2']} |
1e59de90 | 233 | } |