New test to check that addWriter followed by removeWriter properly removes the writer from IOLoop.
This commit is contained in:
parent
5eaa84b7e3
commit
051a6cac0e
|
@ -156,11 +156,14 @@ class Reader:
|
||||||
|
|
||||||
def logPrefix(self): return "Reader"
|
def logPrefix(self): return "Reader"
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
self._fd.close()
|
||||||
|
|
||||||
def fileno(self):
|
def fileno(self):
|
||||||
return self._fd.fileno()
|
return self._fd.fileno()
|
||||||
|
|
||||||
def connectionLost(self, reason):
|
def connectionLost(self, reason):
|
||||||
self._fd.close()
|
self.close()
|
||||||
|
|
||||||
def doRead(self):
|
def doRead(self):
|
||||||
self._callback(self._fd)
|
self._callback(self._fd)
|
||||||
|
@ -174,11 +177,14 @@ class Writer:
|
||||||
|
|
||||||
def logPrefix(self): return "Writer"
|
def logPrefix(self): return "Writer"
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
self._fd.close()
|
||||||
|
|
||||||
def fileno(self):
|
def fileno(self):
|
||||||
return self._fd.fileno()
|
return self._fd.fileno()
|
||||||
|
|
||||||
def connectionLost(self, reason):
|
def connectionLost(self, reason):
|
||||||
self._fd.close()
|
self.close()
|
||||||
|
|
||||||
def doWrite(self):
|
def doWrite(self):
|
||||||
self._callback(self._fd)
|
self._callback(self._fd)
|
||||||
|
@ -214,22 +220,50 @@ class ReactorReaderWriterTest(unittest.TestCase):
|
||||||
self._reader = Reader(self._p1, checkReadInput)
|
self._reader = Reader(self._p1, checkReadInput)
|
||||||
self._writer = Writer(self._p2, writeOnce)
|
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)
|
self._reactor.addWriter(self._writer)
|
||||||
|
|
||||||
# Test that adding and removing the reader doesn't cause
|
# Test that adding the reader twice adds it only once to
|
||||||
# unintended effects.
|
# IOLoop.
|
||||||
self._reactor.addReader(self._reader)
|
self._reactor.addReader(self._reader)
|
||||||
self._reactor.removeReader(self._reader)
|
|
||||||
self._reactor.addReader(self._reader)
|
self._reactor.addReader(self._reader)
|
||||||
|
|
||||||
def testReadWrite(self):
|
def testReadWrite(self):
|
||||||
self._reactor.callWhenRunning(self._testReadWrite)
|
self._reactor.callWhenRunning(self._testReadWrite)
|
||||||
self._reactor.run()
|
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:
|
if twisted is None:
|
||||||
del ReactorWhenRunningTest
|
del ReactorWhenRunningTest
|
||||||
del ReactorCallLaterTest
|
del ReactorCallLaterTest
|
||||||
|
|
Loading…
Reference in New Issue