From 6583a47dde1b851aee99de3c38c6331a22ede260 Mon Sep 17 00:00:00 2001 From: Michal 'vorner' Vaner Date: Tue, 6 Dec 2011 11:07:28 +0100 Subject: [PATCH] [1429] Catch an exception --- src/bin/bind10/bind10_src.py.in | 9 ++++++++- src/bin/bind10/tests/bind10_test.py.in | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/bin/bind10/bind10_src.py.in b/src/bin/bind10/bind10_src.py.in index 7f9f9338d4..da0514cc30 100755 --- a/src/bin/bind10/bind10_src.py.in +++ b/src/bin/bind10/bind10_src.py.in @@ -886,7 +886,14 @@ class BoB: so to the _socket_cache. """ logger.error(BIND10_LOST_SOCKET_CONSUMER, unix_socket.fileno()) - self._socket_cache.drop_application(unix_socket.fileno()) + try: + self._socket_cache.drop_application(unix_socket.fileno()) + except ValueError: + # This means the application holds no sockets. It's harmless, as it + # can happen in real life - for example, it requests a socket, but + # get_socket doesn't find it, so the application dies. It should be + # rare, though. + pass def insert_creator(self, creator): """ diff --git a/src/bin/bind10/tests/bind10_test.py.in b/src/bin/bind10/tests/bind10_test.py.in index e77ca6dbf8..8dd1921731 100644 --- a/src/bin/bind10/tests/bind10_test.py.in +++ b/src/bin/bind10/tests/bind10_test.py.in @@ -159,7 +159,12 @@ class TestCacheCommands(unittest.TestCase): """ Part of pretending to be the cache. Logs the parameter to self.__drop_app_called. + + In the case self.__raise_exception is set, the exception there + is raised instead. """ + if self.__raise_exception is not None: + raise self.__raise_exception self.__drop_app_called = application def test_consumer_dead(self): @@ -169,6 +174,16 @@ class TestCacheCommands(unittest.TestCase): self.__boss.socket_consumer_dead(self.FalseSocket()) self.assertEqual(42, self.__drop_app_called) + def test_consumer_dead_invalid(self): + """ + Test that it doesn't crash in case the application is not known to + the cache, the boss doesn't crash, as this actually can happen in + practice. + """ + self.__raise_exception = ValueError("This application is unknown") + # This doesn't crash + self.__boss.socket_consumer_dead(self.FalseSocket()) + def get_socket(self, token, application): """ Part of pretending to be the cache. If there's anything in