2021-12-07 11:25:14 -05:00
|
|
|
from unittest import mock
|
|
|
|
|
2022-12-27 14:30:03 -05:00
|
|
|
from oslo_config import cfg
|
|
|
|
|
|
|
|
from aprsd import client, packets
|
|
|
|
from aprsd import conf # noqa: F401
|
2021-12-07 11:25:14 -05:00
|
|
|
from aprsd.plugins import notify as notify_plugin
|
|
|
|
|
|
|
|
from .. import fake, test_plugin
|
|
|
|
|
|
|
|
|
2022-12-27 14:30:03 -05:00
|
|
|
CONF = cfg.CONF
|
|
|
|
DEFAULT_WATCHLIST_CALLSIGNS = fake.FAKE_FROM_CALLSIGN
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
|
|
|
|
class TestWatchListPlugin(test_plugin.TestPlugin):
|
|
|
|
def setUp(self):
|
|
|
|
self.fromcall = fake.FAKE_FROM_CALLSIGN
|
|
|
|
self.ack = 1
|
|
|
|
|
2022-12-27 14:30:03 -05:00
|
|
|
def config_and_init(
|
2021-12-07 11:25:14 -05:00
|
|
|
self,
|
|
|
|
watchlist_enabled=True,
|
|
|
|
watchlist_alert_callsign=None,
|
|
|
|
watchlist_alert_time_seconds=None,
|
|
|
|
watchlist_packet_keep_count=None,
|
|
|
|
watchlist_callsigns=DEFAULT_WATCHLIST_CALLSIGNS,
|
|
|
|
):
|
2022-12-27 14:30:03 -05:00
|
|
|
CONF.callsign = self.fromcall
|
|
|
|
CONF.aprs_network.login = self.fromcall
|
|
|
|
CONF.aprs_fi.apiKey = "something"
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
# Set the watchlist specific config options
|
2022-12-27 14:30:03 -05:00
|
|
|
CONF.watch_list.enabled = watchlist_enabled
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
if not watchlist_alert_callsign:
|
|
|
|
watchlist_alert_callsign = fake.FAKE_TO_CALLSIGN
|
2022-12-27 14:30:03 -05:00
|
|
|
CONF.watch_list.alert_callsign = watchlist_alert_callsign
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
if not watchlist_alert_time_seconds:
|
2022-12-27 14:30:03 -05:00
|
|
|
watchlist_alert_time_seconds = CONF.watch_list.alert_time_seconds
|
|
|
|
CONF.watch_list.alert_time_seconds = watchlist_alert_time_seconds
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
if not watchlist_packet_keep_count:
|
2022-12-27 14:30:03 -05:00
|
|
|
watchlist_packet_keep_count = CONF.watch_list.packet_keep_count
|
|
|
|
CONF.watch_list.packet_keep_count = watchlist_packet_keep_count
|
2021-12-07 11:25:14 -05:00
|
|
|
|
2022-12-27 14:30:03 -05:00
|
|
|
CONF.watch_list.callsigns = watchlist_callsigns
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
|
|
|
|
class TestAPRSDWatchListPluginBase(TestWatchListPlugin):
|
|
|
|
|
|
|
|
def test_watchlist_not_enabled(self):
|
2022-12-27 14:30:03 -05:00
|
|
|
self.config_and_init(watchlist_enabled=False)
|
|
|
|
plugin = fake.FakeWatchListPlugin()
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
packet = fake.fake_packet(
|
|
|
|
message="version",
|
|
|
|
msg_number=1,
|
|
|
|
)
|
|
|
|
actual = plugin.filter(packet)
|
2022-12-16 15:28:31 -05:00
|
|
|
expected = packets.NULL_MESSAGE
|
2021-12-07 11:25:14 -05:00
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
|
|
@mock.patch("aprsd.client.ClientFactory", autospec=True)
|
|
|
|
def test_watchlist_not_in_watchlist(self, mock_factory):
|
|
|
|
client.factory = mock_factory
|
2022-12-27 14:30:03 -05:00
|
|
|
self.config_and_init()
|
|
|
|
plugin = fake.FakeWatchListPlugin()
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
packet = fake.fake_packet(
|
|
|
|
fromcall="FAKE",
|
|
|
|
message="version",
|
|
|
|
msg_number=1,
|
|
|
|
)
|
|
|
|
actual = plugin.filter(packet)
|
2022-12-16 15:28:31 -05:00
|
|
|
expected = packets.NULL_MESSAGE
|
2021-12-07 11:25:14 -05:00
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
|
|
|
|
|
|
class TestNotifySeenPlugin(TestWatchListPlugin):
|
|
|
|
|
|
|
|
def test_disabled(self):
|
2022-12-27 14:30:03 -05:00
|
|
|
self.config_and_init(watchlist_enabled=False)
|
|
|
|
plugin = notify_plugin.NotifySeenPlugin()
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
packet = fake.fake_packet(
|
|
|
|
message="version",
|
|
|
|
msg_number=1,
|
|
|
|
)
|
|
|
|
actual = plugin.filter(packet)
|
2022-12-16 15:28:31 -05:00
|
|
|
expected = packets.NULL_MESSAGE
|
2021-12-07 11:25:14 -05:00
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
|
|
@mock.patch("aprsd.client.ClientFactory", autospec=True)
|
|
|
|
def test_callsign_not_in_watchlist(self, mock_factory):
|
|
|
|
client.factory = mock_factory
|
2022-12-27 14:30:03 -05:00
|
|
|
self.config_and_init(watchlist_enabled=False)
|
|
|
|
plugin = notify_plugin.NotifySeenPlugin()
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
packet = fake.fake_packet(
|
|
|
|
message="version",
|
|
|
|
msg_number=1,
|
|
|
|
)
|
|
|
|
actual = plugin.filter(packet)
|
2022-12-16 15:28:31 -05:00
|
|
|
expected = packets.NULL_MESSAGE
|
2021-12-07 11:25:14 -05:00
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
|
|
@mock.patch("aprsd.client.ClientFactory", autospec=True)
|
|
|
|
@mock.patch("aprsd.packets.WatchList.is_old")
|
|
|
|
def test_callsign_in_watchlist_not_old(self, mock_is_old, mock_factory):
|
|
|
|
client.factory = mock_factory
|
|
|
|
mock_is_old.return_value = False
|
2022-12-27 14:30:03 -05:00
|
|
|
self.config_and_init(
|
2021-12-07 11:25:14 -05:00
|
|
|
watchlist_enabled=True,
|
|
|
|
watchlist_callsigns=["WB4BOR"],
|
|
|
|
)
|
2022-12-27 14:30:03 -05:00
|
|
|
plugin = notify_plugin.NotifySeenPlugin()
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
packet = fake.fake_packet(
|
|
|
|
fromcall="WB4BOR",
|
|
|
|
message="ping",
|
|
|
|
msg_number=1,
|
|
|
|
)
|
|
|
|
actual = plugin.filter(packet)
|
2022-12-16 15:28:31 -05:00
|
|
|
expected = packets.NULL_MESSAGE
|
2021-12-07 11:25:14 -05:00
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
|
|
@mock.patch("aprsd.client.ClientFactory", autospec=True)
|
|
|
|
@mock.patch("aprsd.packets.WatchList.is_old")
|
|
|
|
def test_callsign_in_watchlist_old_same_alert_callsign(self, mock_is_old, mock_factory):
|
|
|
|
client.factory = mock_factory
|
|
|
|
mock_is_old.return_value = True
|
2022-12-27 14:30:03 -05:00
|
|
|
self.config_and_init(
|
2021-12-07 11:25:14 -05:00
|
|
|
watchlist_enabled=True,
|
|
|
|
watchlist_alert_callsign="WB4BOR",
|
|
|
|
watchlist_callsigns=["WB4BOR"],
|
|
|
|
)
|
2022-12-27 14:30:03 -05:00
|
|
|
plugin = notify_plugin.NotifySeenPlugin()
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
packet = fake.fake_packet(
|
|
|
|
fromcall="WB4BOR",
|
|
|
|
message="ping",
|
|
|
|
msg_number=1,
|
|
|
|
)
|
|
|
|
actual = plugin.filter(packet)
|
2022-12-16 15:28:31 -05:00
|
|
|
expected = packets.NULL_MESSAGE
|
2021-12-07 11:25:14 -05:00
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
|
|
@mock.patch("aprsd.client.ClientFactory", autospec=True)
|
|
|
|
@mock.patch("aprsd.packets.WatchList.is_old")
|
|
|
|
def test_callsign_in_watchlist_old_send_alert(self, mock_is_old, mock_factory):
|
|
|
|
client.factory = mock_factory
|
|
|
|
mock_is_old.return_value = True
|
2022-12-16 15:28:31 -05:00
|
|
|
notify_callsign = fake.FAKE_TO_CALLSIGN
|
2021-12-07 11:25:14 -05:00
|
|
|
fromcall = "WB4BOR"
|
2022-12-27 14:30:03 -05:00
|
|
|
self.config_and_init(
|
2021-12-07 11:25:14 -05:00
|
|
|
watchlist_enabled=True,
|
|
|
|
watchlist_alert_callsign=notify_callsign,
|
|
|
|
watchlist_callsigns=["WB4BOR"],
|
|
|
|
)
|
2022-12-27 14:30:03 -05:00
|
|
|
plugin = notify_plugin.NotifySeenPlugin()
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
packet = fake.fake_packet(
|
|
|
|
fromcall=fromcall,
|
|
|
|
message="ping",
|
|
|
|
msg_number=1,
|
|
|
|
)
|
2022-12-16 15:28:31 -05:00
|
|
|
packet_type = packet.__class__.__name__
|
2021-12-07 11:25:14 -05:00
|
|
|
actual = plugin.filter(packet)
|
|
|
|
msg = f"{fromcall} was just seen by type:'{packet_type}'"
|
|
|
|
|
2022-12-16 15:28:31 -05:00
|
|
|
self.assertIsInstance(actual, packets.MessagePacket)
|
|
|
|
self.assertEqual(fake.FAKE_FROM_CALLSIGN, actual.from_call)
|
|
|
|
self.assertEqual(notify_callsign, actual.to_call)
|
|
|
|
self.assertEqual(msg, actual.message_text)
|