예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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())
예제 #4
0
    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)
예제 #5
0
    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)
예제 #6
0
    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)
예제 #7
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)
예제 #8
0
    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)