diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f4691b5..c3ad92e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ on: - dev env: - DEFAULT_PYTHON: 3.7 + DEFAULT_PYTHON: 3.9 jobs: code-quality: diff --git a/Dockerfile b/Dockerfile index 35ce6c5..fe29be4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ ARG ARCH=amd64 -FROM $ARCH/python:3.7-alpine +FROM $ARCH/python:3.9-alpine EXPOSE 443 EXPOSE 5223 diff --git a/bumper/confserver.py b/bumper/confserver.py index 916e0b1..c268395 100644 --- a/bumper/confserver.py +++ b/bumper/confserver.py @@ -159,17 +159,9 @@ class ConfServer: ) await self.site.start() - - except PermissionError as e: - confserverlog.error(e.strerror) - asyncio.create_task(bumper.shutdown()) - - except asyncio.CancelledError: - pass - except Exception as e: confserverlog.exception(f"{e}") - asyncio.create_task(bumper.shutdown()) + raise e async def stop_server(self): try: diff --git a/bumper/xmppserver.py b/bumper/xmppserver.py index b4d5519..831d360 100644 --- a/bumper/xmppserver.py +++ b/bumper/xmppserver.py @@ -40,17 +40,9 @@ class XMPPServer: self.server_coro = loop.create_task(self.server.serve_forever()) - except PermissionError as e: - xmppserverlog.error(e.strerror) - asyncio.create_task(bumper.shutdown()) - pass - - except asyncio.CancelledError: - pass - except Exception as e: xmppserverlog.exception(f"{e}") - asyncio.create_task(bumper.shutdown()) + raise e def disconnect(self): diff --git a/mypy.ini b/mypy.ini index 7aab8e3..c3c86d1 100644 --- a/mypy.ini +++ b/mypy.ini @@ -1,5 +1,5 @@ [mypy] -python_version = 3.7 +python_version = 3.9 show_error_codes = true follow_imports = silent ignore_missing_imports = true diff --git a/tests/test_confserver.py b/tests/test_confserver.py index 6709c91..af0ee4b 100644 --- a/tests/test_confserver.py +++ b/tests/test_confserver.py @@ -28,48 +28,13 @@ def remove_existing_db(): async def test_confserver_ssl(): - conf_server = bumper.ConfServer((HOST, 111111), usessl=True) + conf_server = bumper.ConfServer((HOST, 11111), usessl=True) conf_server.confserver_app() - asyncio.create_task(conf_server.start_server()) - - -async def test_confserver_exceptions(): - with LogCapture() as l: - - conf_server = bumper.ConfServer((HOST, 8007), usessl=True) - conf_server.confserver_app() - conf_server.site = web.TCPSite - - # bind permission - conf_server.site.start = mock.Mock( - side_effect=OSError( - 1, - "error while attempting to bind on address ('127.0.0.1', 8007): permission denied", - ) - ) - await conf_server.start_server() - - # asyncio Cancel - conf_server.site = web.TCPSite - conf_server.site.start = mock.Mock(side_effect=asyncio.CancelledError) - await conf_server.start_server() - - # general exception - conf_server.site = web.TCPSite - conf_server.site.start = mock.Mock(side_effect=Exception(1, "general")) - await conf_server.start_server() - - l.check_present( - ( - "confserver", - "ERROR", - "error while attempting to bind on address ('127.0.0.1', 8007): permission denied", - ) - ) + await conf_server.start_server() async def test_confserver_no_ssl(): - conf_server = bumper.ConfServer((HOST, 111111), usessl=False) + conf_server = bumper.ConfServer((HOST, 11112), usessl=False) conf_server.confserver_app() await conf_server.start_server() diff --git a/tests/test_xmppserver.py b/tests/test_xmppserver.py index c6cf681..11f752a 100644 --- a/tests/test_xmppserver.py +++ b/tests/test_xmppserver.py @@ -14,11 +14,11 @@ from testfixtures import LogCapture import bumper -def return_send_data(data, *args, **kwargs): +def return_send_data(data): return data -def mock_transport_extra_info(*args, **kwargs): +def mock_transport_extra_info(): return ("127.0.0.1", 5223) @@ -59,8 +59,8 @@ async def test_xmpp_server(): xmpp_server.disconnect() -async def test_client_connect_no_starttls(*args, **kwargs): - test_transport = asyncio.Transport() +async def test_client_connect_no_starttls(): + test_transport = mock.Mock() test_transport.get_extra_info = mock.Mock(return_value=mock_transport_extra_info()) test_transport.write = mock.Mock(return_value=return_send_data) xmppclient = bumper.xmppserver.XMPPAsyncClient(test_transport) @@ -98,8 +98,8 @@ async def test_client_connect_no_starttls(*args, **kwargs): assert xmppclient.state == xmppclient.INIT # Client moved to INIT state -async def test_client_end_stream(*args, **kwargs): - test_transport = asyncio.Transport() +async def test_client_end_stream(): + test_transport = mock.Mock() test_transport.get_extra_info = mock.Mock(return_value=mock_transport_extra_info()) test_transport.write = mock.Mock(return_value=return_send_data) xmppclient = bumper.xmppserver.XMPPAsyncClient(test_transport) @@ -130,8 +130,8 @@ async def test_client_end_stream(*args, **kwargs): xmppclient._parse_data(test_data) -async def test_client_connect_starttls_called(*args, **kwargs): - test_transport = asyncio.Transport() +async def test_client_connect_starttls_called(): + test_transport = mock.Mock() test_transport.get_extra_info = mock.Mock(return_value=mock_transport_extra_info()) test_transport.write = mock.Mock(return_value=return_send_data) xmppclient = bumper.xmppserver.XMPPAsyncClient(test_transport) @@ -199,65 +199,9 @@ async def test_client_connect_starttls_called(*args, **kwargs): assert xmppclient.state == xmppclient.INIT # Client moved to INIT state -async def test_xmpp_server_client_tls(): - xmpp_address = ("127.0.0.1", 5223) - xmpp_server = bumper.XMPPServer(xmpp_address) - await xmpp_server.start_async_server() - - with LogCapture("xmppserver") as l: - - async def do_stuff_after_start_tls( - ssl_reader, ssl_writer - ): # Used after starttls - - writer.write( - b"" - ) # New Stream - - await writer.drain() - - writer.write( - b'AGZ1aWRfdG1wdXNlcgAwL0lPU0Y1M0QwN0JBL3VzXzg5ODgwMmZkYmM0NDQxYjBiYzgxNWIxZDFjNjgzMDJl' - ) # Send Auth - - await writer.drain() - - reader, writer = await asyncio.open_connection("127.0.0.1", 5223) - - writer.write( - b"" - ) # Start stream - await writer.drain() - - await asyncio.sleep(0.1) - - writer.write( - b"" - ) # Send StartTLS - await writer.drain() - - await asyncio.sleep(0.1) - - # Below will upgrade connection to TLS then callback to "do_stuff_after_start_tls" - ssl_context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH) - ssl_context.check_hostname = False - ssl_context.load_verify_locations(cafile=bumper.ca_cert) - loop = asyncio.get_event_loop() - transport = writer.transport - protocol = writer.transport.get_protocol() - new_transport = await loop.start_tls( - transport, protocol, ssl_context, server_side=False - ) - protocol._stream_reader = asyncio.StreamReader(loop=loop) - protocol._client_connected_cb = do_stuff_after_start_tls - protocol.connection_made(new_transport) - - print(l) - - -async def test_client_init(*args, **kwargs): - test_transport = asyncio.Transport() +async def test_client_init(): + test_transport = mock.Mock() test_transport.get_extra_info = mock.Mock(return_value=mock_transport_extra_info()) test_transport.write = mock.Mock(return_value=return_send_data) xmppclient = bumper.xmppserver.XMPPAsyncClient(test_transport) @@ -324,8 +268,8 @@ async def test_client_init(*args, **kwargs): ) # client presence - dummy response -async def test_bot_connect(*args, **kwargs): - test_transport = asyncio.Transport() +async def test_bot_connect(): + test_transport = mock.Mock() test_transport.get_extra_info = mock.Mock(return_value=mock_transport_extra_info()) test_transport.write = mock.Mock(return_value=return_send_data) xmppclient = bumper.xmppserver.XMPPAsyncClient(test_transport) @@ -364,8 +308,8 @@ async def test_bot_connect(*args, **kwargs): assert xmppclient.type == xmppclient.BOT # Client type is now bot -async def test_bot_init(*args, **kwargs): - test_transport = asyncio.Transport() +async def test_bot_init(): + test_transport = mock.Mock() test_transport.get_extra_info = mock.Mock(return_value=mock_transport_extra_info()) test_transport.write = mock.Mock(return_value=return_send_data) xmppclient = bumper.xmppserver.XMPPAsyncClient(test_transport) @@ -430,8 +374,8 @@ async def test_bot_init(*args, **kwargs): ) # bot presence - dummy response -async def test_ping_server(*args, **kwargs): - test_transport = asyncio.Transport() +async def test_ping_server(): + test_transport = mock.Mock() test_transport.get_extra_info = mock.Mock(return_value=mock_transport_extra_info()) test_transport.write = mock.Mock(return_value=return_send_data) xmppclient = bumper.xmppserver.XMPPAsyncClient(test_transport) @@ -450,9 +394,8 @@ async def test_ping_server(*args, **kwargs): ) # ping response -async def test_ping_client_to_client(*args, **kwargs): - - test_transport = asyncio.Transport() +async def test_ping_client_to_client(): + test_transport = mock.Mock() test_transport.get_extra_info = mock.Mock(return_value=mock_transport_extra_info()) test_transport.write = mock.Mock(return_value=return_send_data) xmppclient = bumper.xmppserver.XMPPAsyncClient(test_transport) @@ -478,7 +421,7 @@ async def test_ping_client_to_client(*args, **kwargs): assert ( mock_send2.mock_calls[0][1][0] - == '' + == '' ) # ping response # Ping response from bot to user @@ -487,12 +430,12 @@ async def test_ping_client_to_client(*args, **kwargs): assert ( mock_send.mock_calls[0][1][0] - == '' + == '' ) # ping response -async def test_client_send_iq(*args, **kwargs): - test_transport = asyncio.Transport() +async def test_client_send_iq(): + test_transport = mock.Mock() test_transport.get_extra_info = mock.Mock(return_value=mock_transport_extra_info()) test_transport.write = mock.Mock(return_value=return_send_data) xmppclient = bumper.xmppserver.XMPPAsyncClient(test_transport) @@ -534,7 +477,7 @@ async def test_client_send_iq(*args, **kwargs): assert ( mock_send2.mock_calls[0][1][0] - == '' + == '' ) # command was sent to bot # Reset mock calls @@ -546,7 +489,7 @@ async def test_client_send_iq(*args, **kwargs): assert ( mock_send.mock_calls[0][1][0] - == '' + == '' ) # result sent to client # Reset mock calls @@ -558,7 +501,7 @@ async def test_client_send_iq(*args, **kwargs): assert ( mock_send.mock_calls[0][1][0] - == '' + == '' ) # result sent to ecouser.net # Reset mock calls @@ -570,7 +513,7 @@ async def test_client_send_iq(*args, **kwargs): assert ( mock_send.mock_calls[0][1][0] - == '' + == '' ) # result sent to ecouser.net # Reset mock calls @@ -582,7 +525,7 @@ async def test_client_send_iq(*args, **kwargs): assert ( mock_send.mock_calls[0][1][0] - == '' + == '' ) # result sent to ecouser.net # Reset mock calls @@ -593,7 +536,7 @@ async def test_client_send_iq(*args, **kwargs): xmppclient2._parse_data(test_data) assert ( mock_send.mock_calls[0][1][0] - == '' + == ('') ) # result sent to ecouser.net # Reset mock calls