Format list to str for get_reason message or skip
If the message in the validation log is a list, this patch format it to a string, as expected, otherwise, if the message another type, we just skip and move to default reason: Unknown Change-Id: I7d434408ab0af67967e9c1407a8e286daee51769
This commit is contained in:
parent
9a2bcee59f
commit
ac2b6b7b7e
@ -131,6 +131,70 @@ FAILED_VALIDATIONS_LOGS_CONTENTS_LIST = [{
|
|||||||
]
|
]
|
||||||
}]
|
}]
|
||||||
|
|
||||||
|
FAILED_VALIDATIONS_LOGS_WRONG_MSG_LIST = [{
|
||||||
|
'stats': {
|
||||||
|
'undercloud': {
|
||||||
|
'changed': 0,
|
||||||
|
'failures': 1,
|
||||||
|
'ignored': 0,
|
||||||
|
'ok': 0,
|
||||||
|
'rescued': 0,
|
||||||
|
'skipped': 0,
|
||||||
|
'unreachable': 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'validation_output': [
|
||||||
|
{
|
||||||
|
"task": {
|
||||||
|
"hosts": {
|
||||||
|
"localhost": {
|
||||||
|
"_ansible_no_log": False,
|
||||||
|
"action": "fail",
|
||||||
|
"changed": False,
|
||||||
|
"failed": True,
|
||||||
|
"failed_when_result": True,
|
||||||
|
"msg": ["Fake", "Failed"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name": "Verify Fake requirements",
|
||||||
|
"status": "FAILED"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
|
||||||
|
FAILED_VALIDATIONS_LOGS_WRONG_MSG_TYPE = [{
|
||||||
|
'stats': {
|
||||||
|
'undercloud': {
|
||||||
|
'changed': 0,
|
||||||
|
'failures': 1,
|
||||||
|
'ignored': 0,
|
||||||
|
'ok': 0,
|
||||||
|
'rescued': 0,
|
||||||
|
'skipped': 0,
|
||||||
|
'unreachable': 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'validation_output': [
|
||||||
|
{
|
||||||
|
"task": {
|
||||||
|
"hosts": {
|
||||||
|
"localhost": {
|
||||||
|
"_ansible_no_log": False,
|
||||||
|
"action": "fail",
|
||||||
|
"changed": False,
|
||||||
|
"failed": True,
|
||||||
|
"failed_when_result": True,
|
||||||
|
"msg": True
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"name": "Verify Fake requirements",
|
||||||
|
"status": "FAILED"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}]
|
||||||
|
|
||||||
VALIDATIONS_LOGS_CONTENTS_LIST = [{
|
VALIDATIONS_LOGS_CONTENTS_LIST = [{
|
||||||
'plays': [{
|
'plays': [{
|
||||||
'play': {
|
'play': {
|
||||||
|
@ -309,3 +309,35 @@ class TestValidationLog(TestCase):
|
|||||||
[
|
[
|
||||||
fakes.VALIDATIONS_LOGS_CONTENTS_LIST[0]
|
fakes.VALIDATIONS_LOGS_CONTENTS_LIST[0]
|
||||||
['validation_output'][0]['task']])
|
['validation_output'][0]['task']])
|
||||||
|
|
||||||
|
@mock.patch('json.load',
|
||||||
|
return_value=fakes.FAILED_VALIDATIONS_LOGS_CONTENTS_LIST[0])
|
||||||
|
@mock.patch('builtins.open')
|
||||||
|
def test_get_reason(self, mock_open, mock_json):
|
||||||
|
val = ValidationLog(
|
||||||
|
logfile='/tmp/123_foo_2020-03-30T13:17:22.447857Z.json')
|
||||||
|
get_reason = val.get_reason
|
||||||
|
fake_reason = 'localhost: {}\n'.format(
|
||||||
|
fakes.FAILED_VALIDATIONS_LOGS_CONTENTS_LIST[0]
|
||||||
|
['validation_output'][0]['task']['hosts']['localhost']['msg'])
|
||||||
|
self.assertEqual(get_reason, fake_reason)
|
||||||
|
|
||||||
|
@mock.patch('json.load',
|
||||||
|
return_value=fakes.FAILED_VALIDATIONS_LOGS_WRONG_MSG_LIST[0])
|
||||||
|
@mock.patch('builtins.open')
|
||||||
|
def test_get_reason_list_wrong_msg(self, mock_open, mock_json):
|
||||||
|
val = ValidationLog(
|
||||||
|
logfile='/tmp/123_foo_2020-03-30T13:17:22.447857Z.json')
|
||||||
|
get_reason = val.get_reason
|
||||||
|
fake_reason = 'localhost: FakeFailed\n'
|
||||||
|
self.assertEqual(get_reason, fake_reason)
|
||||||
|
|
||||||
|
@mock.patch('json.load',
|
||||||
|
return_value=fakes.FAILED_VALIDATIONS_LOGS_WRONG_MSG_TYPE[0])
|
||||||
|
@mock.patch('builtins.open')
|
||||||
|
def test_get_reason_list_wrong_type(self, mock_open, mock_json):
|
||||||
|
val = ValidationLog(
|
||||||
|
logfile='/tmp/123_foo_2020-03-30T13:17:22.447857Z.json')
|
||||||
|
get_reason = val.get_reason
|
||||||
|
fake_reason = 'Unknown'
|
||||||
|
self.assertEqual(get_reason, fake_reason)
|
||||||
|
@ -299,8 +299,14 @@ class ValidationLog:
|
|||||||
for h in v_output['task']['hosts']:
|
for h in v_output['task']['hosts']:
|
||||||
msg = v_output['task']['hosts'][h].get('msg',
|
msg = v_output['task']['hosts'][h].get('msg',
|
||||||
'Unknown')
|
'Unknown')
|
||||||
|
if isinstance(msg, list):
|
||||||
|
msg = ''.join(msg)
|
||||||
|
try:
|
||||||
msg = msg[:50] + '\n' + msg[50:]
|
msg = msg[:50] + '\n' + msg[50:]
|
||||||
reason.append('{}: {}'.format(h, msg))
|
reason.append('{}: {}'.format(h, msg))
|
||||||
|
except TypeError:
|
||||||
|
LOG.warning('Wrong failure message type. skipping...')
|
||||||
|
reason.append('Unknown')
|
||||||
if not self.content['validation_output']:
|
if not self.content['validation_output']:
|
||||||
if self.get_unreachable_hosts:
|
if self.get_unreachable_hosts:
|
||||||
reason.append('Unreachable')
|
reason.append('Unreachable')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user