From 06085cc501e3ac234754f03819de0315f9a24da8 Mon Sep 17 00:00:00 2001 From: Vivek Reddy Date: Wed, 1 Feb 2023 14:35:21 +0000 Subject: [PATCH] Handled the error case of negative age Signed-off-by: Vivek Reddy --- src/lldp_syncd/daemon.py | 18 +++++++++++------- tests/test_lldpSyncDaemon.py | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/lldp_syncd/daemon.py b/src/lldp_syncd/daemon.py index 442b678..a80edef 100644 --- a/src/lldp_syncd/daemon.py +++ b/src/lldp_syncd/daemon.py @@ -44,12 +44,16 @@ def parse_time(time_str): } :return: parsed age in time ticks (or seconds) """ - days, hour_min_secs = re.split(LLDPD_UPTIME_RE_SPLIT_PATTERN, time_str) - struct_time = time.strptime(hour_min_secs, LLDPD_TIME_FORMAT) - time_delta = datetime.timedelta(days=int(days), hours=struct_time.tm_hour, - minutes=struct_time.tm_min, - seconds=struct_time.tm_sec) - return int(time_delta.total_seconds()) + try: + days, hour_min_secs = re.split(LLDPD_UPTIME_RE_SPLIT_PATTERN, time_str) + struct_time = time.strptime(hour_min_secs, LLDPD_TIME_FORMAT) + time_delta = datetime.timedelta(days=int(days), hours=struct_time.tm_hour, + minutes=struct_time.tm_min, + seconds=struct_time.tm_sec) + return int(time_delta.total_seconds()) + except ValueError: + logger.exception("Failed to parse lldp age {} -- ".format(time_str)) + return 0 class LldpSyncDaemon(SonicSyncDaemon): @@ -264,7 +268,7 @@ def parse_update(self, lldp_json): parsed_interfaces[if_name].update({'lldp_rem_sys_cap_enabled': self.parse_sys_capabilities( capability_list, enabled=True)}) - if lldp_json['lldp_loc_chassis']: + if lldp_json.get('lldp_loc_chassis'): loc_chassis_keys = ('lldp_loc_chassis_id_subtype', 'lldp_loc_chassis_id', 'lldp_loc_sys_name', diff --git a/tests/test_lldpSyncDaemon.py b/tests/test_lldpSyncDaemon.py index b811fd2..bc50baf 100644 --- a/tests/test_lldpSyncDaemon.py +++ b/tests/test_lldpSyncDaemon.py @@ -98,6 +98,7 @@ def test_sync_roundtrip(self): def test_timeparse(self): self.assertEqual(lldp_syncd.daemon.parse_time("0 day, 05:09:02"), make_seconds(0, 5, 9, 2)) self.assertEqual(lldp_syncd.daemon.parse_time("2 days, 05:59:02"), make_seconds(2, 5, 59, 2)) + self.assertEqual(lldp_syncd.daemon.parse_time("-2 days, -23:-55:-02"), make_seconds(0, 0, 0, 0)) def parse_mgmt_ip(self, json_file): parsed_update = self.daemon.parse_update(json_file)