blob: 8d76cef5a2e6820c67f7360fa388c821213c08ee [file] [log] [blame]
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +00001import pytest
2import json
3from cvp_checks import utils
Oleksii Zhurbae0668ae2017-10-27 23:58:18 +00004import os
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +00005
6
7@pytest.mark.parametrize(
8 "group",
Oleksii Zhurbae0668ae2017-10-27 23:58:18 +00009 utils.get_groups(os.path.basename(__file__))
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000010)
11def test_mtu(local_salt_client, group):
Oleksii Zhurba3dbed242017-10-31 19:58:53 +000012 testname = os.path.basename(__file__).split('.')[0]
Oleksii Zhurbae0668ae2017-10-27 23:58:18 +000013 if "skipped" in group:
14 pytest.skip("skipped in config")
15 config = utils.get_configuration()
Oleksii Zhurba3dbed242017-10-31 19:58:53 +000016 skipped_ifaces = config.get(testname)["skipped_ifaces"] or \
17 ["bonding_masters", "lo", "veth", "tap", "cali"]
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000018 total = {}
19 network_info = local_salt_client.cmd(
20 group, 'cmd.run', ['ls /sys/class/net/'], expr_form='pcre')
21
22 kvm_nodes = local_salt_client.cmd(
23 'salt:control', 'test.ping', expr_form='pillar').keys()
24
25 if len(network_info.keys()) < 2:
26 pytest.skip("Nothing to compare - only 1 node")
27
28 for node, ifaces_info in network_info.iteritems():
29 if node in kvm_nodes:
30 kvm_info = local_salt_client.cmd(node, 'cmd.run',
31 ["virsh list | "
32 "awk '{print $2}' | "
33 "xargs -n1 virsh domiflist | "
34 "grep -v br-pxe | grep br- | "
35 "awk '{print $1}'"])
36 ifaces_info = kvm_info.get(node)
37 node_ifaces = ifaces_info.split('\n')
38 ifaces = {}
39 for iface in node_ifaces:
40 for skipped_iface in skipped_ifaces:
41 if skipped_iface in iface:
42 break
43 else:
44 iface_mtu = local_salt_client.cmd(node, 'cmd.run',
45 ['cat /sys/class/'
46 'net/{}/mtu'.format(iface)])
47 ifaces[iface] = iface_mtu.get(node)
48 total[node] = ifaces
49
50 nodes = []
51 mtu_data = []
52 my_set = set()
53
54 for node in total:
55 nodes.append(node)
56 my_set.update(total[node].keys())
57 for interf in my_set:
58 diff = []
59 row = []
60 for node in nodes:
61 if interf in total[node].keys():
62 diff.append(total[node][interf])
63 row.append("{}: {}".format(node, total[node][interf]))
64 else:
65 row.append("{}: No interface".format(node))
66 if diff.count(diff[0]) < len(nodes):
67 row.sort()
68 row.insert(0, interf)
69 mtu_data.append(row)
70 assert len(mtu_data) == 0, \
71 "Several problems found for {0} group: {1}".format(
72 group, json.dumps(mtu_data, indent=4))