Skip to content

Commit

Permalink
Add tests for fake event API command
Browse files Browse the repository at this point in the history
  • Loading branch information
johannaengland committed Jul 25, 2024
1 parent c396e39 commit 5546eb8
Showing 1 changed file with 75 additions and 0 deletions.
75 changes: 75 additions & 0 deletions tests/api/legacy_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
)
from zino.time import now

DEVICE_NAME = "example-gw.example.org"


class TestZino1BaseServerProtocol:
def test_should_init_without_error(self):
Expand Down Expand Up @@ -892,6 +894,79 @@ async def test_when_authenticated_should_list_all_pm_ids(self, authenticated_pro
assert re.search(pattern_string.format(id), response), f"Expected response to contain id {id}"


class TestZino1TestProtocolFakeEventCommand:
@pytest.mark.asyncio
@pytest.mark.parametrize(
"subindex,event_class",
[
("yellow", "alarm"),
(123, "bfd"),
("127.0.0.1", "bgp"),
(123, "portstate"),
("None", "reachability"),
],
)
async def test_fakevent_should_create_event(self, subindex, event_class):
protocol = ZinoTestProtocol()
fake_transport = Mock()
protocol.connection_made(fake_transport)
protocol.user = "foo"
fake_transport.write = Mock()
command = f"FAKEEVENT {DEVICE_NAME} {subindex} {event_class} ignored"
await protocol.message_received(command)

assert fake_transport.write.called
response = fake_transport.write.call_args[0][0].decode("utf-8")
assert response.startswith("200 ")

event_id = re.search(r"event created with id (?P<id>\d+)", response).group("id")
assert event_id
assert protocol._state.events.events.get(int(event_id), None)

@pytest.mark.asyncio
@pytest.mark.parametrize(
"subindex,event_class,event_state",
[
(123, "invalid-event-type", "ignored"),
("blue", "alarm", "ignored"),
(123, "portstate", "invalid-state"),
("abc", "portstate", "ignored"),
("abc", "bgp", "ignored"),
],
)
async def test_fakevent_should_fail_on_invalid_input(self, subindex, event_class, event_state):
protocol = ZinoTestProtocol()
fake_transport = Mock()
protocol.connection_made(fake_transport)
protocol.user = "foo"
fake_transport.write = Mock()
command = f"FAKEEVENT {DEVICE_NAME} {subindex} {event_class} {event_state}"
await protocol.message_received(command)

assert fake_transport.write.called
response = fake_transport.write.call_args[0][0].decode("utf-8")
assert response.startswith("500 ")

@pytest.mark.asyncio
async def test_fakevent_should_fail_if_event_with_given_index_exists_already(self):
protocol = ZinoTestProtocol()
fake_transport = Mock()
protocol.connection_made(fake_transport)
protocol.user = "foo"
fake_transport.write = Mock()

event = ReachabilityEvent(router=DEVICE_NAME, state=EventState.OPEN)
protocol._state.events.commit(event=event)

command = f"FAKEEVENT {DEVICE_NAME} None reachability open"
await protocol.message_received(command)

assert fake_transport.write.called
response = fake_transport.write.call_args[0][0].decode("utf-8")
assert response.startswith("500 ")
assert "An event with the given parameters already exists" in response


def test_requires_authentication_should_set_function_attribute():
@requires_authentication
def throwaway():
Expand Down

0 comments on commit 5546eb8

Please sign in to comment.