]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
New test to check that addWriter followed by removeWriter properly removes the writer...
authorOvidiu Predescu <ovidiu@gmail.com>
Thu, 14 Jul 2011 23:24:42 +0000 (16:24 -0700)
committerOvidiu Predescu <ovidiu@gmail.com>
Thu, 14 Jul 2011 23:24:42 +0000 (16:24 -0700)
tornado/test/twistedreactor_test.py

index cc4e2f1f7c29a36c48ca1f719c7c284ae384732a..0e72ccfe9b5873808f6e7c2d2d8d8a32919ae972 100644 (file)
@@ -156,11 +156,14 @@ class Reader:
 
     def logPrefix(self): return "Reader"
 
+    def close(self):
+        self._fd.close()
+
     def fileno(self):
         return self._fd.fileno()
 
     def connectionLost(self, reason):
-        self._fd.close()
+        self.close()
 
     def doRead(self):
         self._callback(self._fd)
@@ -174,11 +177,14 @@ class Writer:
 
     def logPrefix(self): return "Writer"
 
+    def close(self):
+        self._fd.close()
+
     def fileno(self):
         return self._fd.fileno()
 
     def connectionLost(self, reason):
-        self._fd.close()
+        self.close()
 
     def doWrite(self):
         self._callback(self._fd)
@@ -214,22 +220,50 @@ class ReactorReaderWriterTest(unittest.TestCase):
         self._reader = Reader(self._p1, checkReadInput)
         self._writer = Writer(self._p2, writeOnce)
 
-        # Test that adding and removing the writer doesn't cause
-        # unintended effects.
-        self._reactor.addWriter(self._writer)
-        self._reactor.removeWriter(self._writer)
         self._reactor.addWriter(self._writer)
 
-        # Test that adding and removing the reader doesn't cause
-        # unintended effects.
+        # Test that adding the reader twice adds it only once to
+        # IOLoop.
         self._reactor.addReader(self._reader)
-        self._reactor.removeReader(self._reader)
         self._reactor.addReader(self._reader)
 
     def testReadWrite(self):
         self._reactor.callWhenRunning(self._testReadWrite)
         self._reactor.run()
 
+    def _testNoWriter(self):
+        """
+        In this test we have no writer. Make sure the reader doesn't
+        read anything.
+        """
+        def checkReadInput(fd):
+            self.fail("Must not be called.")
+
+        def stopTest():
+            # Close the writer here since the IOLoop doesn't know
+            # about it.
+            self._writer.close()
+            self._reactor.stop()
+        self._reader = Reader(self._p1, checkReadInput)
+
+        # We create a writer, but it should never be invoked.
+        self._writer = Writer(self._p2, lambda fd: fd.write('x'))
+
+        # Test that adding and removing the writer leaves us with no writer.
+        self._reactor.addWriter(self._writer)
+        self._reactor.removeWriter(self._writer)
+
+        # Test that adding and removing the reader doesn't cause
+        # unintended effects.
+        self._reactor.addReader(self._reader)
+
+        # Wake up after a moment and stop the test
+        self._reactor.callLater(0.001, stopTest)
+
+    def testNoWriter(self):
+        self._reactor.callWhenRunning(self._testNoWriter)
+        self._reactor.run()
+
 if twisted is None:
     del ReactorWhenRunningTest
     del ReactorCallLaterTest