(self)
| 111 | |
| 112 | |
| 113 | def test_queue_event(self): |
| 114 | serverSocket = socket.create_server(('127.0.0.1', 0)) |
| 115 | client = socket.socket() |
| 116 | client.setblocking(False) |
| 117 | try: |
| 118 | client.connect(('127.0.0.1', serverSocket.getsockname()[1])) |
| 119 | except OSError as e: |
| 120 | self.assertEqual(e.args[0], errno.EINPROGRESS) |
| 121 | else: |
| 122 | #raise AssertionError("Connect should have raised EINPROGRESS") |
| 123 | pass # FreeBSD doesn't raise an exception here |
| 124 | server, addr = serverSocket.accept() |
| 125 | |
| 126 | kq = select.kqueue() |
| 127 | kq2 = select.kqueue.fromfd(kq.fileno()) |
| 128 | |
| 129 | ev = select.kevent(server.fileno(), |
| 130 | select.KQ_FILTER_WRITE, |
| 131 | select.KQ_EV_ADD | select.KQ_EV_ENABLE) |
| 132 | kq.control([ev], 0) |
| 133 | ev = select.kevent(server.fileno(), |
| 134 | select.KQ_FILTER_READ, |
| 135 | select.KQ_EV_ADD | select.KQ_EV_ENABLE) |
| 136 | kq.control([ev], 0) |
| 137 | ev = select.kevent(client.fileno(), |
| 138 | select.KQ_FILTER_WRITE, |
| 139 | select.KQ_EV_ADD | select.KQ_EV_ENABLE) |
| 140 | kq2.control([ev], 0) |
| 141 | ev = select.kevent(client.fileno(), |
| 142 | select.KQ_FILTER_READ, |
| 143 | select.KQ_EV_ADD | select.KQ_EV_ENABLE) |
| 144 | kq2.control([ev], 0) |
| 145 | |
| 146 | events = kq.control(None, 4, 1) |
| 147 | events = set((e.ident, e.filter) for e in events) |
| 148 | self.assertEqual(events, set([ |
| 149 | (client.fileno(), select.KQ_FILTER_WRITE), |
| 150 | (server.fileno(), select.KQ_FILTER_WRITE)])) |
| 151 | |
| 152 | client.send(b"Hello!") |
| 153 | server.send(b"world!!!") |
| 154 | |
| 155 | # We may need to call it several times |
| 156 | for i in range(10): |
| 157 | events = kq.control(None, 4, 1) |
| 158 | if len(events) == 4: |
| 159 | break |
| 160 | time.sleep(1.0) |
| 161 | else: |
| 162 | self.fail('timeout waiting for event notifications') |
| 163 | |
| 164 | events = set((e.ident, e.filter) for e in events) |
| 165 | self.assertEqual(events, set([ |
| 166 | (client.fileno(), select.KQ_FILTER_WRITE), |
| 167 | (client.fileno(), select.KQ_FILTER_READ), |
| 168 | (server.fileno(), select.KQ_FILTER_WRITE), |
| 169 | (server.fileno(), select.KQ_FILTER_READ)])) |
| 170 |
nothing calls this directly
no test coverage detected