blob: bfe82d58f2404dfe1826a6092bfc4e4ead2924a0 [file] [log] [blame]
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +00001import pytest
2import json
Hanna Arhipova16e93fb2019-01-23 19:03:01 +02003import utils
Oleksii Zhurbae0668ae2017-10-27 23:58:18 +00004import os
Hanna Arhipova56eab942019-05-06 20:14:18 +03005import logging
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +00006
7
Oleksii Zhurba5b15b9b2019-05-09 18:53:40 -05008@pytest.mark.full
Oleksii Zhurbad0ae87f2018-03-26 13:36:25 -05009def test_mtu(local_salt_client, nodes_in_group):
Oleksii Zhurba3dbed242017-10-31 19:58:53 +000010 testname = os.path.basename(__file__).split('.')[0]
Oleksii Zhurbae0668ae2017-10-27 23:58:18 +000011 config = utils.get_configuration()
Oleksii Zhurba3dbed242017-10-31 19:58:53 +000012 skipped_ifaces = config.get(testname)["skipped_ifaces"] or \
Oleksii Zhurba4e667e52019-05-28 18:42:00 -050013 ["bonding_masters", "lo", "veth", "tap", "cali", "qv", "qb", "br-int",
14 "vxlan", "virbr0", "virbr0-nic", "docker0", "o-hm0"]
Dmitriy Kruglova34a3042019-08-20 11:45:35 +020015 group, nodes = nodes_in_group
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000016 total = {}
17 network_info = local_salt_client.cmd(
Dmitriy Kruglova34a3042019-08-20 11:45:35 +020018 tgt="L@"+','.join(nodes),
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050019 param='ls /sys/class/net/',
20 expr_form='compound')
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000021
Ekaterina Chernovae32e3f92019-11-12 14:56:03 +030022 if len(list(network_info.keys())) < 2:
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000023 pytest.skip("Nothing to compare - only 1 node")
24
Oleksii Zhurba4e667e52019-05-28 18:42:00 -050025 # collect all nodes and check if virsh is installed there
26 kvm_nodes = local_salt_client.cmd(
27 tgt='salt:control',
28 fun='pkg.version',
29 param='libvirt-clients',
30 expr_form='pillar'
31 )
32
Ekaterina Chernovae32e3f92019-11-12 14:56:03 +030033 for node, ifaces_info in network_info.items():
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050034 if isinstance(ifaces_info, bool):
Hanna Arhipova56eab942019-05-06 20:14:18 +030035 logging.info("{} node is skipped".format(node))
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050036 continue
Oleksii Zhurba4e667e52019-05-28 18:42:00 -050037 # if node is a kvm node and virsh is installed there
Ekaterina Chernovae32e3f92019-11-12 14:56:03 +030038 if node in list(kvm_nodes.keys()) and kvm_nodes[node]:
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050039 kvm_info = local_salt_client.cmd(tgt=node,
40 param="virsh list | "
41 "awk '{print $2}' | "
42 "xargs -n1 virsh domiflist | "
43 "grep -v br-pxe | grep br- | "
44 "awk '{print $1}'")
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000045 ifaces_info = kvm_info.get(node)
46 node_ifaces = ifaces_info.split('\n')
47 ifaces = {}
48 for iface in node_ifaces:
49 for skipped_iface in skipped_ifaces:
50 if skipped_iface in iface:
51 break
52 else:
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050053 iface_mtu = local_salt_client.cmd(tgt=node,
54 param='cat /sys/class/'
55 'net/{}/mtu'.format(iface))
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000056 ifaces[iface] = iface_mtu.get(node)
57 total[node] = ifaces
58
59 nodes = []
60 mtu_data = []
61 my_set = set()
62
63 for node in total:
64 nodes.append(node)
Ekaterina Chernovae32e3f92019-11-12 14:56:03 +030065 my_set.update(list(total[node].keys()))
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000066 for interf in my_set:
67 diff = []
68 row = []
69 for node in nodes:
Ekaterina Chernovae32e3f92019-11-12 14:56:03 +030070 if interf in list(total[node].keys()):
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000071 diff.append(total[node][interf])
72 row.append("{}: {}".format(node, total[node][interf]))
73 else:
Oleksii Zhurba4e667e52019-05-28 18:42:00 -050074 row.append("{}: No interface".format(node))
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000075 if diff.count(diff[0]) < len(nodes):
76 row.sort()
77 row.insert(0, interf)
78 mtu_data.append(row)
Dmitriy Kruglova34a3042019-08-20 11:45:35 +020079 assert len(mtu_data) == 0, (
80 "Non-uniform MTUs are set on the same node interfaces of '{}' group "
81 "of nodes: {}".format(group, json.dumps(mtu_data, indent=4))
82 )