From cb016a5406acf44e43f9ba4acdc2a620958ad768 Mon Sep 17 00:00:00 2001 From: David Rousselie Date: Mon, 9 Oct 2006 19:34:19 +0200 Subject: [PATCH] Threads exceptions handling pass exceptions throw Queue so MainThread can propagate exceptions to make tests failed when needed darcs-hash:20061009173419-86b55-9197a944aa629ab43f55d56662b8f873036cc60e.gz --- src/jcl/jabber/component.py | 26 +++++++++++++++++--------- tests/jcl/jabber/test_component.py | 10 ++++++++++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/jcl/jabber/component.py b/src/jcl/jabber/component.py index 0ad28c4..410fce8 100644 --- a/src/jcl/jabber/component.py +++ b/src/jcl/jabber/component.py @@ -102,6 +102,8 @@ class JCLComponent(Component): self.set_account_class(Account) self.version = VERSION self.accounts = [] + self.time_unit = 60 + self.queue = Queue(100) self.disco_info.add_feature("jabber:iq:version") self.disco_info.add_feature("jabber:iq:register") @@ -134,11 +136,13 @@ class JCLComponent(Component): and not self.stream.eof and self.stream.socket is not None): try: self.stream.loop_iter(JCLComponent.timeout) - except (KeyboardInterrupt, SystemExit, FatalStreamError, \ - StreamError): - raise - except: - self.__logger.exception("Exception cought:") + if self.queue.qsize(): + raise self.queue.get(0) + except Exception, e: + self.__logger.exception("Exception cought:") + # put Exception in queue to be use by unit tests + self.queue.put(e) + raise finally: if self.stream: # TODO : send unavailble from transport and all account to users @@ -190,10 +194,14 @@ class JCLComponent(Component): """Timer thread handler """ self.__logger.info("Timer thread started...") - while self.running: - self.handle_tick() - self.__logger.debug("Resetting alarm signal") - time.sleep(60) + try: + while self.running: + self.handle_tick() + self.__logger.debug("Resetting alarm signal") + time.sleep(self.time_unit) + except Exception, e: + self.queue.put(e) + raise def authenticated(self): """Override authenticated Component event handler diff --git a/tests/jcl/jabber/test_component.py b/tests/jcl/jabber/test_component.py index f6dd99c..d40bef3 100644 --- a/tests/jcl/jabber/test_component.py +++ b/tests/jcl/jabber/test_component.py @@ -127,6 +127,7 @@ class JCLComponent_TestCase(unittest.TestCase): del account.hub.threadConnection def test_run(self): + self.comp.time_unit = 1 self.comp.stream = MockStream() self.comp.stream_class = MockStream run_thread = threading.Thread(target = self.comp.run, \ @@ -151,6 +152,15 @@ class JCLComponent_TestCase(unittest.TestCase): if self.max_tick_count == 0: self.comp.running = False + def test_time_handler(self): + self.comp.time_unit = 1 + self.max_tick_count = 2 + self.comp.handle_tick = self.__handle_tick_test_time_handler + self.comp.running = True + self.comp.time_handler() + self.assertEquals(self.max_tick_count, 0) + self.assertFalse(self.comp.running) + def test_authenticated_handler(self): self.comp.stream = MockStream() self.comp.authenticated()