Merge "Avoid None value when missing data in ansible log"
This commit is contained in:
commit
b4f503abf9
|
@ -33,6 +33,31 @@ GROUPS_LIST = [
|
||||||
('group3', 'Group3 description'),
|
('group3', 'Group3 description'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
BAD_VALIDATIONS_LOGS_CONTENTS_LIST = [{
|
||||||
|
'plays': [{
|
||||||
|
'play': {
|
||||||
|
'duration': {
|
||||||
|
'end': '2019-11-25T13:40:17.538611Z',
|
||||||
|
},
|
||||||
|
'host': 'undercloud',
|
||||||
|
'id': '008886df-d297-1eaa-2a74-000000000008',
|
||||||
|
'validation_id': '512e',
|
||||||
|
'validation_path':
|
||||||
|
'/usr/share/openstack-tripleo-validations/playbooks'
|
||||||
|
}}],
|
||||||
|
'stats': {
|
||||||
|
'undercloud': {
|
||||||
|
'changed': 0,
|
||||||
|
'failures': 0,
|
||||||
|
'ignored': 0,
|
||||||
|
'ok': 1,
|
||||||
|
'rescued': 0,
|
||||||
|
'skipped': 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'validation_output': []
|
||||||
|
}]
|
||||||
|
|
||||||
VALIDATIONS_LOGS_CONTENTS_LIST = [{
|
VALIDATIONS_LOGS_CONTENTS_LIST = [{
|
||||||
'plays': [{
|
'plays': [{
|
||||||
'play': {
|
'play': {
|
||||||
|
|
|
@ -134,6 +134,15 @@ class TestValidationLog(TestCase):
|
||||||
unreachable = val.get_unreachable_hosts
|
unreachable = val.get_unreachable_hosts
|
||||||
self.assertEquals(unreachable, '')
|
self.assertEquals(unreachable, '')
|
||||||
|
|
||||||
|
@mock.patch('json.load',
|
||||||
|
return_value=fakes.BAD_VALIDATIONS_LOGS_CONTENTS_LIST[0])
|
||||||
|
@mock.patch('six.moves.builtins.open')
|
||||||
|
def test_get_unreachable_hosts_bad_data(self, mock_open, mock_json):
|
||||||
|
val = ValidationLog(
|
||||||
|
logfile='/tmp/123_foo_2020-03-30T13:17:22.447857Z.json')
|
||||||
|
unreachable = val.get_unreachable_hosts
|
||||||
|
self.assertEquals(unreachable, '')
|
||||||
|
|
||||||
@mock.patch('json.load',
|
@mock.patch('json.load',
|
||||||
return_value=fakes.VALIDATIONS_LOGS_CONTENTS_LIST[0])
|
return_value=fakes.VALIDATIONS_LOGS_CONTENTS_LIST[0])
|
||||||
@mock.patch('six.moves.builtins.open')
|
@mock.patch('six.moves.builtins.open')
|
||||||
|
@ -143,6 +152,15 @@ class TestValidationLog(TestCase):
|
||||||
duration = val.get_duration
|
duration = val.get_duration
|
||||||
self.assertEquals(duration, '0:00:03.753')
|
self.assertEquals(duration, '0:00:03.753')
|
||||||
|
|
||||||
|
@mock.patch('json.load',
|
||||||
|
return_value=fakes.BAD_VALIDATIONS_LOGS_CONTENTS_LIST[0])
|
||||||
|
@mock.patch('six.moves.builtins.open')
|
||||||
|
def test_get_duration_bad_data(self, mock_open, mock_json):
|
||||||
|
val = ValidationLog(
|
||||||
|
logfile='/tmp/123_foo_2020-03-30T13:17:22.447857Z.json')
|
||||||
|
duration = val.get_duration
|
||||||
|
self.assertEquals(duration, '')
|
||||||
|
|
||||||
@mock.patch('json.load',
|
@mock.patch('json.load',
|
||||||
return_value=fakes.VALIDATIONS_LOGS_CONTENTS_LIST[0])
|
return_value=fakes.VALIDATIONS_LOGS_CONTENTS_LIST[0])
|
||||||
@mock.patch('six.moves.builtins.open')
|
@mock.patch('six.moves.builtins.open')
|
||||||
|
@ -152,6 +170,15 @@ class TestValidationLog(TestCase):
|
||||||
start_time = val.get_start_time
|
start_time = val.get_start_time
|
||||||
self.assertEquals(start_time, '2019-11-25T13:40:14.404623Z')
|
self.assertEquals(start_time, '2019-11-25T13:40:14.404623Z')
|
||||||
|
|
||||||
|
@mock.patch('json.load',
|
||||||
|
return_value=fakes.BAD_VALIDATIONS_LOGS_CONTENTS_LIST[0])
|
||||||
|
@mock.patch('six.moves.builtins.open')
|
||||||
|
def test_get_start_time_bad_data(self, mock_open, mock_json):
|
||||||
|
val = ValidationLog(
|
||||||
|
logfile='/tmp/123_foo_2020-03-30T13:17:22.447857Z.json')
|
||||||
|
start_time = val.get_start_time
|
||||||
|
self.assertEquals(start_time, '')
|
||||||
|
|
||||||
@mock.patch('six.moves.builtins.open')
|
@mock.patch('six.moves.builtins.open')
|
||||||
def test_log_not_found(self, mock_open):
|
def test_log_not_found(self, mock_open):
|
||||||
mock_open.side_effect = IOError()
|
mock_open.side_effect = IOError()
|
||||||
|
|
|
@ -126,14 +126,16 @@ class ValidationLog(object):
|
||||||
@property
|
@property
|
||||||
def get_duration(self):
|
def get_duration(self):
|
||||||
"""Return duration of Ansible runtime"""
|
"""Return duration of Ansible runtime"""
|
||||||
return ', '.join([play['play']['duration'].get('time_elapsed') for
|
duration = [play['play']['duration'].get('time_elapsed') for
|
||||||
play in self.content['plays']])
|
play in self.content['plays']]
|
||||||
|
return ', '.join(filter(None, duration))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def get_start_time(self):
|
def get_start_time(self):
|
||||||
"""Return Ansible start time"""
|
"""Return Ansible start time"""
|
||||||
return ', '.join([play['play']['duration'].get('start') for
|
start_time = [play['play']['duration'].get('start') for
|
||||||
play in self.content['plays']])
|
play in self.content['plays']]
|
||||||
|
return ', '.join(filter(None, start_time))
|
||||||
|
|
||||||
|
|
||||||
class ValidationLogs(object):
|
class ValidationLogs(object):
|
||||||
|
|
Loading…
Reference in New Issue