diff --git a/fuel_health/tests/ha/test_mysql_status.py b/fuel_health/tests/ha/test_mysql_status.py index 0267d488..df21892c 100644 --- a/fuel_health/tests/ha/test_mysql_status.py +++ b/fuel_health/tests/ha/test_mysql_status.py @@ -159,6 +159,24 @@ class TestMysqlStatus(fuel_health.test.BaseTestCase): else: self.skipTest("There is no RHEL deployment") + @staticmethod + def get_variables_from_output(output, variables): + """Return dict with variables and their values extracted from mysql + Assume that output is "| Var_name | Value |" + """ + result = {} + LOG.debug('Expected variables: "{0}"'.format(str(variables))) + for line in output: + try: + var, value = line.strip("| ").split("|")[:2] + except ValueError: + continue + var = var.strip() + if var in variables: + result[var] = value.strip() + LOG.debug('Extracted values: "{0}"'.format(str(result))) + return result + def test_state_of_galera_cluster(self): """Check galera environment state Target Service: HA mysql @@ -173,40 +191,43 @@ class TestMysqlStatus(fuel_health.test.BaseTestCase): """ if 'CentOS' in self.config.compute.deployment_os: for controller in self.controllers: - command = "mysql -e \"SHOW STATUS LIKE 'wsrep_%'\"" - ssh_client = SSHClient(controller, self.controller_user, - key_filename=self.controller_key, - timeout=100) - output = self.verify( - 20, ssh_client.exec_command, 1, - "Verification of galera cluster node status failed", - 'get status from galera node', - command).splitlines()[3:-2] + command = "mysql -e \"SHOW STATUS LIKE 'wsrep_%'\"" + ssh_client = SSHClient(controller, self.controller_user, + key_filename=self.controller_key, + timeout=100) + output = self.verify( + 20, ssh_client.exec_command, 1, + "Verification of galera cluster node status failed", + 'get status from galera node', + command).splitlines() - LOG.debug('output is %s' % output) + LOG.debug('mysql output from node "{0}" is \n"{1}"'.format( + controller, output) + ) - result = {} - for i in output: - key, value = i.split('|')[0:-2] - result.update({key: value}) - return result + mysql_vars = [ + 'wsrep_cluster_size', + 'wsrep_ready', + 'wsrep_connected' + ] + result = self.get_variables_from_output(output, mysql_vars) - self.verify_response_body_content( - result.get('wsrep_cluster_size', 0), - str(len(self.controllers)), - msg='Cluster size on %s less ' - 'than controllers count' % controller, - failed_step='2') + self.verify_response_body_content( + result.get('wsrep_cluster_size', 0), + str(len(self.controllers)), + msg='Cluster size on %s less ' + 'than controllers count' % controller, + failed_step='2') - self.verify_response_body_content( - result.get(('wsrep_ready', 'OFF')), 'ON', - msg='wsrep_ready on %s is not ON' % controller, - failed_step='3') + self.verify_response_body_content( + result.get(('wsrep_ready', 'OFF')), 'ON', + msg='wsrep_ready on %s is not ON' % controller, + failed_step='3') - self.verify_response_body_content( - result.get(('wsrep_connected', 'OFF')), 'ON', - msg='wsrep_connected on %s is not ON' % controller, - failed_step='3') + self.verify_response_body_content( + result.get(('wsrep_connected', 'OFF')), 'ON', + msg='wsrep_connected on %s is not ON' % controller, + failed_step='3') else: self.skipTest('There is no CentOs deployment') @@ -225,39 +246,42 @@ class TestMysqlStatus(fuel_health.test.BaseTestCase): """ if 'Ubuntu' in self.config.compute.deployment_os: for controller in self.controllers: - command = "mysql -e \"SHOW STATUS LIKE 'wsrep_%'\"" - ssh_client = SSHClient(controller, self.controller_user, - key_filename=self.controller_key, - timeout=100) - output = self.verify( - 20, ssh_client.exec_command, 1, - "Verification of galera cluster node status failed", - 'get status from galera node', - command).splitlines()[3:-2] + command = "mysql -e \"SHOW STATUS LIKE 'wsrep_%'\"" + ssh_client = SSHClient(controller, self.controller_user, + key_filename=self.controller_key, + timeout=100) + output = self.verify( + 20, ssh_client.exec_command, 1, + "Verification of galera cluster node status failed", + 'get status from galera node', + command).splitlines() - LOG.debug('output is %s' % output) + LOG.debug('mysql output from node "{0}" is \n"{1}"'.format( + controller, output) + ) - result = {} - for i in output: - key, value = i.split('|')[0:-2] - result.update({key: value}) - return result + mysql_vars = [ + 'wsrep_cluster_size', + 'wsrep_ready', + 'wsrep_connected' + ] + result = self.get_variables_from_output(output, mysql_vars) - self.verify_response_body_content( - result.get('wsrep_cluster_size', 0), - str(len(self.controllers)), - msg='Cluster size on %s less ' - 'than controllers count' % controller, - failed_step='2') + self.verify_response_body_content( + result.get('wsrep_cluster_size', 0), + str(len(self.controllers)), + msg='Cluster size on %s less ' + 'than controllers count' % controller, + failed_step='2') - self.verify_response_body_content( - result.get(('wsrep_ready', 'OFF')), 'ON', - msg='wsrep_ready on %s is not ON' % controller, - failed_step='3') + self.verify_response_body_content( + result.get('wsrep_ready', 'OFF'), 'ON', + msg='wsrep_ready on %s is not ON' % controller, + failed_step='3') - self.verify_response_body_content( - result.get(('wsrep_connected', 'OFF')), 'ON', - msg='wsrep_connected on %s is not ON' % controller, - failed_step='3') + self.verify_response_body_content( + result.get('wsrep_connected', 'OFF'), 'ON', + msg='wsrep_connected on %s is not ON' % controller, + failed_step='3') else: self.skipTest('There is no Ubuntu deployment')