Merge "Logging multiple WMI job errors"

This commit is contained in:
Zuul 2018-11-22 13:55:54 +00:00 committed by Gerrit Code Review
commit 3bbe2e4a50
2 changed files with 30 additions and 5 deletions

21
os_win/tests/unit/utils/test_jobutils.py Normal file → Executable file
View File

@ -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)

View File

@ -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)