annotate Lib/test/test_kqueue.py @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents b36cb4602e21
children cfd4cd15809e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 """
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
2 Tests for kqueue wrapper.
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
3 """
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
4 import socket
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
5 import errno
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
6 import time
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
7 import select
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
8 import sys
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
9 import unittest
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 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
12 if not hasattr(select, "kqueue"):
52353
e6009b9cd908 remove test_support.TestSkipped and just use unittest.SkipTest
Benjamin Peterson <benjamin@python.org>
parents: 51013
diff changeset
13 raise unittest.SkipTest("test works only on BSD")
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
14
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
15 class TestKQueue(unittest.TestCase):
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
16 def test_create_queue(self):
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
17 kq = select.kqueue()
55002
6768b2350c57 convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents: 52353
diff changeset
18 self.assertTrue(kq.fileno() > 0, kq.fileno())
6768b2350c57 convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents: 52353
diff changeset
19 self.assertTrue(not kq.closed)
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
20 kq.close()
55002
6768b2350c57 convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents: 52353
diff changeset
21 self.assertTrue(kq.closed)
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
22 self.assertRaises(ValueError, kq.fileno)
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 def test_create_event(self):
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
25 fd = sys.stderr.fileno()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
26 ev = select.kevent(fd)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
27 other = select.kevent(1000)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
28 self.assertEqual(ev.ident, fd)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
29 self.assertEqual(ev.filter, select.KQ_FILTER_READ)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
30 self.assertEqual(ev.flags, select.KQ_EV_ADD)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
31 self.assertEqual(ev.fflags, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
32 self.assertEqual(ev.data, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
33 self.assertEqual(ev.udata, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
34 self.assertEqual(ev, ev)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
35 self.assertNotEqual(ev, other)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
36 self.assertEqual(cmp(ev, other), -1)
55002
6768b2350c57 convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents: 52353
diff changeset
37 self.assertTrue(ev < other)
6768b2350c57 convert usage of fail* to assert*
Benjamin Peterson <benjamin@python.org>
parents: 52353
diff changeset
38 self.assertTrue(other >= ev)
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
39 self.assertRaises(TypeError, cmp, ev, None)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
40 self.assertRaises(TypeError, cmp, ev, 1)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
41 self.assertRaises(TypeError, cmp, ev, "ev")
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
42
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
43 ev = select.kevent(fd, select.KQ_FILTER_WRITE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
44 self.assertEqual(ev.ident, fd)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
45 self.assertEqual(ev.filter, select.KQ_FILTER_WRITE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
46 self.assertEqual(ev.flags, select.KQ_EV_ADD)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
47 self.assertEqual(ev.fflags, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
48 self.assertEqual(ev.data, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
49 self.assertEqual(ev.udata, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
50 self.assertEqual(ev, ev)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
51 self.assertNotEqual(ev, other)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
52
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
53 ev = select.kevent(fd, select.KQ_FILTER_WRITE, select.KQ_EV_ONESHOT)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
54 self.assertEqual(ev.ident, fd)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
55 self.assertEqual(ev.filter, select.KQ_FILTER_WRITE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
56 self.assertEqual(ev.flags, select.KQ_EV_ONESHOT)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
57 self.assertEqual(ev.fflags, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
58 self.assertEqual(ev.data, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
59 self.assertEqual(ev.udata, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
60 self.assertEqual(ev, ev)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
61 self.assertNotEqual(ev, other)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
62
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
63 ev = select.kevent(1, 2, 3, 4, 5, 6)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
64 self.assertEqual(ev.ident, 1)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
65 self.assertEqual(ev.filter, 2)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
66 self.assertEqual(ev.flags, 3)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
67 self.assertEqual(ev.fflags, 4)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
68 self.assertEqual(ev.data, 5)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
69 self.assertEqual(ev.udata, 6)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
70 self.assertEqual(ev, ev)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
71 self.assertNotEqual(ev, other)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
72
57112
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
73 bignum = sys.maxsize * 2 + 1
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
74 ev = select.kevent(bignum, 1, 2, 3, sys.maxsize, bignum)
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
75 self.assertEqual(ev.ident, bignum)
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
76 self.assertEqual(ev.filter, 1)
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
77 self.assertEqual(ev.flags, 2)
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
78 self.assertEqual(ev.fflags, 3)
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
79 self.assertEqual(ev.data, sys.maxsize)
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
80 self.assertEqual(ev.udata, bignum)
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
81 self.assertEqual(ev, ev)
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
82 self.assertNotEqual(ev, other)
068f9430cc24 Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent
Antoine Pitrou <solipsis@pitrou.net>
parents: 55266
diff changeset
83
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
84 def test_queue_event(self):
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
85 serverSocket = socket.socket()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
86 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
87 serverSocket.listen(1)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
88 client = socket.socket()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
89 client.setblocking(False)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
90 try:
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
91 client.connect(('127.0.0.1', serverSocket.getsockname()[1]))
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
92 except socket.error, e:
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 57112
diff changeset
93 self.assertEqual(e.args[0], errno.EINPROGRESS)
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
94 else:
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
95 #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
96 pass # FreeBSD doesn't raise an exception here
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
97 server, addr = serverSocket.accept()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
98
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
99 if sys.platform.startswith("darwin"):
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
100 flags = select.KQ_EV_ADD | select.KQ_EV_ENABLE
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
101 else:
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
102 flags = 0
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 kq = select.kqueue()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
105 kq2 = select.kqueue.fromfd(kq.fileno())
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 ev = select.kevent(server.fileno(),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
108 select.KQ_FILTER_WRITE,
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
109 select.KQ_EV_ADD | select.KQ_EV_ENABLE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
110 kq.control([ev], 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
111 ev = select.kevent(server.fileno(),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
112 select.KQ_FILTER_READ,
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
113 select.KQ_EV_ADD | select.KQ_EV_ENABLE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
114 kq.control([ev], 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
115 ev = select.kevent(client.fileno(),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
116 select.KQ_FILTER_WRITE,
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
117 select.KQ_EV_ADD | select.KQ_EV_ENABLE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
118 kq2.control([ev], 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
119 ev = select.kevent(client.fileno(),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
120 select.KQ_FILTER_READ,
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
121 select.KQ_EV_ADD | select.KQ_EV_ENABLE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
122 kq2.control([ev], 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
123
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
124 events = kq.control(None, 4, 1)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
125 events = [(e.ident, e.filter, e.flags) for e in events]
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
126 events.sort()
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 57112
diff changeset
127 self.assertEqual(events, [
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
128 (client.fileno(), select.KQ_FILTER_WRITE, flags),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
129 (server.fileno(), select.KQ_FILTER_WRITE, flags)])
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
130
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
131 client.send("Hello!")
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
132 server.send("world!!!")
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 # We may need to call it several times
51013
a6a6369cfbcc Merged revisions 68897 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 45991
diff changeset
135 for i in range(10):
a6a6369cfbcc Merged revisions 68897 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 45991
diff changeset
136 events = kq.control(None, 4, 1)
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
137 if len(events) == 4:
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
138 break
51013
a6a6369cfbcc Merged revisions 68897 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 45991
diff changeset
139 time.sleep(1.0)
a6a6369cfbcc Merged revisions 68897 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 45991
diff changeset
140 else:
a6a6369cfbcc Merged revisions 68897 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 45991
diff changeset
141 self.fail('timeout waiting for event notifications')
a6a6369cfbcc Merged revisions 68897 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents: 45991
diff changeset
142
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
143 events = [(e.ident, e.filter, e.flags) for e in events]
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
144 events.sort()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
145
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 57112
diff changeset
146 self.assertEqual(events, [
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
147 (client.fileno(), select.KQ_FILTER_WRITE, flags),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
148 (client.fileno(), select.KQ_FILTER_READ, flags),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
149 (server.fileno(), select.KQ_FILTER_WRITE, flags),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
150 (server.fileno(), select.KQ_FILTER_READ, flags)])
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
151
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
152 # Remove completely client, and server read part
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
153 ev = select.kevent(client.fileno(),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
154 select.KQ_FILTER_WRITE,
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
155 select.KQ_EV_DELETE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
156 kq.control([ev], 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
157 ev = select.kevent(client.fileno(),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
158 select.KQ_FILTER_READ,
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
159 select.KQ_EV_DELETE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
160 kq.control([ev], 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
161 ev = select.kevent(server.fileno(),
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
162 select.KQ_FILTER_READ,
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
163 select.KQ_EV_DELETE)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
164 kq.control([ev], 0, 0)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
165
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
166 events = kq.control([], 4, 0.99)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
167 events = [(e.ident, e.filter, e.flags) for e in events]
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
168 events.sort()
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 57112
diff changeset
169 self.assertEqual(events, [
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
170 (server.fileno(), select.KQ_FILTER_WRITE, flags)])
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 client.close()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
173 server.close()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
174 serverSocket.close()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
175
56830
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
176 def testPair(self):
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
177 kq = select.kqueue()
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
178 a, b = socket.socketpair()
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
179
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
180 a.send(b'foo')
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
181 event1 = select.kevent(a, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE)
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
182 event2 = select.kevent(b, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE)
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
183 r = kq.control([event1, event2], 1, 1)
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
184 self.assertTrue(r)
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
185 self.assertFalse(r[0].flags & select.KQ_EV_ERROR)
66348
614c84670c63 Merged revisions 86596 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 57112
diff changeset
186 self.assertEqual(b.recv(r[0].data), b'foo')
56830
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
187
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
188 a.close()
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
189 b.close()
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
190 kq.close()
97d7cd365dd5 Merged revisions 73206,73232,73299,73683,74020,74185,74544,74643,74647,74817,74838-74839,74865,74946,75402,75459,75604,75696 via svnmerge from
Georg Brandl <georg@python.org>
parents: 51013
diff changeset
191
45991
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
192 def test_main():
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
193 test_support.run_unittest(TestKQueue)
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
194
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
195 if __name__ == "__main__":
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
196 test_main()