blob: 097ab963e707ed3bc4258a60822594e4754eadaf [file] [log] [blame]
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +00001import pytest
2import json
Ievgeniia Zadorozhna6baf7872019-01-25 19:09:30 +03003import utils
Hanna Arhipova56eab942019-05-06 20:14:18 +03004import logging
Ievgeniia Zadorozhna6baf7872019-01-25 19:09:30 +03005
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +00006
Oleksii Zhurba5b15b9b2019-05-09 18:53:40 -05007@pytest.mark.full
Oleksii Zhurbad0ae87f2018-03-26 13:36:25 -05008def test_check_package_versions(local_salt_client, nodes_in_group):
Hanna Arhipova8fd295c2019-03-07 13:46:43 +02009 exclude_packages = utils.get_configuration().get("skipped_packages", [])
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050010 packages_versions = local_salt_client.cmd(tgt="L@"+','.join(nodes_in_group),
11 fun='lowpkg.list_pkgs',
12 expr_form='compound')
Oleksii Zhurbadad1acc2018-03-26 14:09:38 -050013 # Let's exclude cid01 and dbs01 nodes from this check
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050014 exclude_nodes = local_salt_client.test_ping(tgt="I@galera:master or I@gerrit:client",
15 expr_form='compound').keys()
Oleksii Zhurba599801a2019-06-04 17:26:51 -050016
17 # PROD-30833
18 gtw01 = local_salt_client.pillar_get(
19 param='_param:openstack_gateway_node01_hostname') or 'gtw01'
20 cluster_domain = local_salt_client.pillar_get(
21 param='_param:cluster_domain') or '.local'
22 gtw01 += '.' + cluster_domain
23 if gtw01 in nodes_in_group:
24 octavia = local_salt_client.cmd(tgt="L@" + ','.join(nodes_in_group),
25 fun='pillar.get',
26 param='octavia:manager:enabled',
27 expr_form='compound')
28 gtws = [gtw for gtw in octavia.values() if gtw]
29 if len(gtws) == 1:
30 exclude_nodes.append(gtw01)
31 logging.info("gtw01 node is skipped in test_check_package_versions")
32
Hanna Arhipova8fd295c2019-03-07 13:46:43 +020033 total_nodes = [i for i in packages_versions.keys() if i not in exclude_nodes]
Oleksii Zhurba5f768c52018-08-07 17:27:57 -050034 if len(total_nodes) < 2:
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000035 pytest.skip("Nothing to compare - only 1 node")
36
37 nodes = []
38 pkts_data = []
Hanna Arhipova8fd295c2019-03-07 13:46:43 +020039 packages_names = set()
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000040
Oleksii Zhurba5f768c52018-08-07 17:27:57 -050041 for node in total_nodes:
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050042 if not packages_versions[node]:
43 # TODO: do not skip node
Hanna Arhipova56eab942019-05-06 20:14:18 +030044 logging.warning("Node {} is skipped".format(node))
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050045 continue
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000046 nodes.append(node)
Hanna Arhipova8fd295c2019-03-07 13:46:43 +020047 packages_names.update(packages_versions[node].keys())
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000048
Hanna Arhipova8fd295c2019-03-07 13:46:43 +020049 for deb in packages_names:
50 if deb in exclude_packages:
51 continue
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000052 diff = []
53 row = []
54 for node in nodes:
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050055 if not packages_versions[node]:
56 continue
Hanna Arhipova8fd295c2019-03-07 13:46:43 +020057 if deb in packages_versions[node].keys():
58 diff.append(packages_versions[node][deb])
59 row.append("{}: {}".format(node, packages_versions[node][deb]))
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000060 else:
61 row.append("{}: No package".format(node))
62 if diff.count(diff[0]) < len(nodes):
63 row.sort()
64 row.insert(0, deb)
65 pkts_data.append(row)
66 assert len(pkts_data) <= 1, \
Oleksii Zhurbaa32d92f2018-03-29 16:22:35 -050067 "Several problems found: {0}".format(
Oleksii Zhurbad0ae87f2018-03-26 13:36:25 -050068 json.dumps(pkts_data, indent=4))
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000069
70
Oleksii Zhurba5b15b9b2019-05-09 18:53:40 -050071@pytest.mark.full
Ievgeniia Zadorozhna6baf7872019-01-25 19:09:30 +030072def test_packages_are_latest(local_salt_client, nodes_in_group):
73 config = utils.get_configuration()
74 skip = config.get("test_packages")["skip_test"]
75 if skip:
76 pytest.skip("Test for the latest packages is disabled")
77 skipped_pkg = config.get("test_packages")["skipped_packages"]
78 info_salt = local_salt_client.cmd(
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050079 tgt='L@' + ','.join(nodes_in_group),
80 param='apt list --upgradable 2>/dev/null | grep -v Listing',
Ievgeniia Zadorozhna6baf7872019-01-25 19:09:30 +030081 expr_form='compound')
82 for node in nodes_in_group:
83 result = []
84 if info_salt[node]:
85 upg_list = info_salt[node].split('\n')
86 for i in upg_list:
87 if i.split('/')[0] not in skipped_pkg:
88 result.append(i)
89 assert not result, "Please check not latest packages at {}:\n{}".format(
90 node, "\n".join(result))
91
92
Oleksii Zhurba5b15b9b2019-05-09 18:53:40 -050093@pytest.mark.full
Oleksii Zhurbad0ae87f2018-03-26 13:36:25 -050094def test_check_module_versions(local_salt_client, nodes_in_group):
Hanna Arhipova8fd295c2019-03-07 13:46:43 +020095 exclude_modules = utils.get_configuration().get("skipped_modules", [])
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +000096 pre_check = local_salt_client.cmd(
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -050097 tgt="L@"+','.join(nodes_in_group),
98 param='dpkg -l | grep "python-pip "',
Oleksii Zhurba5f768c52018-08-07 17:27:57 -050099 expr_form='compound')
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +0000100 if pre_check.values().count('') > 0:
101 pytest.skip("pip is not installed on one or more nodes")
Oleksii Zhurba5f768c52018-08-07 17:27:57 -0500102
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -0500103 exclude_nodes = local_salt_client.test_ping(tgt="I@galera:master or I@gerrit:client",
104 expr_form='compound').keys()
Oleksii Zhurba599801a2019-06-04 17:26:51 -0500105
106 # PROD-30833
107 gtw01 = local_salt_client.pillar_get(
108 param='_param:openstack_gateway_node01_hostname') or 'gtw01'
109 cluster_domain = local_salt_client.pillar_get(
110 param='_param:cluster_domain') or '.local'
111 gtw01 += '.' + cluster_domain
112 if gtw01 in nodes_in_group:
113 octavia = local_salt_client.cmd(tgt="L@" + ','.join(nodes_in_group),
114 fun='pillar.get',
115 param='octavia:manager:enabled',
116 expr_form='compound')
117 gtws = [gtw for gtw in octavia.values() if gtw]
118 if len(gtws) == 1:
119 exclude_nodes.append(gtw01)
120 logging.info("gtw01 node is skipped in test_check_module_versions")
121
Oleksii Zhurba5f768c52018-08-07 17:27:57 -0500122 total_nodes = [i for i in pre_check.keys() if i not in exclude_nodes]
123
124 if len(total_nodes) < 2:
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +0000125 pytest.skip("Nothing to compare - only 1 node")
Oleksii Zhurba4bfd2ee2019-04-10 21:56:58 -0500126 list_of_pip_packages = local_salt_client.cmd(tgt="L@"+','.join(nodes_in_group),
Oleksii Zhurba075cc7a2019-05-17 14:04:28 -0500127 fun='pip.freeze', expr_form='compound')
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +0000128
129 nodes = []
Oleksii Zhurbaa32d92f2018-03-29 16:22:35 -0500130
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +0000131 pkts_data = []
Hanna Arhipova8fd295c2019-03-07 13:46:43 +0200132 packages_names = set()
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +0000133
Oleksii Zhurba5f768c52018-08-07 17:27:57 -0500134 for node in total_nodes:
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +0000135 nodes.append(node)
Hanna Arhipova8fd295c2019-03-07 13:46:43 +0200136 packages_names.update([x.split("=")[0] for x in list_of_pip_packages[node]])
137 list_of_pip_packages[node] = dict([x.split("==") for x in list_of_pip_packages[node]])
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +0000138
Hanna Arhipova8fd295c2019-03-07 13:46:43 +0200139 for deb in packages_names:
140 if deb in exclude_modules:
141 continue
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +0000142 diff = []
143 row = []
144 for node in nodes:
Hanna Arhipova8fd295c2019-03-07 13:46:43 +0200145 if deb in list_of_pip_packages[node].keys():
146 diff.append(list_of_pip_packages[node][deb])
147 row.append("{}: {}".format(node, list_of_pip_packages[node][deb]))
Oleksii Zhurbaa10927b2017-09-27 22:09:23 +0000148 else:
149 row.append("{}: No module".format(node))
150 if diff.count(diff[0]) < len(nodes):
151 row.sort()
152 row.insert(0, deb)
153 pkts_data.append(row)
154 assert len(pkts_data) <= 1, \
Oleksii Zhurbaa32d92f2018-03-29 16:22:35 -0500155 "Several problems found: {0}".format(
Oleksii Zhurba599801a2019-06-04 17:26:51 -0500156 json.dumps(pkts_data, indent=4))
157