Agent: Add notify_relay_on_propagation agent event handler
This commit is contained in:
parent
368ddde20f
commit
0466eb7239
|
@ -0,0 +1 @@
|
||||||
|
from .notify_relay_on_propagation import notify_relay_on_propagation
|
|
@ -0,0 +1,19 @@
|
||||||
|
import logging
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from common.agent_events import PropagationEvent
|
||||||
|
from infection_monkey.network.relay import TCPRelay
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class notify_relay_on_propagation:
|
||||||
|
def __init__(self, tcp_relay: Optional[TCPRelay]):
|
||||||
|
self._tcp_relay = tcp_relay
|
||||||
|
|
||||||
|
def __call__(self, event: PropagationEvent):
|
||||||
|
if self._tcp_relay is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
if event.success:
|
||||||
|
self._tcp_relay.add_potential_user(event.target)
|
|
@ -0,0 +1,54 @@
|
||||||
|
from ipaddress import IPv4Address
|
||||||
|
from unittest.mock import MagicMock
|
||||||
|
from uuid import UUID
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from common.agent_events import PropagationEvent
|
||||||
|
from infection_monkey.agent_event_handlers import notify_relay_on_propagation
|
||||||
|
from infection_monkey.network.relay import TCPRelay
|
||||||
|
|
||||||
|
TARGET_ADDRESS = IPv4Address("192.168.1.10")
|
||||||
|
|
||||||
|
SUCCESSFUL_PROPAGATION_EVENT = PropagationEvent(
|
||||||
|
source=UUID("f811ad00-5a68-4437-bd51-7b5cc1768ad5"),
|
||||||
|
target=TARGET_ADDRESS,
|
||||||
|
tags=frozenset({"test"}),
|
||||||
|
success=True,
|
||||||
|
exploiter_name="test_exploiter",
|
||||||
|
)
|
||||||
|
|
||||||
|
FAILED_PROPAGATION_EVENT = PropagationEvent(
|
||||||
|
source=UUID("f811ad00-5a68-4437-bd51-7b5cc1768ad5"),
|
||||||
|
target=TARGET_ADDRESS,
|
||||||
|
tags=frozenset({"test"}),
|
||||||
|
success=False,
|
||||||
|
exploiter_name="test_exploiter",
|
||||||
|
error_message="everything is broken",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def mock_tcp_relay():
|
||||||
|
return MagicMock(spec=TCPRelay)
|
||||||
|
|
||||||
|
|
||||||
|
def test_relay_notified_on_successful_propation(mock_tcp_relay):
|
||||||
|
handler = notify_relay_on_propagation(mock_tcp_relay)
|
||||||
|
handler(SUCCESSFUL_PROPAGATION_EVENT)
|
||||||
|
|
||||||
|
mock_tcp_relay.add_potential_user.assert_called_once_with(TARGET_ADDRESS)
|
||||||
|
|
||||||
|
|
||||||
|
def test_relay_not_notified_on_successful_propation(mock_tcp_relay):
|
||||||
|
handler = notify_relay_on_propagation(mock_tcp_relay)
|
||||||
|
handler(FAILED_PROPAGATION_EVENT)
|
||||||
|
|
||||||
|
mock_tcp_relay.add_potential_user.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
|
def test_relay_not_notified_if_none():
|
||||||
|
handler = notify_relay_on_propagation(None)
|
||||||
|
|
||||||
|
# Raises AttributeError on failure
|
||||||
|
handler(SUCCESSFUL_PROPAGATION_EVENT)
|
Loading…
Reference in New Issue