소스 검색

100% coverage for celery.events.dumper

Ask Solem 12 년 전
부모
커밋
870c5c197a
2개의 변경된 파일25개의 추가작업 그리고 3개의 파일을 삭제
  1. 2 2
      celery/events/dumper.py
  2. 23 1
      celery/tests/bin/test_celeryevdump.py

+ 2 - 2
celery/events/dumper.py

@@ -81,16 +81,16 @@ def evdump(app=None, out=sys.stdout):
     app = app_or_default(app)
     dumper = Dumper(out=out)
     dumper.say('-> evdump: starting capture...')
-    conn = app.connection()
+    conn = app.connection().clone()
 
     def _error_handler(exc, interval):
         dumper.say(CONNECTION_ERROR % (
             conn.as_uri(), exc, humanize_seconds(interval, 'in', ' ')
         ))
 
+
     while 1:
         try:
-            conn = conn.clone()
             conn.ensure_connection(_error_handler)
             recv = app.events.Receiver(conn, handlers={'*': dumper.on_event})
             recv.capture()

+ 23 - 1
celery/tests/bin/test_celeryevdump.py

@@ -1,6 +1,6 @@
 from __future__ import absolute_import
 
-from mock import patch
+from mock import Mock, patch
 from time import time
 
 from celery.events.dumper import (
@@ -45,3 +45,25 @@ class test_Dumper(Case):
     def test_evdump(self, capture):
         capture.side_effect = KeyboardInterrupt()
         evdump()
+
+    def test_evdump_error_handler(self):
+        app = Mock(name='app')
+        with patch('celery.events.dumper.Dumper') as Dumper:
+            dumper = Dumper.return_value = Mock(name='dumper')
+            recv = app.events.Receiver.return_value = Mock()
+
+            def se(*_a, **_k):
+                recv.capture.side_effect = SystemExit()
+                raise KeyError()
+            recv.capture.side_effect = se
+
+            Conn = app.connection.return_value = Mock(name='conn')
+            conn = Conn.clone.return_value = Mock(name='cloned_conn')
+            conn.connection_errors = (KeyError, )
+            conn.channel_errors = ()
+
+            evdump(app)
+            self.assertTrue(conn.ensure_connection.called)
+            errback = conn.ensure_connection.call_args[0][0]
+            errback(KeyError(), 1)
+            self.assertTrue(conn.as_uri.called)