diff options
author | Arun Kumar <arukumar@redhat.com> | 2020-09-09 17:04:45 +0530 |
---|---|---|
committer | Vaibhav Mahajan <vamahaja@redhat.com> | 2020-09-28 16:50:33 +0000 |
commit | 4c8f312a8258818ed77d09a0f74aee35d1189290 (patch) | |
tree | 58f6443984160fe8f83a089797ecd476c9880308 /tests/functional | |
parent | 5c38cc25d9f302f7717d9e3fe485096cb3d2871f (diff) |
[Test] Add TC to perform post deployment validations of prometheus
Change-Id: I026f2aa944aaa6b338c45c54ac4504ecb854f00c
Signed-off-by: Arun Kumar <arukumar@redhat.com>
Diffstat (limited to 'tests/functional')
-rw-r--r-- | tests/functional/prometheous/__init__.py | 0 | ||||
-rw-r--r-- | tests/functional/prometheous/test_prometheus_validations.py | 116 |
2 files changed, 116 insertions, 0 deletions
diff --git a/tests/functional/prometheous/__init__.py b/tests/functional/prometheous/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/functional/prometheous/__init__.py diff --git a/tests/functional/prometheous/test_prometheus_validations.py b/tests/functional/prometheous/test_prometheus_validations.py new file mode 100644 index 00000000..6b296b5e --- /dev/null +++ b/tests/functional/prometheous/test_prometheus_validations.py @@ -0,0 +1,116 @@ +try: + # py2/3 + import simplejson as json +except ImportError: + # py2 + import json +from pkg_resources import parse_version + +from glusto.core import Glusto as g +import pytest + +from openshiftstoragelibs.baseclass import GlusterBlockBaseClass +from openshiftstoragelibs import command +from openshiftstoragelibs import exceptions +from openshiftstoragelibs import openshift_ops + + +class TestPrometheusAndGlusterRegistryValidation(GlusterBlockBaseClass): + + def setUp(self): + """Initialize all the variables which are necessary for test cases""" + super(TestPrometheusAndGlusterRegistryValidation, self).setUp() + + try: + prometheus_config = g.config['openshift']['prometheus'] + self._prometheus_project_name = prometheus_config[ + 'prometheus_project_name'] + self._prometheus_resources_selector = prometheus_config[ + 'prometheus_resources_selector'] + self._alertmanager_resources_selector = prometheus_config[ + 'alertmanager_resources_selector'] + self._registry_heketi_server_url = ( + g.config['openshift']['registry_heketi_config'][ + 'heketi_server_url']) + self._registry_project_name = ( + g.config['openshift']['registry_project_name']) + except KeyError as err: + self.skipTest("Config file doesn't have key {}".format(err)) + + # Skip the test if iscsi-initiator-utils version is not the expected + cmd = ("rpm -q iscsi-initiator-utils " + "--queryformat '%{version}-%{release}\n'" + "| cut -d '.' -f 1,2,3,4") + e_pkg_version = "6.2.0.874-17" + for g_server in self.gluster_servers: + out = self.cmd_run(cmd, g_server) + if parse_version(out) < parse_version(e_pkg_version): + self.skipTest( + "Skip the test as iscsi-initiator-utils package version {}" + "is less than version {} found on the node {}, for more " + "info refer to BZ-1624670".format( + out, e_pkg_version, g_server)) + + self._master = self.ocp_master_node[0] + + # Switch to namespace conatining prometheus pods + cmd = "oc project --short=true" + current_project = command.cmd_run(cmd, self._master) + openshift_ops.switch_oc_project( + self._master, self._prometheus_project_name) + self.addCleanup( + openshift_ops.switch_oc_project, self._master, current_project) + + def _fetch_metric_from_promtheus_pod(self, metric): + """Fetch metric from prometheus pod using api call""" + prometheus_pods = list(openshift_ops.oc_get_pods( + self._master, selector=self._prometheus_resources_selector).keys()) + fetch_metric_cmd = ("curl 'http://localhost:9090/api/v1/query" + "?query={}'".format(metric)) + ret, metric_data, _ = openshift_ops.oc_rsh( + self._master, prometheus_pods[0], fetch_metric_cmd) + metric_result = json.loads(metric_data)["data"]["result"] + if (not metric_result) or ret: + raise exceptions.ExecutionError( + "Failed to fecth data for metric {}, output {}".format( + metric, metric_result)) + return metric_result + + def _get_pod_names_and_pvc_names(self): + # Get pod names and PVC names + pod_custom = ".:metadata.name" + pvc_custom = ":.spec.volumes[*].persistentVolumeClaim.claimName" + pvc_names, pod_names = [], [] + for selector in (self._prometheus_resources_selector, + self._alertmanager_resources_selector): + pods = openshift_ops.oc_get_custom_resource( + self._master, "pod", pod_custom, selector=selector) + pod_names.extend(pods) + for pod_name in pods: + pvc_name = openshift_ops.oc_get_custom_resource( + self._master, "pod", pvc_custom, pod_name[0])[0] + pvc_names.append(pvc_name) + + return pod_names, pvc_names + + @pytest.mark.tier2 + def test_promethoues_pods_and_pvcs(self): + """Validate prometheus pods and PVC""" + # Wait for PVCs to be bound + pod_names, pvc_names = self._get_pod_names_and_pvc_names() + openshift_ops.wait_for_pvcs_be_bound(self._master, pvc_names) + + # Validate that there should be no or zero pods in non-running state + field_selector, pod_count = "status.phase!=Running", 0 + openshift_ops.wait_for_pods_be_ready( + self._master, pod_count, field_selector=field_selector) + + # Validate iscsi and multipath + for (pvc_name, pod_name) in zip(pvc_names, pod_names): + self.verify_iscsi_sessions_and_multipath( + pvc_name, pod_name[0], rtype='pod', + heketi_server_url=self._registry_heketi_server_url, + is_registry_gluster=True) + + # Try to fetch metric from prometheus pod + self._fetch_metric_from_promtheus_pod(metric='kube_node_info') |