blob: 6c1ccc9ddeb241ea39c7c0620514990ba110f087 [file] [log] [blame]
Hanna Arhipovae6ed8e42019-05-15 16:27:08 +03001import pytest
2import json
3import utils
4
5
6def test_check_package_versions(local_salt_client, nodes_in_group):
7 exclude_packages = utils.get_configuration().get("skipped_packages", [])
8 packages_versions = local_salt_client.cmd(tgt="L@"+','.join(nodes_in_group),
9 fun='lowpkg.list_pkgs',
10 expr_form='compound')
11 # Let's exclude cid01 and dbs01 nodes from this check
12 exclude_nodes = local_salt_client.test_ping(tgt="I@galera:master or I@gerrit:client",
13 expr_form='compound').keys()
14 total_nodes = [i for i in packages_versions.keys() if i not in exclude_nodes]
15 if len(total_nodes) < 2:
16 pytest.skip("Nothing to compare - only 1 node")
17
18 nodes = []
19 pkts_data = []
20 packages_names = set()
21
22 for node in total_nodes:
23 if not packages_versions[node]:
24 # TODO: do not skip node
25 print "Node {} is skipped".format (node)
26 continue
27 nodes.append(node)
28 packages_names.update(packages_versions[node].keys())
29
30 for deb in packages_names:
31 if deb in exclude_packages:
32 continue
33 diff = []
34 row = []
35 for node in nodes:
36 if not packages_versions[node]:
37 continue
38 if deb in packages_versions[node].keys():
39 diff.append(packages_versions[node][deb])
40 row.append("{}: {}".format(node, packages_versions[node][deb]))
41 else:
42 row.append("{}: No package".format(node))
43 if diff.count(diff[0]) < len(nodes):
44 row.sort()
45 row.insert(0, deb)
46 pkts_data.append(row)
47 assert len(pkts_data) <= 1, \
48 "Several problems found: {0}".format(
49 json.dumps(pkts_data, indent=4))
50
51
52def test_packages_are_latest(local_salt_client, nodes_in_group):
53 config = utils.get_configuration()
54 skip = config.get("test_packages")["skip_test"]
55 if skip:
56 pytest.skip("Test for the latest packages is disabled")
57 skipped_pkg = config.get("test_packages")["skipped_packages"]
58 info_salt = local_salt_client.cmd(
59 tgt='L@' + ','.join(nodes_in_group),
60 param='apt list --upgradable 2>/dev/null | grep -v Listing',
61 expr_form='compound')
62 for node in nodes_in_group:
63 result = []
64 if info_salt[node]:
65 upg_list = info_salt[node].split('\n')
66 for i in upg_list:
67 if i.split('/')[0] not in skipped_pkg:
68 result.append(i)
69 assert not result, "Please check not latest packages at {}:\n{}".format(
70 node, "\n".join(result))
71
72
73def test_check_module_versions(local_salt_client, nodes_in_group):
74 exclude_modules = utils.get_configuration().get("skipped_modules", [])
75 pre_check = local_salt_client.cmd(
76 tgt="L@"+','.join(nodes_in_group),
77 param='dpkg -l | grep "python-pip "',
78 expr_form='compound')
79 if pre_check.values().count('') > 0:
80 pytest.skip("pip is not installed on one or more nodes")
81
82 exclude_nodes = local_salt_client.test_ping(tgt="I@galera:master or I@gerrit:client",
83 expr_form='compound').keys()
84 total_nodes = [i for i in pre_check.keys() if i not in exclude_nodes]
85
86 if len(total_nodes) < 2:
87 pytest.skip("Nothing to compare - only 1 node")
88 list_of_pip_packages = local_salt_client.cmd(tgt="L@"+','.join(nodes_in_group),
89 param='pip.freeze', expr_form='compound')
90
91 nodes = []
92
93 pkts_data = []
94 packages_names = set()
95
96 for node in total_nodes:
97 nodes.append(node)
98 packages_names.update([x.split("=")[0] for x in list_of_pip_packages[node]])
99 list_of_pip_packages[node] = dict([x.split("==") for x in list_of_pip_packages[node]])
100
101 for deb in packages_names:
102 if deb in exclude_modules:
103 continue
104 diff = []
105 row = []
106 for node in nodes:
107 if deb in list_of_pip_packages[node].keys():
108 diff.append(list_of_pip_packages[node][deb])
109 row.append("{}: {}".format(node, list_of_pip_packages[node][deb]))
110 else:
111 row.append("{}: No module".format(node))
112 if diff.count(diff[0]) < len(nodes):
113 row.sort()
114 row.insert(0, deb)
115 pkts_data.append(row)
116 assert len(pkts_data) <= 1, \
117 "Several problems found: {0}".format(
118 json.dumps(pkts_data, indent=4))