diff --git a/src/lldp_syncd/daemon.py b/src/lldp_syncd/daemon.py index c248a06..8177826 100644 --- a/src/lldp_syncd/daemon.py +++ b/src/lldp_syncd/daemon.py @@ -43,9 +43,17 @@ def parse_time(time_str): return sage; } :return: parsed age in time ticks (or seconds) + 0 on invalid time_str """ + if '-' in time_str: + return 0 + days, hour_min_secs = re.split(LLDPD_UPTIME_RE_SPLIT_PATTERN, time_str) - struct_time = time.strptime(hour_min_secs, LLDPD_TIME_FORMAT) + try: + struct_time = time.strptime(hour_min_secs, LLDPD_TIME_FORMAT) + except ValueError: + logger.warning("Invalid time {}, possibly system time changed?".format(hour_min_secs)) + return 0 time_delta = datetime.timedelta(days=int(days), hours=struct_time.tm_hour, minutes=struct_time.tm_min, seconds=struct_time.tm_sec) diff --git a/tests/test_lldpSyncDaemon.py b/tests/test_lldpSyncDaemon.py index 1302fc1..7d84d0d 100644 --- a/tests/test_lldpSyncDaemon.py +++ b/tests/test_lldpSyncDaemon.py @@ -96,6 +96,10 @@ def test_sync_roundtrip(self): def test_timeparse(self): self.assertEquals(lldp_syncd.daemon.parse_time("0 day, 05:09:02"), make_seconds(0, 5, 9, 2)) self.assertEquals(lldp_syncd.daemon.parse_time("2 days, 05:59:02"), make_seconds(2, 5, 59, 2)) + self.assertEquals(lldp_syncd.daemon.parse_time("2 days, -05:-59:-02"), make_seconds(0, 0, 0, 0)) + self.assertEquals(lldp_syncd.daemon.parse_time("-2 days, 05:59:02"), make_seconds(0, 0, 0, 0)) + self.assertEquals(lldp_syncd.daemon.parse_time("0 days, 00:00:-02"), make_seconds(0, 0, 0, 0)) + self.assertEquals(lldp_syncd.daemon.parse_time("0 days, 00:-10:00"), make_seconds(0, 0, 0, 0)) def parse_mgmt_ip(self, json_file): parsed_update = self.daemon.parse_update(json_file)