aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/test/test_fdesc.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/test/test_fdesc.py')
-rwxr-xr-xlib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/test/test_fdesc.py235
1 files changed, 0 insertions, 235 deletions
diff --git a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/test/test_fdesc.py b/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/test/test_fdesc.py
deleted file mode 100755
index 285b9cc3..00000000
--- a/lib/python2.7/site-packages/Twisted-12.2.0-py2.7-linux-x86_64.egg/twisted/test/test_fdesc.py
+++ /dev/null
@@ -1,235 +0,0 @@
-# Copyright (c) Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-"""
-Tests for L{twisted.internet.fdesc}.
-"""
-
-import os, sys
-import errno
-
-try:
- import fcntl
-except ImportError:
- skip = "not supported on this platform"
-else:
- from twisted.internet import fdesc
-
-from twisted.python.util import untilConcludes
-from twisted.trial import unittest
-
-
-class ReadWriteTestCase(unittest.TestCase):
- """
- Tests for fdesc.readFromFD, fdesc.writeToFD.
- """
-
- def setUp(self):
- """
- Create two non-blocking pipes that can be used in tests.
- """
- self.r, self.w = os.pipe()
- fdesc.setNonBlocking(self.r)
- fdesc.setNonBlocking(self.w)
-
-
- def tearDown(self):
- """
- Close pipes.
- """
- try:
- os.close(self.w)
- except OSError:
- pass
- try:
- os.close(self.r)
- except OSError:
- pass
-
-
- def write(self, d):
- """
- Write data to the pipe.
- """
- return fdesc.writeToFD(self.w, d)
-
-
- def read(self):
- """
- Read data from the pipe.
- """
- l = []
- res = fdesc.readFromFD(self.r, l.append)
- if res is None:
- if l:
- return l[0]
- else:
- return ""
- else:
- return res
-
-
- def test_writeAndRead(self):
- """
- Test that the number of bytes L{fdesc.writeToFD} reports as written
- with its return value are seen by L{fdesc.readFromFD}.
- """
- n = self.write("hello")
- self.failUnless(n > 0)
- s = self.read()
- self.assertEqual(len(s), n)
- self.assertEqual("hello"[:n], s)
-
-
- def test_writeAndReadLarge(self):
- """
- Similar to L{test_writeAndRead}, but use a much larger string to verify
- the behavior for that case.
- """
- orig = "0123456879" * 10000
- written = self.write(orig)
- self.failUnless(written > 0)
- result = []
- resultlength = 0
- i = 0
- while resultlength < written or i < 50:
- result.append(self.read())
- resultlength += len(result[-1])
- # Increment a counter to be sure we'll exit at some point
- i += 1
- result = "".join(result)
- self.assertEqual(len(result), written)
- self.assertEqual(orig[:written], result)
-
-
- def test_readFromEmpty(self):
- """
- Verify that reading from a file descriptor with no data does not raise
- an exception and does not result in the callback function being called.
- """
- l = []
- result = fdesc.readFromFD(self.r, l.append)
- self.assertEqual(l, [])
- self.assertEqual(result, None)
-
-
- def test_readFromCleanClose(self):
- """
- Test that using L{fdesc.readFromFD} on a cleanly closed file descriptor
- returns a connection done indicator.
- """
- os.close(self.w)
- self.assertEqual(self.read(), fdesc.CONNECTION_DONE)
-
-
- def test_writeToClosed(self):
- """
- Verify that writing with L{fdesc.writeToFD} when the read end is closed
- results in a connection lost indicator.
- """
- os.close(self.r)
- self.assertEqual(self.write("s"), fdesc.CONNECTION_LOST)
-
-
- def test_readFromInvalid(self):
- """
- Verify that reading with L{fdesc.readFromFD} when the read end is
- closed results in a connection lost indicator.
- """
- os.close(self.r)
- self.assertEqual(self.read(), fdesc.CONNECTION_LOST)
-
-
- def test_writeToInvalid(self):
- """
- Verify that writing with L{fdesc.writeToFD} when the write end is
- closed results in a connection lost indicator.
- """
- os.close(self.w)
- self.assertEqual(self.write("s"), fdesc.CONNECTION_LOST)
-
-
- def test_writeErrors(self):
- """
- Test error path for L{fdesc.writeTod}.
- """
- oldOsWrite = os.write
- def eagainWrite(fd, data):
- err = OSError()
- err.errno = errno.EAGAIN
- raise err
- os.write = eagainWrite
- try:
- self.assertEqual(self.write("s"), 0)
- finally:
- os.write = oldOsWrite
-
- def eintrWrite(fd, data):
- err = OSError()
- err.errno = errno.EINTR
- raise err
- os.write = eintrWrite
- try:
- self.assertEqual(self.write("s"), 0)
- finally:
- os.write = oldOsWrite
-
-
-
-class CloseOnExecTests(unittest.TestCase):
- """
- Tests for L{fdesc._setCloseOnExec} and L{fdesc._unsetCloseOnExec}.
- """
- program = '''
-import os, errno
-try:
- os.write(%d, 'lul')
-except OSError, e:
- if e.errno == errno.EBADF:
- os._exit(0)
- os._exit(5)
-except:
- os._exit(10)
-else:
- os._exit(20)
-'''
-
- def _execWithFileDescriptor(self, fObj):
- pid = os.fork()
- if pid == 0:
- try:
- os.execv(sys.executable, [sys.executable, '-c', self.program % (fObj.fileno(),)])
- except:
- import traceback
- traceback.print_exc()
- os._exit(30)
- else:
- # On Linux wait(2) doesn't seem ever able to fail with EINTR but
- # POSIX seems to allow it and on OS X it happens quite a lot.
- return untilConcludes(os.waitpid, pid, 0)[1]
-
-
- def test_setCloseOnExec(self):
- """
- A file descriptor passed to L{fdesc._setCloseOnExec} is not inherited
- by a new process image created with one of the exec family of
- functions.
- """
- fObj = file(self.mktemp(), 'w')
- fdesc._setCloseOnExec(fObj.fileno())
- status = self._execWithFileDescriptor(fObj)
- self.assertTrue(os.WIFEXITED(status))
- self.assertEqual(os.WEXITSTATUS(status), 0)
-
-
- def test_unsetCloseOnExec(self):
- """
- A file descriptor passed to L{fdesc._unsetCloseOnExec} is inherited by
- a new process image created with one of the exec family of functions.
- """
- fObj = file(self.mktemp(), 'w')
- fdesc._setCloseOnExec(fObj.fileno())
- fdesc._unsetCloseOnExec(fObj.fileno())
- status = self._execWithFileDescriptor(fObj)
- self.assertTrue(os.WIFEXITED(status))
- self.assertEqual(os.WEXITSTATUS(status), 20)