mirror of
https://github.com/craigerl/aprsd.git
synced 2025-06-18 22:32:31 -04:00
This patch includes a completely reworked client structure. There is now only 1 client object, that loads the appropriate drivers. The drivers are fake, aprsis and tcpkiss. The TCPKISS client was written from scratch to avoid using asyncio. Asyncion is nothing but a pain in the ass.
101 lines
3.8 KiB
Python
101 lines
3.8 KiB
Python
import unittest
|
|
from unittest import mock
|
|
|
|
from aprsd.client.drivers.registry import DriverRegistry
|
|
|
|
from ..mock_client_driver import MockClientDriver
|
|
|
|
|
|
class TestDriverRegistry(unittest.TestCase):
|
|
"""Unit tests for the DriverRegistry class."""
|
|
|
|
def setUp(self):
|
|
# Reset the singleton instance before each test
|
|
DriverRegistry._singleton_instances = {}
|
|
self.registry = DriverRegistry()
|
|
self.registry.drivers = []
|
|
|
|
# Mock APRSISDriver completely
|
|
self.aprsis_patcher = mock.patch('aprsd.client.drivers.aprsis.APRSISDriver')
|
|
mock_aprsis_class = self.aprsis_patcher.start()
|
|
mock_aprsis_class.is_enabled.return_value = False
|
|
mock_aprsis_class.is_configured.return_value = False
|
|
|
|
# Mock the instance methods as well
|
|
mock_instance = mock_aprsis_class.return_value
|
|
mock_instance.is_enabled.return_value = False
|
|
mock_instance.is_configured.return_value = False
|
|
|
|
# Mock CONF to prevent password check
|
|
self.conf_patcher = mock.patch('aprsd.client.drivers.aprsis.CONF')
|
|
mock_conf = self.conf_patcher.start()
|
|
mock_conf.aprs_network.password = 'dummy'
|
|
mock_conf.aprs_network.login = 'dummy'
|
|
|
|
def tearDown(self):
|
|
# Reset the singleton instance after each test
|
|
DriverRegistry().drivers = []
|
|
self.aprsis_patcher.stop()
|
|
self.conf_patcher.stop()
|
|
|
|
def test_get_driver_with_valid_driver(self):
|
|
"""Test getting an enabled and configured driver."""
|
|
# Add an enabled and configured driver
|
|
driver = MockClientDriver
|
|
driver.is_enabled = mock.MagicMock(return_value=True)
|
|
driver.is_configured = mock.MagicMock(return_value=True)
|
|
self.registry.register(MockClientDriver)
|
|
|
|
# Get the driver
|
|
result = self.registry.get_driver()
|
|
print(result)
|
|
self.assertTrue(isinstance(result, MockClientDriver))
|
|
|
|
def test_get_driver_with_disabled_driver(self):
|
|
"""Test getting a driver when only disabled drivers exist."""
|
|
driver = MockClientDriver
|
|
driver.is_enabled = mock.MagicMock(return_value=False)
|
|
driver.is_configured = mock.MagicMock(return_value=False)
|
|
self.registry.register(driver)
|
|
|
|
with self.assertRaises(ValueError) as context:
|
|
self.registry.get_driver()
|
|
self.assertIn('No enabled driver found', str(context.exception))
|
|
|
|
def test_get_driver_with_unconfigured_driver(self):
|
|
"""Test getting a driver when only unconfigured drivers exist."""
|
|
driver = MockClientDriver
|
|
driver.is_enabled = mock.MagicMock(return_value=True)
|
|
driver.is_configured = mock.MagicMock(return_value=False)
|
|
self.registry.register(driver)
|
|
|
|
with self.assertRaises(ValueError) as context:
|
|
self.registry.get_driver()
|
|
self.assertIn('No enabled driver found', str(context.exception))
|
|
|
|
def test_get_driver_with_no_drivers(self):
|
|
"""Test getting a driver when no drivers exist."""
|
|
# Try to get a driver
|
|
with self.assertRaises(ValueError) as context:
|
|
self.registry.get_driver()
|
|
self.assertIn('No enabled driver found', str(context.exception))
|
|
|
|
def test_get_driver_with_multiple_drivers(self):
|
|
"""Test getting a driver when multiple valid drivers exist."""
|
|
# Add multiple drivers
|
|
driver1 = MockClientDriver
|
|
driver1.is_enabled = mock.MagicMock(return_value=True)
|
|
driver1.is_configured = mock.MagicMock(return_value=True)
|
|
driver2 = MockClientDriver
|
|
self.registry.register(driver1)
|
|
self.registry.register(driver2)
|
|
|
|
# Get the driver - should return the first one
|
|
result = self.registry.get_driver()
|
|
# We can only check that it's a MockDriver instance
|
|
self.assertTrue(isinstance(result, MockClientDriver))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|