mirror of
https://github.com/craigerl/aprsd.git
synced 2024-11-15 21:01:47 -05:00
Hemna
1477e61b0f
this patch removes the need for dacite2 package for creating packet objects from the aprslib decoded packet dictionary. moved the factory method from the base Packet object to the core module.
202 lines
6.3 KiB
Python
202 lines
6.3 KiB
Python
import unittest
|
|
from unittest import mock
|
|
|
|
from oslo_config import cfg
|
|
|
|
from aprsd import conf # noqa: F401
|
|
from aprsd import packets
|
|
from aprsd import plugin as aprsd_plugin
|
|
from aprsd import plugins, stats
|
|
from aprsd.packets import core
|
|
|
|
from . import fake
|
|
|
|
|
|
CONF = cfg.CONF
|
|
|
|
|
|
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):
|
|
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
|
|
|
|
def test_get_plugins_no_plugins(self):
|
|
CONF.enabled_plugins = []
|
|
pm = aprsd_plugin.PluginManager()
|
|
plugin_list = pm.get_plugins()
|
|
self.assertEqual([], plugin_list)
|
|
|
|
def test_get_plugins_with_plugins(self):
|
|
CONF.enabled_plugins = ["aprsd.plugins.ping.PingPlugin"]
|
|
pm = aprsd_plugin.PluginManager()
|
|
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):
|
|
pm = aprsd_plugin.PluginManager()
|
|
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):
|
|
CONF.enabled_plugins = ["aprsd.plugins.ping.PingPlugin"]
|
|
pm = aprsd_plugin.PluginManager()
|
|
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,
|
|
),
|
|
)
|
|
|
|
|
|
class TestPlugin(unittest.TestCase):
|
|
|
|
def setUp(self) -> None:
|
|
self.fromcall = fake.FAKE_FROM_CALLSIGN
|
|
self.ack = 1
|
|
self.config_and_init()
|
|
|
|
def tearDown(self) -> None:
|
|
stats.APRSDStats._instance = None
|
|
packets.WatchList._instance = None
|
|
packets.SeenList._instance = None
|
|
packets.PacketTrack._instance = None
|
|
self.config = None
|
|
|
|
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
|
|
|
|
|
|
class TestPluginBase(TestPlugin):
|
|
|
|
@mock.patch.object(fake.FakeBaseNoThreadsPlugin, "process")
|
|
def test_base_plugin_no_threads(self, mock_process):
|
|
p = fake.FakeBaseNoThreadsPlugin()
|
|
|
|
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):
|
|
p = fake.FakeBaseThreadsPlugin()
|
|
mock_create.assert_called_once()
|
|
p.stop_threads()
|
|
|
|
def test_base_plugin_threads(self):
|
|
p = fake.FakeBaseThreadsPlugin()
|
|
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):
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
p = fake.FakeRegexCommandPlugin()
|
|
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()
|
|
|
|
packet = fake.fake_packet(
|
|
message_format=core.PACKET_TYPE_MICE,
|
|
)
|
|
expected = packets.NULL_MESSAGE
|
|
actual = p.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
mock_process.assert_not_called()
|
|
|
|
packet = fake.fake_ack_packet()
|
|
expected = packets.NULL_MESSAGE
|
|
actual = p.filter(packet)
|
|
self.assertEqual(expected, actual)
|
|
mock_process.assert_not_called()
|
|
|
|
@mock.patch.object(fake.FakeRegexCommandPlugin, "process")
|
|
def test_regex_base_assert_called(self, mock_process):
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
p = fake.FakeRegexCommandPlugin()
|
|
packet = fake.fake_packet(message="f")
|
|
p.filter(packet)
|
|
mock_process.assert_called_once()
|
|
|
|
def test_regex_base_process_called(self):
|
|
CONF.callsign = fake.FAKE_TO_CALLSIGN
|
|
p = fake.FakeRegexCommandPlugin()
|
|
|
|
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)
|