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
|
|
|
|
|
|
|
|
from aprsd import conf # noqa: F401
|
2022-12-21 11:08:57 -05:00
|
|
|
from aprsd import packets
|
|
|
|
from aprsd import plugin as aprsd_plugin
|
|
|
|
from aprsd import plugins, stats
|
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
|
|
|
|
|
2020-12-25 16:45:28 -05: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()
|
|
|
|
|
|
|
|
def tearDown(self) -> None:
|
|
|
|
self.config = None
|
|
|
|
aprsd_plugin.PluginManager._instance = None
|
|
|
|
|
|
|
|
def config_and_init(self):
|
2022-12-27 14:30:03 -05:00
|
|
|
CONF.callsign = self.fromcall
|
|
|
|
CONF.aprs_network.login = fake.FAKE_TO_CALLSIGN
|
|
|
|
CONF.aprs_fi.apiKey = "something"
|
|
|
|
CONF.enabled_plugins = "aprsd.plugins.ping.PingPlugin"
|
|
|
|
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):
|
2022-12-27 14:30:03 -05:00
|
|
|
CONF.enabled_plugins = ["aprsd.plugins.ping.PingPlugin"]
|
|
|
|
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()
|
2022-12-27 14:30:03 -05:00
|
|
|
print(plugin_list)
|
2022-12-21 11:08:57 -05:00
|
|
|
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):
|
2022-12-27 14:30:03 -05:00
|
|
|
CONF.enabled_plugins = ["aprsd.plugins.ping.PingPlugin"]
|
|
|
|
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()
|
|
|
|
|
|
|
|
def tearDown(self) -> None:
|
|
|
|
stats.APRSDStats._instance = 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
|
|
|
|
|
2022-12-27 14:30:03 -05:00
|
|
|
def config_and_init(self):
|
|
|
|
CONF.callsign = self.fromcall
|
|
|
|
CONF.aprs_network.login = fake.FAKE_TO_CALLSIGN
|
|
|
|
CONF.aprs_fi.apiKey = "something"
|
|
|
|
CONF.enabled_plugins = "aprsd.plugins.ping.PingPlugin"
|
|
|
|
CONF.enable_save = False
|
2020-12-25 16:45:28 -05:00
|
|
|
|
2021-12-07 11:25:14 -05:00
|
|
|
|
|
|
|
class TestPluginBase(TestPlugin):
|
|
|
|
|
2021-08-20 15:21:47 -04:00
|
|
|
@mock.patch.object(fake.FakeBaseNoThreadsPlugin, "process")
|
|
|
|
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)
|
|
|
|
|
|
|
|
expected = "1.0"
|
|
|
|
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()
|
|
|
|
|
|
|
|
@mock.patch.object(fake.FakeBaseThreadsPlugin, "create_threads")
|
|
|
|
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()
|
|
|
|
|
|
|
|
@mock.patch.object(fake.FakeRegexCommandPlugin, "process")
|
|
|
|
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()
|
2021-08-20 15:21:47 -04:00
|
|
|
packet = fake.fake_packet(message="a")
|
|
|
|
expected = None
|
|
|
|
actual = p.filter(packet)
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
mock_process.assert_not_called()
|
|
|
|
|
|
|
|
packet = fake.fake_packet(tocall="notMe", message="f")
|
|
|
|
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
|
|
|
|
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_ACK,
|
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
|
|
|
|
2021-08-20 15:21:47 -04:00
|
|
|
@mock.patch.object(fake.FakeRegexCommandPlugin, "process")
|
|
|
|
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()
|
2021-08-20 15:21:47 -04:00
|
|
|
packet = fake.fake_packet(message="f")
|
|
|
|
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
|
|
|
|
|
|
|
packet = fake.fake_packet(message="f")
|
|
|
|
expected = fake.FAKE_MESSAGE_TEXT
|
|
|
|
actual = p.filter(packet)
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
|
|
packet = fake.fake_packet(message="F")
|
|
|
|
expected = fake.FAKE_MESSAGE_TEXT
|
|
|
|
actual = p.filter(packet)
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
|
|
packet = fake.fake_packet(message="fake")
|
|
|
|
expected = fake.FAKE_MESSAGE_TEXT
|
|
|
|
actual = p.filter(packet)
|
|
|
|
self.assertEqual(expected, actual)
|
|
|
|
|
|
|
|
packet = fake.fake_packet(message="FAKE")
|
|
|
|
expected = fake.FAKE_MESSAGE_TEXT
|
|
|
|
actual = p.filter(packet)
|
|
|
|
self.assertEqual(expected, actual)
|