def test_alert(self, conn_mock): ca_connection = MagicMock() response = MagicMock() response.status = 200 ca_connection.getresponse.return_value = response conn_mock.return_value = ca_connection response.read.return_value = '{"metrics":[{"metricname":"metric1","metrics":{"1459966360838":1,"1459966370838":3}}]}' # OK, but no datapoints above the minimum threshold [status, messages] = alert.execute(configurations=configs, parameters=parameters) self.assertEqual(status, RESULT_STATE_OK) self.assertTrue(messages is not None and len(messages) == 1) self.assertEquals( 'No datapoints found above the minimum threshold of 30 seconds', messages[0]) # Unable to calculate the standard deviation for 1 data point response.read.return_value = '{"metrics":[{"metricname":"metric1","metrics":{"1459966360838":40000}}]}' [status, messages] = alert.execute(configurations=configs, parameters=parameters) self.assertEqual(status, RESULT_STATE_SKIPPED) self.assertTrue(messages is not None and len(messages) == 1) self.assertEquals( 'Unable to calculate the standard deviation for 1 datapoints', messages[0]) # OK response.read.return_value = '{"metrics":[{"metricname":"metric1","metrics":{"1459966360838":40000,"1459966370838":50000}}]}' [status, messages] = alert.execute(configurations=configs, parameters=parameters) self.assertEqual(status, RESULT_STATE_OK) self.assertTrue(messages is not None and len(messages) == 1) self.assertTrue( 'OK. Percentage standard deviation value is' in messages[0]) # Warning response.read.return_value = '{"metrics":[{"metricname":"metric1","metrics":{"1459966360838":40000,"1459966370838":1000000}}]}' [status, messages] = alert.execute(configurations=configs, parameters=parameters) self.assertEqual(status, RESULT_STATE_WARNING) self.assertTrue(messages is not None and len(messages) == 1) self.assertTrue( 'WARNING. Percentage standard deviation' in messages[0]) # HTTP request to AMS failed response.read.return_value = '' response.status = 501 [status, messages] = alert.execute(configurations=configs, parameters=parameters) self.assertEqual(status, RESULT_STATE_UNKNOWN) self.assertTrue(messages is not None and len(messages) == 1) self.assertEquals('Unable to retrieve metrics from AMS.', messages[0])
def test_missing_configs(self): """ Check that the status is UNKNOWN when configs are missing. """ configs = {} [status, messages] = alert.execute(configurations=configs) self.assertEqual(status, RESULT_STATE_UNKNOWN) self.assertTrue(messages is not None and len(messages) == 1) self.assertTrue('is a required parameter for the script' in messages[0])
def make_alert_tests(self, configs, conn_mock, _host_name = None): connection = MagicMock() response = MagicMock() response.status = 200 connection.getresponse.return_value = response conn_mock.return_value = connection response.read.return_value = '{"metrics":[{"metricname":"metric1","metrics":{"1459966360838":1,"1459966370838":3}}]}' alert._get_state_from_jmx = dummy_get_state_from_jmx alert._get_ssl_version = dummy_get_ssl_version # OK, but no datapoints above the minimum threshold [status, messages] = alert.execute(configurations=configs, parameters=parameters, host_name=_host_name) self.assertEqual(status, RESULT_STATE_OK) self.assertTrue(messages is not None and len(messages) == 1) self.assertEquals('There were no data points above the minimum threshold of 30 seconds',messages[0]) # Unable to calculate the standard deviation for 1 data point response.read.return_value = '{"metrics":[{"metricname":"metric1","metrics":{"1459966360838":40000}}]}' [status, messages] = alert.execute(configurations=configs, parameters=parameters, host_name=_host_name) self.assertEqual(status, RESULT_STATE_SKIPPED) self.assertTrue(messages is not None and len(messages) == 1) self.assertEquals('There are not enough data points to calculate the standard deviation (1 sampled)', messages[0]) # OK response.read.return_value = '{"metrics":[{"metricname":"metric1","metrics":{"1459966360838":40000,"1459966370838":50000}}]}' [status, messages] = alert.execute(configurations=configs, parameters=parameters, host_name=_host_name) self.assertEqual(status, RESULT_STATE_OK) self.assertTrue(messages is not None and len(messages) == 1) self.assertEquals('The variance for this alert is 7071ms which is within 100% of the 45000ms average (45000ms is the limit)', messages[0]) # Warning response.read.return_value = '{"metrics":[{"metricname":"metric1","metrics":{"1459966360838":40000,"1459966370838":1000000}}]}' [status, messages] = alert.execute(configurations=configs, parameters=parameters, host_name=_host_name) self.assertEqual(status, RESULT_STATE_WARNING) self.assertTrue(messages is not None and len(messages) == 1) self.assertEquals('The variance for this alert is 678823ms which is 131% of the 520000ms average (520000ms is the limit)', messages[0]) # HTTP request to AMS failed response.read.return_value = '' response.status = 501 [status, messages] = alert.execute(configurations=configs, parameters=parameters, host_name=_host_name) self.assertEqual(status, RESULT_STATE_UNKNOWN) self.assertTrue(messages is not None and len(messages) == 1) self.assertEquals('Unable to retrieve metrics from the Ambari Metrics service.', messages[0]) # Unable to connect to AMS conn_mock.side_effect = Exception('Unable to connect to AMS') [status, messages] = alert.execute(configurations=configs, parameters=parameters, host_name=_host_name) self.assertEqual(status, RESULT_STATE_UNKNOWN) self.assertTrue(messages is not None and len(messages) == 1) self.assertEquals('Unable to retrieve metrics from the Ambari Metrics service.', messages[0])