1
0
mirror of https://github.com/craigerl/aprsd.git synced 2026-06-10 10:05:36 -04:00
Files
aprsd/tests/test_plugin.py
T

217 lines
6.9 KiB
Python
Raw Normal View History

2020-12-25 16:45:28 -05:00
import unittest
from unittest import mock
2022-12-27 14:30:03 -05:00
from oslo_config import cfg
2025-01-03 16:52:10 -05:00
from aprsd import ( # noqa: F401
conf,
2024-12-20 22:00:54 -05:00
packets,
plugins,
)
2022-12-21 11:08:57 -05:00
from aprsd import plugin as aprsd_plugin
2025-03-28 09:16:06 -04:00
from aprsd.client.drivers.registry import DriverRegistry
2022-12-16 15:28:31 -05:00
from aprsd.packets import core
2020-12-25 16:45:28 -05:00
2021-08-20 15:21:47 -04:00
from . import fake
2025-03-28 09:16:06 -04:00
from .mock_client_driver import MockClientDriver
2021-08-20 15:21:47 -04:00
2022-12-27 14:30:03 -05:00
CONF = cfg.CONF
2022-12-21 11:08:57 -05:00
class TestPluginManager(unittest.TestCase):
def setUp(self) -> None:
self.fromcall = fake.FAKE_FROM_CALLSIGN
self.config_and_init()
2025-03-28 09:16:06 -04:00
self.mock_driver = MockClientDriver()
# Mock the DriverRegistry to return our mock driver
self.registry_patcher = mock.patch.object(
DriverRegistry, 'get_driver', return_value=self.mock_driver
)
self.mock_registry = self.registry_patcher.start()
2022-12-21 11:08:57 -05:00
def tearDown(self) -> None:
self.config = None
aprsd_plugin.PluginManager._instance = None
2025-03-28 09:16:06 -04:00
self.registry_patcher.stop()
self.mock_registry.stop()
2022-12-21 11:08:57 -05:00
def config_and_init(self):
2022-12-27 14:30:03 -05:00
CONF.callsign = self.fromcall
2025-03-28 09:16:06 -04:00
CONF.aprs_fi.apiKey = 'something'
CONF.enabled_plugins = 'aprsd.plugins.ping.PingPlugin'
2022-12-27 14:30:03 -05:00
CONF.enable_save = False
2022-12-21 11:08:57 -05:00
def test_get_plugins_no_plugins(self):
2022-12-27 14:30:03 -05:00
CONF.enabled_plugins = []
pm = aprsd_plugin.PluginManager()
2022-12-21 11:08:57 -05:00
plugin_list = pm.get_plugins()
self.assertEqual([], plugin_list)
def test_get_plugins_with_plugins(self):
2025-03-28 09:16:06 -04:00
CONF.enabled_plugins = ['aprsd.plugins.ping.PingPlugin']
2022-12-27 14:30:03 -05:00
pm = aprsd_plugin.PluginManager()
2022-12-21 11:08:57 -05:00
plugin_list = pm.get_plugins()
self.assertEqual([], plugin_list)
pm.setup_plugins()
plugin_list = pm.get_plugins()
self.assertIsInstance(plugin_list, list)
self.assertIsInstance(
plugin_list[0],
(
aprsd_plugin.HelpPlugin,
plugins.ping.PingPlugin,
),
)
def test_get_watchlist_plugins(self):
2022-12-27 14:30:03 -05:00
pm = aprsd_plugin.PluginManager()
2022-12-21 11:08:57 -05:00
plugin_list = pm.get_plugins()
self.assertEqual([], plugin_list)
pm.setup_plugins()
plugin_list = pm.get_watchlist_plugins()
self.assertIsInstance(plugin_list, list)
self.assertEqual(0, len(plugin_list))
def test_get_message_plugins(self):
2025-03-28 09:16:06 -04:00
CONF.enabled_plugins = ['aprsd.plugins.ping.PingPlugin']
2022-12-27 14:30:03 -05:00
pm = aprsd_plugin.PluginManager()
2022-12-21 11:08:57 -05:00
plugin_list = pm.get_plugins()
self.assertEqual([], plugin_list)
pm.setup_plugins()
plugin_list = pm.get_message_plugins()
self.assertIsInstance(plugin_list, list)
self.assertEqual(2, len(plugin_list))
self.assertIsInstance(
plugin_list[0],
(
aprsd_plugin.HelpPlugin,
plugins.ping.PingPlugin,
),
)
2021-01-06 17:50:02 -05:00
class TestPlugin(unittest.TestCase):
2021-12-07 11:25:14 -05:00
def setUp(self) -> None:
2021-08-20 15:21:47 -04:00
self.fromcall = fake.FAKE_FROM_CALLSIGN
2020-12-25 18:13:52 -05:00
self.ack = 1
2021-12-07 11:25:14 -05:00
self.config_and_init()
2025-03-28 09:16:06 -04:00
self.mock_driver = MockClientDriver()
# Mock the DriverRegistry to return our mock driver
self.registry_patcher = mock.patch.object(
DriverRegistry, 'get_driver', return_value=self.mock_driver
)
self.mock_registry = self.registry_patcher.start()
2021-12-07 11:25:14 -05:00
def tearDown(self) -> None:
packets.WatchList._instance = None
packets.SeenList._instance = None
2022-12-16 15:28:31 -05:00
packets.PacketTrack._instance = None
2021-12-07 11:25:14 -05:00
self.config = None
2025-03-28 09:16:06 -04:00
self.registry_patcher.stop()
self.mock_registry.stop()
2021-12-07 11:25:14 -05:00
2022-12-27 14:30:03 -05:00
def config_and_init(self):
CONF.callsign = self.fromcall
2025-03-28 09:16:06 -04:00
CONF.aprs_fi.apiKey = 'something'
CONF.enabled_plugins = 'aprsd.plugins.ping.PingPlugin'
2022-12-27 14:30:03 -05:00
CONF.enable_save = False
2020-12-25 16:45:28 -05:00
2021-12-07 11:25:14 -05:00
class TestPluginBase(TestPlugin):
2025-03-28 09:16:06 -04:00
@mock.patch.object(fake.FakeBaseNoThreadsPlugin, 'process')
2021-08-20 15:21:47 -04:00
def test_base_plugin_no_threads(self, mock_process):
2022-12-27 14:30:03 -05:00
p = fake.FakeBaseNoThreadsPlugin()
2021-08-20 15:21:47 -04:00
expected = []
actual = p.create_threads()
self.assertEqual(expected, actual)
2025-03-28 09:16:06 -04:00
expected = '1.0'
2021-08-20 15:21:47 -04:00
actual = p.version
self.assertEqual(expected, actual)
expected = 0
actual = p.message_counter
self.assertEqual(expected, actual)
expected = None
actual = p.filter(fake.fake_packet())
self.assertEqual(expected, actual)
mock_process.assert_not_called()
2025-03-28 09:16:06 -04:00
@mock.patch.object(fake.FakeBaseThreadsPlugin, 'create_threads')
2021-08-20 15:21:47 -04:00
def test_base_plugin_threads_created(self, mock_create):
2022-12-27 14:30:03 -05:00
p = fake.FakeBaseThreadsPlugin()
2021-08-20 15:21:47 -04:00
mock_create.assert_called_once()
2021-12-07 11:25:14 -05:00
p.stop_threads()
2021-08-20 15:21:47 -04:00
def test_base_plugin_threads(self):
2022-12-27 14:30:03 -05:00
p = fake.FakeBaseThreadsPlugin()
2021-08-20 15:21:47 -04:00
actual = p.create_threads()
self.assertTrue(isinstance(actual, fake.FakeThread))
p.stop_threads()
2025-03-28 09:16:06 -04:00
@mock.patch.object(fake.FakeRegexCommandPlugin, 'process')
2021-08-20 15:21:47 -04:00
def test_regex_base_not_called(self, mock_process):
2022-12-27 14:30:03 -05:00
CONF.callsign = fake.FAKE_TO_CALLSIGN
p = fake.FakeRegexCommandPlugin()
2025-03-28 09:16:06 -04:00
packet = fake.fake_packet(message='a')
2021-08-20 15:21:47 -04:00
expected = None
actual = p.filter(packet)
self.assertEqual(expected, actual)
mock_process.assert_not_called()
2025-03-28 09:16:06 -04:00
packet = fake.fake_packet(tocall='notMe', message='f')
2021-08-20 15:21:47 -04:00
expected = None
actual = p.filter(packet)
self.assertEqual(expected, actual)
mock_process.assert_not_called()
2021-07-14 20:50:41 -04:00
2021-08-20 15:21:47 -04:00
packet = fake.fake_packet(
2022-12-16 15:28:31 -05:00
message_format=core.PACKET_TYPE_MICE,
2021-08-20 15:21:47 -04:00
)
2022-12-27 14:30:03 -05:00
expected = packets.NULL_MESSAGE
2021-08-20 15:21:47 -04:00
actual = p.filter(packet)
self.assertEqual(expected, actual)
mock_process.assert_not_called()
2021-07-14 20:50:41 -04:00
2024-03-20 09:34:31 -04:00
packet = fake.fake_ack_packet()
2022-12-27 14:30:03 -05:00
expected = packets.NULL_MESSAGE
2021-08-20 15:21:47 -04:00
actual = p.filter(packet)
self.assertEqual(expected, actual)
mock_process.assert_not_called()
2021-07-14 20:50:41 -04:00
2025-03-28 09:16:06 -04:00
@mock.patch.object(fake.FakeRegexCommandPlugin, 'process')
2021-08-20 15:21:47 -04:00
def test_regex_base_assert_called(self, mock_process):
2022-12-27 14:30:03 -05:00
CONF.callsign = fake.FAKE_TO_CALLSIGN
p = fake.FakeRegexCommandPlugin()
2025-03-28 09:16:06 -04:00
packet = fake.fake_packet(message='f')
2021-08-20 15:21:47 -04:00
p.filter(packet)
mock_process.assert_called_once()
def test_regex_base_process_called(self):
2022-12-27 14:30:03 -05:00
CONF.callsign = fake.FAKE_TO_CALLSIGN
p = fake.FakeRegexCommandPlugin()
2021-08-20 15:21:47 -04:00
2025-03-28 09:16:06 -04:00
packet = fake.fake_packet(message='f')
2021-08-20 15:21:47 -04:00
expected = fake.FAKE_MESSAGE_TEXT
actual = p.filter(packet)
self.assertEqual(expected, actual)
2025-03-28 09:16:06 -04:00
packet = fake.fake_packet(message='F')
2021-08-20 15:21:47 -04:00
expected = fake.FAKE_MESSAGE_TEXT
actual = p.filter(packet)
self.assertEqual(expected, actual)
2025-03-28 09:16:06 -04:00
packet = fake.fake_packet(message='fake')
2021-08-20 15:21:47 -04:00
expected = fake.FAKE_MESSAGE_TEXT
actual = p.filter(packet)
self.assertEqual(expected, actual)
2025-03-28 09:16:06 -04:00
packet = fake.fake_packet(message='FAKE')
2021-08-20 15:21:47 -04:00
expected = fake.FAKE_MESSAGE_TEXT
actual = p.filter(packet)
self.assertEqual(expected, actual)