2022-03-13 16:11:20 +01:00
|
|
|
from pathlib import Path
|
|
|
|
from unittest import IsolatedAsyncioTestCase
|
|
|
|
from unittest.mock import AsyncMock, MagicMock, patch
|
|
|
|
|
|
|
|
from asyncio_taskpool.control.client import TCPControlClient, UnixControlClient
|
|
|
|
from asyncio_taskpool.control import __main__ as module
|
|
|
|
|
|
|
|
|
|
|
|
class CLITestCase(IsolatedAsyncioTestCase):
|
|
|
|
|
|
|
|
def test_parse_cli(self):
|
|
|
|
socket_path = '/some/path/to.sock'
|
|
|
|
args = [module.UNIX, socket_path]
|
|
|
|
expected_kwargs = {
|
|
|
|
module.CLIENT_CLASS: UnixControlClient,
|
|
|
|
module.SOCKET_PATH: Path(socket_path)
|
|
|
|
}
|
|
|
|
parsed_kwargs = module.parse_cli(args)
|
|
|
|
self.assertDictEqual(expected_kwargs, parsed_kwargs)
|
|
|
|
|
|
|
|
host, port = '1.2.3.4', '1234'
|
|
|
|
args = [module.TCP, host, port]
|
|
|
|
expected_kwargs = {
|
|
|
|
module.CLIENT_CLASS: TCPControlClient,
|
|
|
|
module.HOST: host,
|
|
|
|
module.PORT: int(port)
|
|
|
|
}
|
|
|
|
parsed_kwargs = module.parse_cli(args)
|
|
|
|
self.assertDictEqual(expected_kwargs, parsed_kwargs)
|
|
|
|
|
|
|
|
with patch('sys.stderr'):
|
|
|
|
with self.assertRaises(SystemExit):
|
|
|
|
module.parse_cli(['invalid', 'foo', 'bar'])
|
|
|
|
|
|
|
|
@patch.object(module, 'parse_cli')
|
|
|
|
async def test_main(self, mock_parse_cli: MagicMock):
|
|
|
|
mock_client_start = AsyncMock()
|
|
|
|
mock_client = MagicMock(start=mock_client_start)
|
|
|
|
mock_client_cls = MagicMock(return_value=mock_client)
|
|
|
|
mock_client_kwargs = {'foo': 123, 'bar': 456, 'baz': 789}
|
2022-04-08 11:53:53 +02:00
|
|
|
mock_parse_cli.return_value = {module.CLIENT_CLASS: mock_client_cls, **mock_client_kwargs}
|
2022-03-13 16:11:20 +01:00
|
|
|
self.assertIsNone(await module.main())
|
|
|
|
mock_parse_cli.assert_called_once_with()
|
|
|
|
mock_client_cls.assert_called_once_with(**mock_client_kwargs)
|
|
|
|
mock_client_start.assert_awaited_once_with()
|