"""Parsers against recorded device output.""" from __future__ import annotations import pathlib import pytest from napalm_example.parsers import parse_uptime, parse_version FIXTURES = pathlib.Path(__file__).parent / "fixtures" def test_version_output_becomes_facts() -> None: text = (FIXTURES / "example24-1.0.0-show-version.txt").read_text() assert parse_version(text) == { "model": "Example 24", "hostname": "sw-lab-01", "os_version": "1.0.0", "serial_number": "EX0000000001", "uptime": 273906.0, } def test_a_missing_field_is_an_error_not_an_empty_value() -> None: with pytest.raises(ValueError, match="Serial number"): parse_version("Example 24 Switch\nHostname : a\nFirmware : 1\nUptime : 0:00:01\n") @pytest.mark.parametrize( ("text", "seconds"), [("0:00:01", 1.0), ("1 day, 0:00:00", 86400.0), ("3 days, 4:05:06", 273906.0)], ) def test_uptime(text: str, seconds: float) -> None: assert parse_uptime(text) == seconds def test_an_unreadable_uptime_is_an_error() -> None: with pytest.raises(ValueError, match="uptime"): parse_uptime("soon")