diff --git a/tests/snmp_fixtures/linksdown.snmprec b/tests/snmp_fixtures/linksdown.snmprec new file mode 100644 index 000000000..2bb32c59f --- /dev/null +++ b/tests/snmp_fixtures/linksdown.snmprec @@ -0,0 +1,90 @@ +1.3.6.1.2.1.1.1.0|4x|50726f4375727665204a34393030422053776974636820323632362c207265766973696f6e20482e30382e39382c20524f4d20482e30382e303220282f73772f636f64652f6275696c642f666973682874735f30385f352929 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.11.2.3.7.11.45 +1.3.6.1.2.1.1.3.0|67|3307498428 +1.3.6.1.2.1.1.4.0|4x|45696e6172204c696c6c6562727967666a656c64 +1.3.6.1.2.1.1.5.0|4|buick +1.3.6.1.2.1.1.6.0|4x|4c43266262656e +1.3.6.1.2.1.1.7.0|2|74 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.2|2|2 +1.3.6.1.2.1.2.2.1.2.1|4|1 +1.3.6.1.2.1.2.2.1.2.2|4|2 +1.3.6.1.2.1.2.2.1.3.1|2|6 +1.3.6.1.2.1.2.2.1.3.2|2|6 +1.3.6.1.2.1.2.2.1.4.1|2|1514 +1.3.6.1.2.1.2.2.1.4.2|2|1514 +1.3.6.1.2.1.2.2.1.5.1|66|10000000 +1.3.6.1.2.1.2.2.1.5.2|66|10000000 +1.3.6.1.2.1.2.2.1.6.1|4x|0019bb8f4b7f +1.3.6.1.2.1.2.2.1.6.2|4x|0019bb8f4b7e +1.3.6.1.2.1.2.2.1.7.1|2|1 +1.3.6.1.2.1.2.2.1.7.2|2|1 +1.3.6.1.2.1.2.2.1.8.1|2|1 +1.3.6.1.2.1.2.2.1.8.2|2|2 +1.3.6.1.2.1.2.2.1.9.1|67|1737882440 +1.3.6.1.2.1.2.2.1.9.2|67|1806268995 +1.3.6.1.2.1.2.2.1.10.1|65|0 +1.3.6.1.2.1.2.2.1.10.2|65|0 +1.3.6.1.2.1.2.2.1.11.1|65|0 +1.3.6.1.2.1.2.2.1.11.2|65|0 +1.3.6.1.2.1.2.2.1.12.1|65|0 +1.3.6.1.2.1.2.2.1.12.2|65|0 +1.3.6.1.2.1.2.2.1.13.1|65|0 +1.3.6.1.2.1.2.2.1.13.2|65|0 +1.3.6.1.2.1.2.2.1.14.1|65|0 +1.3.6.1.2.1.2.2.1.14.2|65|0 +1.3.6.1.2.1.2.2.1.15.1|65|0 +1.3.6.1.2.1.2.2.1.15.2|65|0 +1.3.6.1.2.1.2.2.1.16.1|65|0 +1.3.6.1.2.1.2.2.1.16.2|65|0 +1.3.6.1.2.1.2.2.1.17.1|65|0 +1.3.6.1.2.1.2.2.1.17.2|65|0 +1.3.6.1.2.1.2.2.1.18.1|65|0 +1.3.6.1.2.1.2.2.1.18.2|65|0 +1.3.6.1.2.1.2.2.1.19.1|65|0 +1.3.6.1.2.1.2.2.1.19.2|65|0 +1.3.6.1.2.1.2.2.1.20.1|65|0 +1.3.6.1.2.1.2.2.1.20.2|65|0 +1.3.6.1.2.1.2.2.1.21.1|66|0 +1.3.6.1.2.1.2.2.1.21.2|66|0 +1.3.6.1.2.1.2.2.1.22.1|6|1.3.6.1.2.1.10.7 +1.3.6.1.2.1.2.2.1.22.2|6|1.3.6.1.2.1.10.7 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.31.1.1.1.1.1|4|1 +1.3.6.1.2.1.31.1.1.1.1.2|4|2 +1.3.6.1.2.1.31.1.1.1.2.1|65|0 +1.3.6.1.2.1.31.1.1.1.2.2|65|0 +1.3.6.1.2.1.31.1.1.1.3.1|65|0 +1.3.6.1.2.1.31.1.1.1.3.2|65|0 +1.3.6.1.2.1.31.1.1.1.4.1|65|0 +1.3.6.1.2.1.31.1.1.1.4.2|65|0 +1.3.6.1.2.1.31.1.1.1.5.1|65|0 +1.3.6.1.2.1.31.1.1.1.5.2|65|0 +1.3.6.1.2.1.31.1.1.1.6.1|70|0 +1.3.6.1.2.1.31.1.1.1.6.2|70|0 +1.3.6.1.2.1.31.1.1.1.7.1|70|0 +1.3.6.1.2.1.31.1.1.1.7.2|70|0 +1.3.6.1.2.1.31.1.1.1.8.1|70|0 +1.3.6.1.2.1.31.1.1.1.8.2|70|0 +1.3.6.1.2.1.31.1.1.1.9.1|70|0 +1.3.6.1.2.1.31.1.1.1.9.2|70|0 +1.3.6.1.2.1.31.1.1.1.10.1|70|0 +1.3.6.1.2.1.31.1.1.1.10.2|70|0 +1.3.6.1.2.1.31.1.1.1.11.1|70|0 +1.3.6.1.2.1.31.1.1.1.11.2|70|0 +1.3.6.1.2.1.31.1.1.1.12.1|70|0 +1.3.6.1.2.1.31.1.1.1.12.2|70|0 +1.3.6.1.2.1.31.1.1.1.13.1|70|0 +1.3.6.1.2.1.31.1.1.1.13.2|70|0 +1.3.6.1.2.1.31.1.1.1.14.1|2|1 +1.3.6.1.2.1.31.1.1.1.14.2|2|1 +1.3.6.1.2.1.31.1.1.1.15.1|66|10 +1.3.6.1.2.1.31.1.1.1.15.2|66|10 +1.3.6.1.2.1.31.1.1.1.16.1|2|1 +1.3.6.1.2.1.31.1.1.1.16.2|2|1 +1.3.6.1.2.1.31.1.1.1.17.1|2|1 +1.3.6.1.2.1.31.1.1.1.17.2|2|1 +1.3.6.1.2.1.31.1.1.1.18.1|4x|4120706f656d +1.3.6.1.2.1.31.1.1.1.18.2|4x|66726f6d20612066616d6f7573 +1.3.6.1.2.1.31.1.1.1.19.1|67|1737882440 +1.3.6.1.2.1.31.1.1.1.19.2|67|1806268995 diff --git a/tests/snmp_fixtures/linksup.snmprec b/tests/snmp_fixtures/linksup.snmprec new file mode 100644 index 000000000..c46915098 --- /dev/null +++ b/tests/snmp_fixtures/linksup.snmprec @@ -0,0 +1,90 @@ +1.3.6.1.2.1.1.1.0|4x|50726f4375727665204a34393030422053776974636820323632362c207265766973696f6e20482e30382e39382c20524f4d20482e30382e303220282f73772f636f64652f6275696c642f666973682874735f30385f352929 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.11.2.3.7.11.45 +1.3.6.1.2.1.1.3.0|67|3307498428 +1.3.6.1.2.1.1.4.0|4x|45696e6172204c696c6c6562727967666a656c64 +1.3.6.1.2.1.1.5.0|4|buick +1.3.6.1.2.1.1.6.0|4x|4c43266262656e +1.3.6.1.2.1.1.7.0|2|74 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.2|2|2 +1.3.6.1.2.1.2.2.1.2.1|4|1 +1.3.6.1.2.1.2.2.1.2.2|4|2 +1.3.6.1.2.1.2.2.1.3.1|2|6 +1.3.6.1.2.1.2.2.1.3.2|2|6 +1.3.6.1.2.1.2.2.1.4.1|2|1514 +1.3.6.1.2.1.2.2.1.4.2|2|1514 +1.3.6.1.2.1.2.2.1.5.1|66|10000000 +1.3.6.1.2.1.2.2.1.5.2|66|10000000 +1.3.6.1.2.1.2.2.1.6.1|4x|0019bb8f4b7f +1.3.6.1.2.1.2.2.1.6.2|4x|0019bb8f4b7e +1.3.6.1.2.1.2.2.1.7.1|2|1 +1.3.6.1.2.1.2.2.1.7.2|2|1 +1.3.6.1.2.1.2.2.1.8.1|2|1 +1.3.6.1.2.1.2.2.1.8.2|2|1 +1.3.6.1.2.1.2.2.1.9.1|67|1737882440 +1.3.6.1.2.1.2.2.1.9.2|67|1806268995 +1.3.6.1.2.1.2.2.1.10.1|65|0 +1.3.6.1.2.1.2.2.1.10.2|65|0 +1.3.6.1.2.1.2.2.1.11.1|65|0 +1.3.6.1.2.1.2.2.1.11.2|65|0 +1.3.6.1.2.1.2.2.1.12.1|65|0 +1.3.6.1.2.1.2.2.1.12.2|65|0 +1.3.6.1.2.1.2.2.1.13.1|65|0 +1.3.6.1.2.1.2.2.1.13.2|65|0 +1.3.6.1.2.1.2.2.1.14.1|65|0 +1.3.6.1.2.1.2.2.1.14.2|65|0 +1.3.6.1.2.1.2.2.1.15.1|65|0 +1.3.6.1.2.1.2.2.1.15.2|65|0 +1.3.6.1.2.1.2.2.1.16.1|65|0 +1.3.6.1.2.1.2.2.1.16.2|65|0 +1.3.6.1.2.1.2.2.1.17.1|65|0 +1.3.6.1.2.1.2.2.1.17.2|65|0 +1.3.6.1.2.1.2.2.1.18.1|65|0 +1.3.6.1.2.1.2.2.1.18.2|65|0 +1.3.6.1.2.1.2.2.1.19.1|65|0 +1.3.6.1.2.1.2.2.1.19.2|65|0 +1.3.6.1.2.1.2.2.1.20.1|65|0 +1.3.6.1.2.1.2.2.1.20.2|65|0 +1.3.6.1.2.1.2.2.1.21.1|66|0 +1.3.6.1.2.1.2.2.1.21.2|66|0 +1.3.6.1.2.1.2.2.1.22.1|6|1.3.6.1.2.1.10.7 +1.3.6.1.2.1.2.2.1.22.2|6|1.3.6.1.2.1.10.7 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.31.1.1.1.1.1|4|1 +1.3.6.1.2.1.31.1.1.1.1.2|4|2 +1.3.6.1.2.1.31.1.1.1.2.1|65|0 +1.3.6.1.2.1.31.1.1.1.2.2|65|0 +1.3.6.1.2.1.31.1.1.1.3.1|65|0 +1.3.6.1.2.1.31.1.1.1.3.2|65|0 +1.3.6.1.2.1.31.1.1.1.4.1|65|0 +1.3.6.1.2.1.31.1.1.1.4.2|65|0 +1.3.6.1.2.1.31.1.1.1.5.1|65|0 +1.3.6.1.2.1.31.1.1.1.5.2|65|0 +1.3.6.1.2.1.31.1.1.1.6.1|70|0 +1.3.6.1.2.1.31.1.1.1.6.2|70|0 +1.3.6.1.2.1.31.1.1.1.7.1|70|0 +1.3.6.1.2.1.31.1.1.1.7.2|70|0 +1.3.6.1.2.1.31.1.1.1.8.1|70|0 +1.3.6.1.2.1.31.1.1.1.8.2|70|0 +1.3.6.1.2.1.31.1.1.1.9.1|70|0 +1.3.6.1.2.1.31.1.1.1.9.2|70|0 +1.3.6.1.2.1.31.1.1.1.10.1|70|0 +1.3.6.1.2.1.31.1.1.1.10.2|70|0 +1.3.6.1.2.1.31.1.1.1.11.1|70|0 +1.3.6.1.2.1.31.1.1.1.11.2|70|0 +1.3.6.1.2.1.31.1.1.1.12.1|70|0 +1.3.6.1.2.1.31.1.1.1.12.2|70|0 +1.3.6.1.2.1.31.1.1.1.13.1|70|0 +1.3.6.1.2.1.31.1.1.1.13.2|70|0 +1.3.6.1.2.1.31.1.1.1.14.1|2|1 +1.3.6.1.2.1.31.1.1.1.14.2|2|1 +1.3.6.1.2.1.31.1.1.1.15.1|66|10 +1.3.6.1.2.1.31.1.1.1.15.2|66|10 +1.3.6.1.2.1.31.1.1.1.16.1|2|1 +1.3.6.1.2.1.31.1.1.1.16.2|2|1 +1.3.6.1.2.1.31.1.1.1.17.1|2|1 +1.3.6.1.2.1.31.1.1.1.17.2|2|1 +1.3.6.1.2.1.31.1.1.1.18.1|4x|4120706f656d +1.3.6.1.2.1.31.1.1.1.18.2|4x|66726f6d20612066616d6f7573 +1.3.6.1.2.1.31.1.1.1.19.1|67|1737882440 +1.3.6.1.2.1.31.1.1.1.19.2|67|1806268995 diff --git a/tests/tasks/test_linkstatetask.py b/tests/tasks/test_linkstatetask.py new file mode 100644 index 000000000..cbee1edf8 --- /dev/null +++ b/tests/tasks/test_linkstatetask.py @@ -0,0 +1,70 @@ +import pytest + +from zino.config.models import PollDevice +from zino.state import ZinoState +from zino.tasks.linkstatetask import BaseInterfaceRow, LinkStateTask + + +class TestLinkStateTask: + @pytest.mark.asyncio + async def test_run_should_not_create_event_if_links_are_up(self, linkstatetask_with_links_up): + task = linkstatetask_with_links_up + assert (await task.run()) is None + assert len(task.state.events) == 0 + + @pytest.mark.asyncio + async def test_run_should_create_event_if_at_least_one_link_is_down(self, linkstatetask_with_one_link_down): + task = linkstatetask_with_one_link_down + assert (await task.run()) is None + assert len(task.state.events) == 1 + + def test_when_patterns_are_empty_interface_should_not_be_ignored(self, task_with_dummy_device): + data = BaseInterfaceRow( + index=2, descr="GigabitEthernet1/2", alias="uplink", admin_status="up", oper_status="up", last_change=0 + ) + assert task_with_dummy_device._is_interface_watched(data) + + def test_when_interface_matches_watchpat_it_should_not_be_ignored(self, task_with_dummy_device): + data = BaseInterfaceRow( + index=2, descr="GigabitEthernet1/2", alias="uplink", admin_status="up", oper_status="up", last_change=0 + ) + task_with_dummy_device.device.watchpat = "Gigabit" + assert task_with_dummy_device._is_interface_watched(data) + + def test_when_interface_doesnt_match_watchpat_it_should_be_ignored(self, task_with_dummy_device): + data = BaseInterfaceRow( + index=2, descr="GigabitEthernet1/2", alias="uplink", admin_status="up", oper_status="up", last_change=0 + ) + task_with_dummy_device.device.watchpat = "TenGiga" + assert not task_with_dummy_device._is_interface_watched(data) + + def test_when_interface_matches_ignorepat_it_should_be_ignored(self, task_with_dummy_device): + data = BaseInterfaceRow( + index=2, descr="GigabitEthernet1/2", alias="uplink", admin_status="up", oper_status="up", last_change=0 + ) + task_with_dummy_device.device.ignorepat = ".*Ethernet" + assert not task_with_dummy_device._is_interface_watched(data) + + +@pytest.fixture +def linkstatetask_with_links_up(snmpsim, snmp_test_port): + device = PollDevice(name="buick.lab.example.org", address="127.0.0.1", port=snmp_test_port, community="linksup") + state = ZinoState() + task = LinkStateTask(device, state) + yield task + + +@pytest.fixture +def linkstatetask_with_one_link_down(snmpsim, snmp_test_port): + device = PollDevice(name="buick.lab.example.org", address="127.0.0.1", port=snmp_test_port, community="linksdown") + state = ZinoState() + task = LinkStateTask(device, state) + yield task + + +@pytest.fixture +def task_with_dummy_device(): + device = PollDevice(name="test", address="127.0.0.1") + state = ZinoState() + task = LinkStateTask(device, state) + yield task