def test_3par_bad_credential(self): # First inject 3par bad credential error filesToCopy = ["ErrorInjection.py"] response = sshClient.executeCommand( Config().devstackVM, Config().devstackSshUser, Config().devstackSshPassword, "python ErrorInjection.py --bad_3par_credential", filesToCopy) self.assertEqual("Error bad_3par_credential Injected Successfully \n", response[0])
def test_3par_bad_credential(self): # First inject 3par bad credential error filesToCopy = ["ErrorInjection.py"] response = sshClient.executeCommand(Config().devstackVM, Config().devstackSshUser, Config().devstackSshPassword, "python ErrorInjection.py --bad_3par_credential", filesToCopy) self.assertEqual("Error bad_3par_credential Injected Successfully \n",response[0])
def run_functional_testcase(self, metric_name, alarm_description, error_injection_name): # List metric by metric name metricFields = {"name": metric_name} metricFields["timestamp"] = int((time.time() * 1000)) isMetricAvailable = True response = self.call(self.monitoring_client.metrics.list, metricFields) if len(response) > 0: self.assertEquals(metric_name, response[0]["name"]) # self.assertEquals(error_description, response[0]['dimensions']['error']) else: isMetricAvailable = False # self.fail("No metric " + metric_name + " found " ) notification_name = metric_name notification_address = "root@localhost" notification_id = None notification = self.find_notification_by_name(notification_name) if notification is None: notification_id = self.create_notification(notification_name, notification_address) else: notification_id = notification["id"] alarm_name = metric_name expression = "%s > 0" % (metric_name) description = alarm_description severity = "HIGH" alarm_definations = self.find_alarm_defination_byname(alarm_name) alarm_definations_id = None if alarm_definations is None: alarm_definations_id = self.create_alarm_defination( alarm_name, description, expression, severity, notification_id, notification_id, notification_id ) else: alarm_definations_id = alarm_definations["id"] metric_start_time = time.time() metric_end_time = time.time() if (metric_end_time - metric_start_time) < 1: metric_end_time = metric_start_time + 1 fields = {"name": metric_name} fields["end_time"] = self.create_timestamp(metric_end_time) fields["start_time"] = self.create_timestamp(metric_start_time) fields["timestamp"] = int((time.time() * 1000)) fields["merge_metrics"] = "true" if isMetricAvailable: response = self.call(self.monitoring_client.metrics.list_measurements, fields) self.assertEquals(metric_name, response[0]["name"]) self.assertEquals({}, response[0]["dimensions"]) self.assertEquals([], response[0]["measurements"]) self.assertEquals(None, response[0]["id"]) # First inject 3par bad credential error filesToCopy = ["ErrorInjection.py"] response = sshClient.executeCommand( Config().devstackVM, Config().devstackSshUser, Config().devstackSshPassword, "python ErrorInjection.py --" + error_injection_name, filesToCopy, ) self.assertEqual("Error " + error_injection_name + " Injected Successfully \n", response[0]) if not isMetricAvailable: for i in range(0, 30): response = self.call(self.monitoring_client.metrics.list, metricFields) if len(response) > 0: self.assertEquals(metric_name, response[0]["name"]) isMetricAvailable = True break # self.assertEquals(error_description, response[0]['dimensions']['error']) if not isMetricAvailable: self.fail("No metric " + metric_name + " found ") # Add sleep if you are commenting the error injection # time.sleep(2) metric_end_time = time.time() fields = {"name": metric_name} fields["end_time"] = self.create_timestamp(metric_end_time) fields["start_time"] = self.create_timestamp(metric_start_time) fields["timestamp"] = int((time.time() * 1000)) fields["merge_metrics"] = "true" isMeasurementsFound = False isAlarmFound = False isStateChangeToAlarm = False for i in range(0, 30): response = self.call(self.monitoring_client.metrics.list_measurements, fields) if len(response[0]["measurements"]) == 1: isMeasurementsFound = True break time.sleep(2) for i in range(0, 60): response = self.find_alarm_by_definition_id(alarm_definations_id) if response is not None: isAlarmFound = True if response["state"] == "ALARM": isStateChangeToAlarm = True break time.sleep(3) if not isMeasurementsFound and not isStateChangeToAlarm: self.fail("No measurements found for " + metric_name) if not isAlarmFound: self.fail("No alarm found for " + metric_name) if not isStateChangeToAlarm: self.fail("No state change to ALARM for metric " + metric_name)
def run_functional_testcase(self, metric_name, alarm_description, error_injection_name): # List metric by metric name metricFields = {'name': metric_name} metricFields['timestamp'] = int((time.time() * 1000)) isMetricAvailable = True response = self.call(self.monitoring_client.metrics.list, metricFields) if len(response) > 0: self.assertEquals(metric_name, response[0]['name']) #self.assertEquals(error_description, response[0]['dimensions']['error']) else: isMetricAvailable = False # self.fail("No metric " + metric_name + " found " ) notification_name = metric_name notification_address = 'root@localhost' notification_id = None notification = self.find_notification_by_name(notification_name) if notification is None: notification_id = self.create_notification(notification_name, notification_address) else: notification_id = notification['id'] alarm_name = metric_name expression = '%s > 0' % (metric_name) description = alarm_description severity = 'HIGH' alarm_definations = self.find_alarm_defination_byname(alarm_name) alarm_definations_id = None if alarm_definations is None: alarm_definations_id = self.create_alarm_defination( alarm_name, description, expression, severity, notification_id, notification_id, notification_id) else: alarm_definations_id = alarm_definations['id'] metric_start_time = time.time() metric_end_time = time.time() if (metric_end_time - metric_start_time) < 1: metric_end_time = metric_start_time + 1 fields = {'name': metric_name} fields['end_time'] = self.create_timestamp(metric_end_time) fields['start_time'] = self.create_timestamp(metric_start_time) fields['timestamp'] = int((time.time() * 1000)) fields['merge_metrics'] = 'true' if isMetricAvailable: response = self.call( self.monitoring_client.metrics.list_measurements, fields) self.assertEquals(metric_name, response[0]['name']) self.assertEquals({}, response[0]['dimensions']) self.assertEquals([], response[0]['measurements']) self.assertEquals(None, response[0]['id']) # First inject 3par bad credential error filesToCopy = ["ErrorInjection.py"] response = sshClient.executeCommand( Config().devstackVM, Config().devstackSshUser, Config().devstackSshPassword, "python ErrorInjection.py --" + error_injection_name, filesToCopy) self.assertEqual( "Error " + error_injection_name + " Injected Successfully \n", response[0]) if not isMetricAvailable: for i in range(0, 30): response = self.call(self.monitoring_client.metrics.list, metricFields) if len(response) > 0: self.assertEquals(metric_name, response[0]['name']) isMetricAvailable = True break #self.assertEquals(error_description, response[0]['dimensions']['error']) if not isMetricAvailable: self.fail("No metric " + metric_name + " found ") # Add sleep if you are commenting the error injection #time.sleep(2) metric_end_time = time.time() fields = {'name': metric_name} fields['end_time'] = self.create_timestamp(metric_end_time) fields['start_time'] = self.create_timestamp(metric_start_time) fields['timestamp'] = int((time.time() * 1000)) fields['merge_metrics'] = 'true' isMeasurementsFound = False isAlarmFound = False isStateChangeToAlarm = False for i in range(0, 30): response = self.call( self.monitoring_client.metrics.list_measurements, fields) if len(response[0]['measurements']) == 1: isMeasurementsFound = True break time.sleep(2) for i in range(0, 60): response = self.find_alarm_by_definition_id(alarm_definations_id) if response is not None: isAlarmFound = True if response['state'] == 'ALARM': isStateChangeToAlarm = True break time.sleep(3) if not isMeasurementsFound and not isStateChangeToAlarm: self.fail("No measurements found for " + metric_name) if not isAlarmFound: self.fail("No alarm found for " + metric_name) if not isStateChangeToAlarm: self.fail("No state change to ALARM for metric " + metric_name)