Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_epoll.py @ 54294:dba767bc3155 legacy-trunk
remove mention of old ctypes version
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sat, 23 May 2009 20:59:09 +0000 |
| parents | e6009b9cd908 |
| children | 070530e9f18f |
| rev | line source |
|---|---|
|
45991
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
1 # Copyright (c) 2001-2006 Twisted Matrix Laboratories. |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
2 # |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
3 # Permission is hereby granted, free of charge, to any person obtaining |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
4 # a copy of this software and associated documentation files (the |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
5 # "Software"), to deal in the Software without restriction, including |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
6 # without limitation the rights to use, copy, modify, merge, publish, |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
7 # distribute, sublicense, and/or sell copies of the Software, and to |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
8 # permit persons to whom the Software is furnished to do so, subject to |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
9 # the following conditions: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
10 # |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
11 # The above copyright notice and this permission notice shall be |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
12 # included in all copies or substantial portions of the Software. |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
13 # |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
15 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
16 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
17 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
18 # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
19 # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
20 # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
21 """ |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
22 Tests for epoll wrapper. |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
23 """ |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
24 import os |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
25 import socket |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
26 import errno |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
27 import time |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
28 import select |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
29 import tempfile |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
30 import unittest |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
31 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
32 from test import test_support |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
33 if not hasattr(select, "epoll"): |
|
52353
e6009b9cd908
remove test_support.TestSkipped and just use unittest.SkipTest
Benjamin Peterson <benjamin@python.org>
parents:
46021
diff
changeset
|
34 raise unittest.SkipTest("test works only on Linux 2.6") |
|
45991
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
35 |
|
46021
af8fb53a54fd
Skip the epoll test if epoll() does not work
Neal Norwitz <nnorwitz@gmail.com>
parents:
45991
diff
changeset
|
36 try: |
|
af8fb53a54fd
Skip the epoll test if epoll() does not work
Neal Norwitz <nnorwitz@gmail.com>
parents:
45991
diff
changeset
|
37 select.epoll() |
|
af8fb53a54fd
Skip the epoll test if epoll() does not work
Neal Norwitz <nnorwitz@gmail.com>
parents:
45991
diff
changeset
|
38 except IOError, e: |
|
af8fb53a54fd
Skip the epoll test if epoll() does not work
Neal Norwitz <nnorwitz@gmail.com>
parents:
45991
diff
changeset
|
39 if e.errno == errno.ENOSYS: |
|
52353
e6009b9cd908
remove test_support.TestSkipped and just use unittest.SkipTest
Benjamin Peterson <benjamin@python.org>
parents:
46021
diff
changeset
|
40 raise unittest.SkipTest("kernel doesn't support epoll()") |
|
46021
af8fb53a54fd
Skip the epoll test if epoll() does not work
Neal Norwitz <nnorwitz@gmail.com>
parents:
45991
diff
changeset
|
41 |
|
45991
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
42 class TestEPoll(unittest.TestCase): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
43 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
44 def setUp(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
45 self.serverSocket = socket.socket() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
46 self.serverSocket.bind(('127.0.0.1', 0)) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
47 self.serverSocket.listen(1) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
48 self.connections = [self.serverSocket] |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
49 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
50 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
51 def tearDown(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
52 for skt in self.connections: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
53 skt.close() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
54 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
55 def _connected_pair(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
56 client = socket.socket() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
57 client.setblocking(False) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
58 try: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
59 client.connect(('127.0.0.1', self.serverSocket.getsockname()[1])) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
60 except socket.error, e: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
61 self.assertEquals(e.args[0], errno.EINPROGRESS) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
62 else: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
63 raise AssertionError("Connect should have raised EINPROGRESS") |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
64 server, addr = self.serverSocket.accept() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
65 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
66 self.connections.extend((client, server)) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
67 return client, server |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
68 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
69 def test_create(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
70 try: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
71 ep = select.epoll(16) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
72 except OSError, e: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
73 raise AssertionError(str(e)) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
74 self.assert_(ep.fileno() > 0, ep.fileno()) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
75 self.assert_(not ep.closed) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
76 ep.close() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
77 self.assert_(ep.closed) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
78 self.assertRaises(ValueError, ep.fileno) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
79 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
80 def test_badcreate(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
81 self.assertRaises(TypeError, select.epoll, 1, 2, 3) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
82 self.assertRaises(TypeError, select.epoll, 'foo') |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
83 self.assertRaises(TypeError, select.epoll, None) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
84 self.assertRaises(TypeError, select.epoll, ()) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
85 self.assertRaises(TypeError, select.epoll, ['foo']) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
86 self.assertRaises(TypeError, select.epoll, {}) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
87 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
88 def test_add(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
89 server, client = self._connected_pair() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
90 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
91 ep = select.epoll(2) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
92 try: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
93 ep.register(server.fileno(), select.EPOLLIN | select.EPOLLOUT) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
94 ep.register(client.fileno(), select.EPOLLIN | select.EPOLLOUT) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
95 finally: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
96 ep.close() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
97 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
98 def test_fromfd(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
99 server, client = self._connected_pair() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
100 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
101 ep = select.epoll(2) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
102 ep2 = select.epoll.fromfd(ep.fileno()) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
103 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
104 ep2.register(server.fileno(), select.EPOLLIN | select.EPOLLOUT) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
105 ep2.register(client.fileno(), select.EPOLLIN | select.EPOLLOUT) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
106 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
107 events = ep.poll(1, 4) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
108 events2 = ep2.poll(0.9, 4) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
109 self.assertEqual(len(events), 2) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
110 self.assertEqual(len(events2), 2) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
111 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
112 ep.close() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
113 try: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
114 ep2.poll(1, 4) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
115 except IOError, e: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
116 self.failUnlessEqual(e.args[0], errno.EBADF, e) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
117 else: |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
118 self.fail("epoll on closed fd didn't raise EBADF") |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
119 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
120 def test_control_and_wait(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
121 client, server = self._connected_pair() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
122 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
123 ep = select.epoll(16) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
124 ep.register(server.fileno(), |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
125 select.EPOLLIN | select.EPOLLOUT | select.EPOLLET) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
126 ep.register(client.fileno(), |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
127 select.EPOLLIN | select.EPOLLOUT | select.EPOLLET) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
128 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
129 now = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
130 events = ep.poll(1, 4) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
131 then = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
132 self.failIf(then - now > 0.1, then - now) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
133 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
134 events.sort() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
135 expected = [(client.fileno(), select.EPOLLOUT), |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
136 (server.fileno(), select.EPOLLOUT)] |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
137 expected.sort() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
138 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
139 self.assertEquals(events, expected) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
140 self.failIf(then - now > 0.01, then - now) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
141 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
142 now = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
143 events = ep.poll(timeout=2.1, maxevents=4) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
144 then = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
145 self.failIf(events) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
146 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
147 client.send("Hello!") |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
148 server.send("world!!!") |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
149 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
150 now = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
151 events = ep.poll(1, 4) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
152 then = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
153 self.failIf(then - now > 0.01) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
154 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
155 events.sort() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
156 expected = [(client.fileno(), select.EPOLLIN | select.EPOLLOUT), |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
157 (server.fileno(), select.EPOLLIN | select.EPOLLOUT)] |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
158 expected.sort() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
159 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
160 self.assertEquals(events, expected) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
161 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
162 ep.unregister(client.fileno()) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
163 ep.modify(server.fileno(), select.EPOLLOUT) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
164 now = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
165 events = ep.poll(1, 4) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
166 then = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
167 self.failIf(then - now > 0.01) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
168 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
169 expected = [(server.fileno(), select.EPOLLOUT)] |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
170 self.assertEquals(events, expected) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
171 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
172 def test_errors(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
173 self.assertRaises(ValueError, select.epoll, -2) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
174 self.assertRaises(ValueError, select.epoll().register, -1, |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
175 select.EPOLLIN) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
176 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
177 def test_unregister_closed(self): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
178 server, client = self._connected_pair() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
179 fd = server.fileno() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
180 ep = select.epoll(16) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
181 ep.register(server) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
182 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
183 now = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
184 events = ep.poll(1, 4) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
185 then = time.time() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
186 self.failIf(then - now > 0.01) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
187 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
188 server.close() |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
189 ep.unregister(fd) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
190 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
191 def test_main(): |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
192 test_support.run_unittest(TestEPoll) |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
193 |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
194 if __name__ == "__main__": |
|
728dc13327b2
Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff
changeset
|
195 test_main() |
