コード例 #1
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])
コード例 #2
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]) 
コード例 #3
0
ファイル: base.py プロジェクト: hpe-storage/diags
    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)
コード例 #4
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)