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