Handle multiple validation logs results

Change-Id: I49d284edc2e1c54fb8c365e52146c656440b5db2
This commit is contained in:
Mathieu Bultel 2020-05-18 12:15:30 +02:00
parent 4f57229c23
commit b5cc8dff75
3 changed files with 48 additions and 5 deletions

View File

@ -172,3 +172,34 @@ class TestValidationLogs(TestCase):
'Unreachable_Hosts': '',
'Duration': '0:00:03.753',
'Validations': 'foo'}])
def test_get_results_none(self):
vlogs = ValidationLogs('/tmp/foo')
self.assertRaises(RuntimeError, vlogs.get_results, uuid=None)
@mock.patch('validations_libs.validation_logs.ValidationLogs.'
'get_logfile_by_uuid_validation_id')
@mock.patch('json.load',
return_value=fakes.VALIDATIONS_LOGS_CONTENTS_LIST[0])
@mock.patch('six.moves.builtins.open')
def test_get_results_list(self, mock_open, mock_json, mock_get_validation):
mock_get_validation.return_value = \
['/tmp/123_foo_2020-03-30T13:17:22.447857Z.json']
vlogs = ValidationLogs('/tmp/foo')
content = vlogs.get_results(uuid=['123', '123'], validation_id='foo')
self.assertEquals(content, [{'UUID': '123',
'Validations': 'foo',
'Status': 'PASSED',
'Status_by_Host': 'undercloud,PASSED',
'Host_Group': 'undercloud',
'Unreachable_Hosts': '',
'Duration': '0:00:03.753',
'Validations': 'foo'},
{'UUID': '123',
'Validations': 'foo',
'Status': 'PASSED',
'Status_by_Host': 'undercloud,PASSED',
'Host_Group': 'undercloud',
'Unreachable_Hosts': '',
'Duration': '0:00:03.753',
'Validations': 'foo'}])

View File

@ -125,8 +125,9 @@ class ValidationActions(object):
if run_async:
return results
# Return log results
uuid = [id['UUID'] for id in results]
vlog = ValidationLogs()
return vlog.get_results(validation_uuid)
return vlog.get_results(uuid)
def group_information(self, groups):
"""Get Information about Validation Groups"""

View File

@ -232,13 +232,24 @@ class ValidationLogs(object):
Return a list of validation results by uuid
Can be filter by validation_id
"""
results = (self.get_logfile_by_uuid_validation_id(uuid,
validation_id)
if validation_id else self.get_logfile_by_uuid(uuid))
data = {}
if isinstance(uuid, list):
results = []
for id in uuid:
results.extend(self.get_logfile_by_uuid_validation_id(
id,
validation_id)
if validation_id else
self.get_logfile_by_uuid(id))
elif isinstance(uuid, str):
results = (self.get_logfile_by_uuid_validation_id(uuid,
validation_id)
if validation_id else self.get_logfile_by_uuid(uuid))
else:
raise RuntimeError("uuid should be either a str or a list")
res = []
for result in results:
vlog = ValidationLog(logfile=result)
data = {}
data['UUID'] = vlog.get_uuid
data['Validations'] = vlog.get_validation_id
data['Status'] = vlog.get_status