def test_send_monasca_metrics(self, mock_config): """ Verify that when the flag enable_monasca is True, the metrics are delivered to Monasca Args: (patch) -- Path of the Mock of Kubernetes config Returns: None """ mock_config.return_value = None plugin = KubeJobProgress(self.app_id, self.info_plugin, self.collect_period, self.retries) plugin.rds = MockRedis() plugin.b_v1 = MockKube(plugin.app_id) plugin.datasource = MockMonascaConnector() plugin._publish_measurement(5000) self.assertEqual(len(plugin.datasource.metrics['time_progress']), 1) self.assertEqual(len(plugin.datasource.metrics['job_progress']), 1) self.assertEqual( len(plugin.datasource.metrics['application_progress_error']), 1) self.assertEqual(len(plugin.datasource.metrics['job_parallelism']), 1) plugin._publish_measurement(1000) self.assertEqual(len(plugin.datasource.metrics['time_progress']), 2) self.assertEqual(len(plugin.datasource.metrics['job_progress']), 2) self.assertEqual( len(plugin.datasource.metrics['application_progress_error']), 2) self.assertEqual(len(plugin.datasource.metrics['job_parallelism']), 2)
def __init__(self, app_id, info_plugin): KubeJobProgress.__init__(self, app_id, info_plugin, collect_period=2, retries=20) self.cluster_info_url = info_plugin.get('cluster_info_url') self.desired_cost = info_plugin.get('desired_cost') self.last_error = None self.last_rep = None self.last_cost = None self.LOG = Log(LOG_NAME, LOG_FILE) self.job_report = JobReport(info_plugin)
def test_get_elapsed_time(self, mock_config): """ Check that the elapsed time returned (in seconds) is equal that elapsed time given Args: (patch) -- Path of the Mock of Kubernetes config Returns: None """ mock_config.return_value = None plugin = KubeJobProgress(self.app_id, self.info_plugin, self.collect_period, self.retries) datetime_now = datetime.now() elapsed_time = datetime_now - plugin.submission_time self.assertEqual(elapsed_time.seconds, plugin._get_elapsed_time())
def test_init_kubejobs(self, mock_config): """ Test the KubeJobs Plugin constructor, checking if the plugin's attributes are equals that atributes given Args: (patch) -- Path of the Mock of Kubernetes config Returns: None """ mock_config.return_value = None plugin = KubeJobProgress(self.app_id, self.info_plugin, self.collect_period, self.retries) self.assertEqual(plugin.app_id, self.app_id) self.assertEqual(plugin.info_plugin, self.info_plugin) self.assertEqual(plugin.collect_period, self.collect_period) self.assertEqual(plugin.attempts, self.retries) plugin2 = KubeJobProgress(self.app_id, self.info_plugin) self.assertEqual(plugin2.app_id, self.app_id) self.assertEqual(plugin2.info_plugin, self.info_plugin) self.assertEqual(plugin2.collect_period, 2) self.assertEqual(plugin2.attempts, 10) self.assertFalse(plugin == plugin2)
def test_publish_measurement(self, mock_config): """ Verify that when a measurement is pubished, the metrics are delivered to Redis queue Args: (patch) -- Path of the Mock of Kubernetes config Returns: None """ mock_config.return_value = None plugin = KubeJobProgress(self.app_id, self.info_plugin, self.collect_period, self.retries) plugin.rds = MockRedis() plugin.b_v1 = MockKube(plugin.app_id) plugin.datasource = MockInfluxConnector() plugin._publish_measurement(500) self.assertTrue(plugin.rds.rpop(plugin.metric_queue) is not None) self.assertTrue(plugin.rds.rpop(plugin.metric_queue) is None) plugin._publish_measurement(600) self.assertTrue(plugin.rds.rpop(plugin.metric_queue) is not None) self.assertTrue(plugin.rds.rpop(plugin.metric_queue) is None)
def test_wrong_request_body(self): """ Asserts that a BadRequestException will occur if one of the parameters is missing Args: None Returns: None """ request_error_counter = len(self.info_plugin) for key in self.info_plugin: info_plugin_test = self.info_plugin.copy() del info_plugin_test[key] try: KubeJobProgress(self.app_id, info_plugin_test, self.collect_period, self.retries) except ex.BadRequestException: request_error_counter -= 1 self.assertEqual(request_error_counter, 0)
def test_get_num_replicas(self, mock_config): """ Verify that the number of replicas returned are equal that number of replicas initial Args: (patch) -- Path of the Mock of Kubernetes config Returns: None """ mock_config.return_value = None plugin = KubeJobProgress(self.app_id, self.info_plugin, self.collect_period, self.retries) plugin.b_v1 = MockKube(plugin.app_id) self.assertEqual(plugin._get_num_replicas(), 1) plugin.b_v1 = MockKube(plugin.app_id, 3) self.assertEqual(plugin._get_num_replicas(), 3)
def test_monitoring_application(self, mock_config): """ Check that the function monitoring_application returns the number of jobs minus the number of jobs that are be processing plus number of jobs to do Args: (patch) -- Path of the Mock of Kubernetes config Returns: None """ mock_config.return_value = None plugin = KubeJobProgress(self.app_id, self.info_plugin, self.collect_period, self.retries) plugin.rds = MockRedis() plugin.b_v1 = MockKube(plugin.app_id) plugin.datasource = MockInfluxConnector() for i in range(5): plugin.rds.rpush('job', 'job') for i in range(10): plugin.rds.rpush('job:processing', 'job') self.assertEqual(plugin.monitoring_application(), 1485)