Example #1
0
    def test_run(self, mock_cluster_api):
        watcher = JobWatcher(config=Mock())
        watcher.run()

        wait_for_job_events = mock_cluster_api.return_value.wait_for_job_events
        wait_for_job_events.assert_called_with(
            watcher.on_job_change,
            label_selector='bespin-job=true')
Example #2
0
    def test_on_job_succeeded_record_output(self, mock_cluster_api):
        watcher = JobWatcher(config=Mock())
        watcher.lando_client = Mock()

        watcher.on_job_succeeded('31', JobStepTypes.RECORD_OUTPUT_PROJECT)
        watcher.lando_client.job_step_store_output_complete.assert_not_called()
        payload = watcher.lando_client.job_step_complete.call_args[0][0]
        self.assertEqual(payload.job_id, '31')
        self.assertEqual(payload.success_command, JobCommands.RECORD_OUTPUT_PROJECT_COMPLETE)
Example #3
0
 def test_get_cluster_api(self):
     mock_config = Mock()
     mock_config.cluster_api_settings.token = 'Secret123'
     cluster_api = JobWatcher.get_cluster_api(mock_config)
     configuration = cluster_api.api_client.configuration
     self.assertEqual(configuration.host, mock_config.cluster_api_settings.host)
     self.assertEqual(configuration.api_key, {"authorization": "Bearer Secret123"})
     self.assertEqual(configuration.verify_ssl, mock_config.cluster_api_settings.verify_ssl)
     self.assertEqual(configuration.ssl_ca_cert, mock_config.cluster_api_settings.ssl_ca_cert)
Example #4
0
    def test_on_job_failed_reading_logs_failed(self, mock_logging, mock_cluster_api):
            mock_cluster_api.return_value.read_job_logs.side_effect = ApiException(status=404, reason='Logs not found')
            watcher = JobWatcher(config=Mock())
            watcher.get_most_recent_pod_for_job = Mock()
            watcher.get_most_recent_pod_for_job.return_value = Mock()
            watcher.lando_client = Mock()

            watcher.on_job_failed('myjob', '31', JobStepTypes.STAGE_DATA)
            payload = watcher.lando_client.job_step_error.call_args[0][0]
            message = watcher.lando_client.job_step_error.call_args[0][1]
            self.assertEqual(payload.job_id, '31')
            self.assertEqual(payload.error_command, JobCommands.STAGE_JOB_ERROR)
            self.assertEqual(message, 'Unable to read logs.')
            mock_logging.error.assert_called_with('Unable to read logs (404)\nReason: Logs not found\n')
Example #5
0
    def test_on_job_change_with_complete_job(self, mock_cluster_api):
        watcher = JobWatcher(config=Mock())
        watcher.on_job_succeeded = Mock()
        watcher.on_job_failed = Mock()
        job = Mock()
        job.metadata.name = 'job1'
        job.metadata.labels = {
            JobLabels.JOB_ID: '32',
            JobLabels.STEP_TYPE: JobStepTypes.STAGE_DATA,
        }
        job.status.conditions = [Mock(type=JobConditionType.COMPLETE, status="True")]
        watcher.on_job_change({
            'type': EventTypes.MODIFIED,
            'object': job
        })

        watcher.on_job_succeeded.assert_called_with('32', 'stage_data')
        watcher.on_job_failed.assert_not_called()
Example #6
0
    def test_on_job_change_missing_labels(self, mock_cluster_api):
        watcher = JobWatcher(config=Mock())
        watcher.on_job_succeeded = Mock()
        watcher.on_job_failed = Mock()
        job = Mock()
        job.metadata.name = 'job1'
        job.metadata.labels = {}
        job.status.conditions = [
            Mock(type=JobConditionType.COMPLETE, status="True"),
            Mock(type=JobConditionType.FAILED, status="True"),
        ]
        watcher.on_job_change({
            'type': EventTypes.ADDED,
            'object': job
        })

        watcher.on_job_succeeded.assert_not_called()
        watcher.on_job_failed.assert_not_called()
Example #7
0
    def test_on_job_change_with_ignored_conditions(self, mock_cluster_api):
        watcher = JobWatcher(config=Mock())
        watcher.on_job_succeeded = Mock()
        watcher.on_job_failed = Mock()
        job = Mock()
        job.metadata.name = 'job1'
        job.metadata.labels = {
            JobLabels.JOB_ID: '32',
            JobLabels.STEP_TYPE: JobStepTypes.STAGE_DATA,
        }
        job.status.conditions = [
            Mock(type=JobConditionType.COMPLETE, status="False"),
            Mock(type=JobConditionType.FAILED, status="False"),
            Mock(type="other", status="True"),
        ]
        watcher.on_job_change({
            'type': EventTypes.ADDED,
            'object': job
        })

        watcher.on_job_succeeded.assert_not_called()
        watcher.on_job_failed.assert_not_called()
Example #8
0
    def test_on_job_failed(self, mock_cluster_api):
        mock_cluster_api.return_value.read_job_logs.return_value = "Error details"
        watcher = JobWatcher(config=Mock())
        watcher.lando_client = Mock()

        watcher.on_job_failed('myjob', '31', JobStepTypes.STAGE_DATA)
        mock_cluster_api.return_value.read_job_logs.assert_called_with('myjob')
        payload = watcher.lando_client.job_step_error.call_args[0][0]
        message = watcher.lando_client.job_step_error.call_args[0][1]
        self.assertEqual(payload.job_id, '31')
        self.assertEqual(payload.error_command, JobCommands.STAGE_JOB_ERROR)
        self.assertEqual(message, 'Error details')

        watcher.lando_client.job_step_complete.reset_mock()

        watcher.on_job_failed('myjob', '31', JobStepTypes.RUN_WORKFLOW)
        payload = watcher.lando_client.job_step_error.call_args[0][0]
        message = watcher.lando_client.job_step_error.call_args[0][1]
        self.assertEqual(payload.job_id, '31')
        self.assertEqual(payload.error_command, JobCommands.RUN_JOB_ERROR)
        self.assertEqual(message, 'Error details')

        watcher.lando_client.job_step_complete.reset_mock()

        watcher.on_job_failed('myjob', '31', JobStepTypes.ORGANIZE_OUTPUT)
        payload = watcher.lando_client.job_step_error.call_args[0][0]
        message = watcher.lando_client.job_step_error.call_args[0][1]
        self.assertEqual(payload.job_id, '31')
        self.assertEqual(payload.error_command, JobCommands.ORGANIZE_OUTPUT_ERROR)
        self.assertEqual(message, 'Error details')

        watcher.lando_client.job_step_complete.reset_mock()

        watcher.on_job_failed('myjob', '31', JobStepTypes.SAVE_OUTPUT)
        payload = watcher.lando_client.job_step_error.call_args[0][0]
        message = watcher.lando_client.job_step_error.call_args[0][1]
        self.assertEqual(payload.job_id, '31')
        self.assertEqual(payload.error_command, JobCommands.STORE_JOB_OUTPUT_ERROR)
        self.assertEqual(message, 'Error details')
Example #9
0
    def test_on_job_succeeded(self, mock_cluster_api):
        watcher = JobWatcher(config=Mock())
        watcher.lando_client = Mock()

        watcher.on_job_succeeded('31', JobStepTypes.STAGE_DATA)
        watcher.lando_client.job_step_store_output_complete.assert_not_called()
        payload = watcher.lando_client.job_step_complete.call_args[0][0]
        self.assertEqual(payload.job_id, '31')
        self.assertEqual(payload.success_command, JobCommands.STAGE_JOB_COMPLETE)

        watcher.lando_client.job_step_complete.reset_mock()

        watcher.on_job_succeeded('31', JobStepTypes.RUN_WORKFLOW)
        watcher.lando_client.job_step_store_output_complete.assert_not_called()
        payload = watcher.lando_client.job_step_complete.call_args[0][0]
        self.assertEqual(payload.job_id, '31')
        self.assertEqual(payload.success_command, JobCommands.RUN_JOB_COMPLETE)

        watcher.lando_client.job_step_complete.reset_mock()

        watcher.on_job_succeeded('31', JobStepTypes.ORGANIZE_OUTPUT)
        watcher.lando_client.job_step_store_output_complete.assert_not_called()
        payload = watcher.lando_client.job_step_complete.call_args[0][0]
        self.assertEqual(payload.job_id, '31')
        self.assertEqual(payload.success_command, JobCommands.ORGANIZE_OUTPUT_COMPLETE)

        watcher.lando_client.job_step_complete.reset_mock()

        watcher.on_job_succeeded('31', JobStepTypes.SAVE_OUTPUT)
        watcher.lando_client.job_step_complete.assert_not_called()
        payload = watcher.lando_client.job_step_store_output_complete.call_args[0][0]
        self.assertEqual(payload.job_id, '31')
        self.assertEqual(payload.success_command, JobCommands.STORE_JOB_OUTPUT_COMPLETE)