]> git.proxmox.com Git - ceph.git/blame - ceph/src/cephadm/tests/test_networks.py
update ceph source to reef 18.2.1
[ceph.git] / ceph / src / cephadm / tests / test_networks.py
CommitLineData
522d829b
TL
1import json
2from textwrap import dedent
3from unittest import mock
4
5import pytest
6
1e59de90 7from tests.fixtures import with_cephadm_ctx, cephadm_fs, import_cephadm
522d829b 8
1e59de90 9_cephadm = import_cephadm()
522d829b
TL
10
11
12class 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 }