diff --git a/os_win/tests/unit/utils/test_jobutils.py b/os_win/tests/unit/utils/test_jobutils.py old mode 100644 new mode 100755 index 394a62b1..ce51dc9d --- a/os_win/tests/unit/utils/test_jobutils.py +++ b/os_win/tests/unit/utils/test_jobutils.py @@ -82,15 +82,32 @@ class JobUtilsTestCase(test_base.OsWinBaseTestCase): {"extended": True, "expected_fields": ["InstanceID", "DetailedStatus"]}) @ddt.unpack - def test_get_job_details(self, expected_fields, extended): + @mock.patch.object(jobutils.JobUtils, '_get_job_error_details') + def test_get_job_details(self, mock_get_job_err, expected_fields, + extended): mock_job = mock.Mock() - details = self.jobutils._get_job_details(mock_job, extended=extended) + if extended: + mock_get_job_err.assert_called_once_with(mock_job) + self.assertEqual(details['RawErrors'], + mock_get_job_err.return_value) + for field in expected_fields: self.assertEqual(getattr(mock_job, field), details[field]) + def test_get_job_error_details(self): + mock_job = mock.Mock() + error_details = self.jobutils._get_job_error_details(mock_job) + mock_job.GetErrorEx.assert_called_once_with() + self.assertEqual(mock_job.GetErrorEx.return_value, error_details) + + def test_get_job_error_details_exception(self): + mock_job = mock.Mock() + mock_job.GetErrorEx.side_effect = Exception + self.assertIsNone(self.jobutils._get_job_error_details(mock_job)) + def test_get_pending_jobs(self): mock_killed_job = mock.Mock(JobState=constants.JOB_STATE_KILLED) mock_running_job = mock.Mock(JobState=constants.WMI_JOB_STATE_RUNNING) diff --git a/os_win/utils/jobutils.py b/os_win/utils/jobutils.py index 12355cd9..1087df69 100644 --- a/os_win/utils/jobutils.py +++ b/os_win/utils/jobutils.py @@ -126,8 +126,13 @@ class JobUtils(baseutils.BaseUtilsVirt): return job - @staticmethod - def _get_job_details(job, extended=False): + def _get_job_error_details(self, job): + try: + return job.GetErrorEx() + except Exception: + LOG.error("Could not get job '%s' error details.", job.InstanceID) + + def _get_job_details(self, job, extended=False): basic_details = [ "InstanceID", "Description", "ElementName", "JobStatus", "ElapsedTime", "Cancellable", "JobType", "Owner", @@ -139,10 +144,13 @@ class JobUtils(baseutils.BaseUtilsVirt): "ErrorCode", "ErrorDescription", "ErrorSummaryDescription"] fields = list(basic_details) + details = {} + if extended: fields += extended_details + err_details = self._get_job_error_details(job) + details['RawErrors'] = err_details - details = {} for field in fields: try: details[field] = getattr(job, field)