Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dax/jcl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Rousselie <dax@happycoders.org>2008-08-22 00:00:41 +0400
committerDavid Rousselie <dax@happycoders.org>2008-08-22 00:00:41 +0400
commitaab567d4b80f058f48825fa6fe89c6c11b987a6d (patch)
treee1b58b143070881df6886b5929a3ffecb00d6db1 /src
parentc7aa435502ec219f8c30e1fcefd525586d1b6d62 (diff)
Restart when Jabber server close the connection
darcs-hash:20080821200041-86b55-3564edeb58a6582efd4325c938ae7a9315921082.gz
Diffstat (limited to 'src')
-rw-r--r--src/jcl/jabber/component.py6
-rw-r--r--src/jcl/jabber/tests/component.py22
2 files changed, 26 insertions, 2 deletions
diff --git a/src/jcl/jabber/component.py b/src/jcl/jabber/component.py
index bcfaa46..4fca3ea 100644
--- a/src/jcl/jabber/component.py
+++ b/src/jcl/jabber/component.py
@@ -673,6 +673,7 @@ class JCLComponent(Component, object):
timer_thread = threading.Thread(target=self.time_handler,
name="TimerThread")
timer_thread.start()
+ wait_before_restart = 0
try:
try:
while (self.running and self.stream
@@ -685,6 +686,9 @@ class JCLComponent(Component, object):
self.__logger.info("Connection failed, restarting.")
return (True, 5)
finally:
+ if self.running:
+ self._restart = True
+ wait_before_restart = 5
self.running = False
timer_thread.join(JCLComponent.timeout)
self.wait_event.set()
@@ -694,7 +698,7 @@ class JCLComponent(Component, object):
self.send_stanzas(presences)
self.disconnect()
self.__logger.debug("Exitting normally")
- return (self._restart, 0)
+ return (self._restart, wait_before_restart)
def _get_restart(self):
return self._restart
diff --git a/src/jcl/jabber/tests/component.py b/src/jcl/jabber/tests/component.py
index c8888d6..046cb9a 100644
--- a/src/jcl/jabber/tests/component.py
+++ b/src/jcl/jabber/tests/component.py
@@ -2967,7 +2967,7 @@ class JCLComponent_run_TestCase(JCLComponent_TestCase):
raise self.comp.queue.get(0)
def test_run_connection_failed(self):
- """Test when connection to Jabber server failed"""
+ """Test when connection to Jabber server fails"""
class MockStreamLoopFailed(MockStream):
def connect(self):
self.connection_started = True
@@ -2988,6 +2988,26 @@ class JCLComponent_run_TestCase(JCLComponent_TestCase):
self.assertEquals(len(threads), 1)
self.assertFalse(self.comp.stream.connection_stopped)
+ def test_run_connection_closed(self):
+ """Test when connection to Jabber server is closed"""
+ def do_nothing():
+ self.comp.stream.eof = True
+ return
+ self.comp.handle_tick = do_nothing
+ self.comp.time_unit = 1
+ # Do not loop, handle_tick is virtual
+ self.comp.stream = MockStreamNoConnect()
+ self.comp.stream_class = MockStreamNoConnect
+ self.comp.restart = False
+ (result, time_to_wait) = self.comp.run()
+ self.assertEquals(time_to_wait, 5)
+ self.assertTrue(result)
+ self.assertFalse(self.comp.running)
+ self.assertTrue(self.comp.stream.connection_started)
+ threads = threading.enumerate()
+ self.assertEquals(len(threads), 1)
+ self.assertFalse(self.comp.stream.connection_stopped)
+
def test_run_unhandled_error(self):
"""Test main loop unhandled error from a component handler"""
def do_nothing():