annotate Lib/test/test_kqueue.py @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +0000
parents 068f9430cc24
children 614c84670c63
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:
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
93 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
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()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
127 self.assertEquals(events, [
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
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
146 self.assertEquals(events, [
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()
728dc13327b2 Applied patch #1657 epoll and kqueue wrappers for the select module
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
169 self.assertEquals(events, [
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
55266
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
176 def testPair(self):
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
177 kq = select.kqueue()
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
178 a, b = socket.socketpair()
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
179
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
180 a.send(b'foo')
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
181 event1 = select.kevent(a, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE)
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
182 event2 = select.kevent(b, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE)
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
183 r = kq.control([event1, event2], 1, 1)
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
184 self.assertTrue(r)
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
185 self.assertFalse(r[0].flags & select.KQ_EV_ERROR)
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
186 self.assertEquals(b.recv(r[0].data), b'foo')
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
187
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
188 a.close()
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
189 b.close()
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
diff changeset
190 kq.close()
69a04dbd5f0a #5910: fix kqueue for calls with more than one event.
Georg Brandl <georg@python.org>
parents: 55002
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()