MCPcopy Index your code
hub / github.com/python/cpython / test_selector

Method test_selector

Lib/test/test_selectors.py:338–389  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

336 self.assertGreaterEqual(fd, 0)
337
338 def test_selector(self):
339 s = self.SELECTOR()
340 self.addCleanup(s.close)
341
342 NUM_SOCKETS = 12
343 MSG = b" This is a test."
344 MSG_LEN = len(MSG)
345 readers = []
346 writers = []
347 r2w = {}
348 w2r = {}
349
350 for i in range(NUM_SOCKETS):
351 rd, wr = self.make_socketpair()
352 s.register(rd, selectors.EVENT_READ)
353 s.register(wr, selectors.EVENT_WRITE)
354 readers.append(rd)
355 writers.append(wr)
356 r2w[rd] = wr
357 w2r[wr] = rd
358
359 bufs = []
360
361 while writers:
362 ready = s.select()
363 ready_writers = find_ready_matching(ready, selectors.EVENT_WRITE)
364 if not ready_writers:
365 self.fail("no sockets ready for writing")
366 wr = random.choice(ready_writers)
367 wr.send(MSG)
368
369 for i in range(10):
370 ready = s.select()
371 ready_readers = find_ready_matching(ready,
372 selectors.EVENT_READ)
373 if ready_readers:
374 break
375 # there might be a delay between the write to the write end and
376 # the read end is reported ready
377 sleep(0.1)
378 else:
379 self.fail("no sockets ready for reading")
380 self.assertEqual([w2r[wr]], ready_readers)
381 rd = ready_readers[0]
382 buf = rd.recv(MSG_LEN)
383 self.assertEqual(len(buf), MSG_LEN)
384 bufs.append(buf)
385 s.unregister(r2w[rd])
386 s.unregister(rd)
387 writers.remove(r2w[rd])
388
389 self.assertEqual(bufs, [MSG] * NUM_SOCKETS)
390
391 @unittest.skipIf(sys.platform == 'win32',
392 'select.select() cannot be used with empty fd sets')

Callers

nothing calls this directly

Calls 14

make_socketpairMethod · 0.95
sleepFunction · 0.85
addCleanupMethod · 0.80
choiceMethod · 0.80
find_ready_matchingFunction · 0.70
registerMethod · 0.45
appendMethod · 0.45
selectMethod · 0.45
failMethod · 0.45
sendMethod · 0.45
assertEqualMethod · 0.45
recvMethod · 0.45

Tested by

no test coverage detected