From 92d2fa084d1b6e51ed3e8cc5845da6c1f0211ca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Sat, 21 Nov 2015 23:05:22 +0100 Subject: [PATCH 1/2] Test the gateway --- ogn/gateway/manage.py | 10 ++++++---- tests/gateway/__init__.py | 0 tests/gateway/test_manage.py | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 tests/gateway/__init__.py create mode 100644 tests/gateway/test_manage.py diff --git a/ogn/gateway/manage.py b/ogn/gateway/manage.py index 3c6d756..2e4a85d 100644 --- a/ogn/gateway/manage.py +++ b/ogn/gateway/manage.py @@ -18,8 +18,9 @@ def run(aprs_user="anon-dev"): gateway.connect_db() while user_interrupted is False: - print("Connect OGN gateway") + print("Connect OGN gateway as {}".format(aprs_user)) gateway.connect(aprs_user) + socket_open = True try: gateway.run() @@ -28,10 +29,11 @@ def run(aprs_user="anon-dev"): user_interrupted = True except BrokenPipeError: print("BrokenPipeError") - except socket.err: + except socket.error: print("socket error") + socket_open = False - print("Disconnect OGN gateway") - gateway.disconnect() + if socket_open: + gateway.disconnect() print("\nExit OGN gateway") diff --git a/tests/gateway/__init__.py b/tests/gateway/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/gateway/test_manage.py b/tests/gateway/test_manage.py new file mode 100644 index 0000000..178673a --- /dev/null +++ b/tests/gateway/test_manage.py @@ -0,0 +1,35 @@ +import unittest +import unittest.mock as mock + +from ogn.gateway.manage import run + + +class GatewayTest(unittest.TestCase): + + # try simple user interrupt + @mock.patch('ogn.gateway.manage.ognGateway') + def test_user_interruption(self, mock_gateway): + instance = mock_gateway.return_value + instance.run.side_effect = KeyboardInterrupt() + + run("user_1") + + instance.connect_db.assert_called_once_with() + instance.connect.assert_called_once_with("user_1") + instance.run.assert_called_once_with() + instance.disconnect.assert_called_once_with() + + # make BrokenPipeErrors and a socket error (may happen) and then a user interrupt (important!) + @mock.patch('ogn.gateway.manage.ognGateway') + def test_BrokenPipeError(self, mock_gateway): + instance = mock_gateway.return_value + instance.run.side_effect = [BrokenPipeError(), BrokenPipeError(), KeyboardInterrupt()] + + run("user_2") + + instance.connect_db.assert_called_once_with() + self.assertTrue(instance.run.call_count, 3) + self.assertTrue(instance.disconnect.call_count, 2) # not called if socket crashed + +if __name__ == '__main__': + unittest.main() From d1a4fdecfc9537b3cdd50da3c7c523cbb8d2df2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Sat, 21 Nov 2015 23:17:15 +0100 Subject: [PATCH 2/2] Forgot the socket error --- tests/gateway/test_manage.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/gateway/test_manage.py b/tests/gateway/test_manage.py index 178673a..b3a4bb0 100644 --- a/tests/gateway/test_manage.py +++ b/tests/gateway/test_manage.py @@ -1,6 +1,8 @@ import unittest import unittest.mock as mock +import socket + from ogn.gateway.manage import run @@ -23,13 +25,14 @@ class GatewayTest(unittest.TestCase): @mock.patch('ogn.gateway.manage.ognGateway') def test_BrokenPipeError(self, mock_gateway): instance = mock_gateway.return_value - instance.run.side_effect = [BrokenPipeError(), BrokenPipeError(), KeyboardInterrupt()] + instance.run.side_effect = [BrokenPipeError(), socket.error(), KeyboardInterrupt()] run("user_2") instance.connect_db.assert_called_once_with() - self.assertTrue(instance.run.call_count, 3) - self.assertTrue(instance.disconnect.call_count, 2) # not called if socket crashed + self.assertEqual(instance.connect.call_count, 3) + self.assertEqual(instance.run.call_count, 3) + self.assertEqual(instance.disconnect.call_count, 2) # not called if socket crashed if __name__ == '__main__': unittest.main()