[CalendarServer-changes] [11678] CalendarServer/trunk/twext/python

source_changes at macosforge.org source_changes at macosforge.org
Thu Sep 12 14:17:25 PDT 2013


Revision: 11678
          http://trac.calendarserver.org//changeset/11678
Author:   wsanchez at apple.com
Date:     2013-09-12 14:17:25 -0700 (Thu, 12 Sep 2013)
Log Message:
-----------
test_fanOut() didn't actually test that evetns were seen.
Add test_observerRaises().

Modified Paths:
--------------
    CalendarServer/trunk/twext/python/log.py
    CalendarServer/trunk/twext/python/test/test_log.py

Modified: CalendarServer/trunk/twext/python/log.py
===================================================================
--- CalendarServer/trunk/twext/python/log.py	2013-09-12 20:53:04 UTC (rev 11677)
+++ CalendarServer/trunk/twext/python/log.py	2013-09-12 21:17:25 UTC (rev 11678)
@@ -245,12 +245,12 @@
             for key, value in event.items():
                 try:
                     keyFormatted = u"{key!r}".format(key=key)
-                except:
+                except BaseException:
                     keyFormatted = u"<UNFORMATTABLE KEY>"
 
                 try:
                     valueFormatted = u"{value!r}".format(value=value)
-                except:
+                except BaseException:
                     valueFormatted = u"<UNFORMATTABLE VALUE>"
 
                 items.append(" = ".join((keyFormatted, valueFormatted)))
@@ -556,7 +556,7 @@
         for observer in self.observers:
             try:
                 observer(event)
-            except:
+            except BaseException as e:
                 #
                 # We have to remove the offending observer because
                 # we're going to badmouth it to all of its friends
@@ -565,8 +565,8 @@
                 #
                 self.removeObserver(observer)
                 try:
-                    self.log.failure("Observer {observer} raised an exception; removing.", observer=observer)
-                except:
+                    self.log.failure("Temporarily removing observer {observer} due to exception: {e}", observer=observer, e=e)
+                except BaseException:
                     pass
                 finally:
                     self.addObserver(observer)

Modified: CalendarServer/trunk/twext/python/test/test_log.py
===================================================================
--- CalendarServer/trunk/twext/python/test/test_log.py	2013-09-12 20:53:04 UTC (rev 11677)
+++ CalendarServer/trunk/twext/python/test/test_log.py	2013-09-12 21:17:25 UTC (rev 11678)
@@ -200,7 +200,7 @@
         self.assertEquals(
             formatWithCall(
                 u"Hello, {repr()!r}.",
-                dict(repr=lambda: 'repr')
+                dict(repr=lambda: "repr")
             ),
             "Hello, 'repr'."
         )
@@ -539,20 +539,46 @@
         """
         L{LogPublisher} calls its observers.
         """
-        e1 = []
-        e2 = []
-        e3 = []
+        event = dict(foo=1, bar=2)
 
-        o1 = lambda e: e1.append(e)
-        o2 = lambda e: e2.append(e)
-        o3 = lambda e: e3.append(e)
+        events1 = []
+        events2 = []
+        events3 = []
 
+        o1 = lambda e: events1.append(e)
+        o2 = lambda e: events2.append(e)
+        o3 = lambda e: events3.append(e)
+
         publisher = LogPublisher(o1, o2, o3)
-        publisher.removeObserver(o2)
-        self.assertEquals(set((o1, o3)), set(publisher.observers))
+        publisher(event)
+        self.assertIn(event, events1)
+        self.assertIn(event, events2)
+        self.assertIn(event, events3)
 
 
+    def test_observerRaises(self):
+        event = dict(foo=1, bar=2)
+        exception = RuntimeError("ARGH! EVIL DEATH!")
 
+        events = []
+
+        def o(event):
+            events.append(event)
+            raise exception
+
+        publisher = LogPublisher(o)
+        publisher(event)
+
+        # Verify that the observer saw my event
+        self.assertIn(event, events)
+
+        # Verify that the observer raised my exception
+        errors = self.flushLoggedErrors(exception.__class__)
+        self.assertEquals(len(errors), 1)
+        self.assertIdentical(errors[0].value, exception)
+
+
+
 class FilteringLogObserverTests(SetUpTearDown, unittest.TestCase):
     """
     Tests for L{FilteringLogObserver}.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130912/3d43049d/attachment.html>


More information about the calendarserver-changes mailing list