bpo-28369: Enhance transport socket check in add_reader/writer (#4365) · python/cpython@ce12629 (original) (raw)
`@@ -1616,5 +1616,75 @@ def test_child_watcher_replace_mainloop_existing(self):
`
1616
1616
`new_loop.close()
`
1617
1617
``
1618
1618
``
``
1619
`+
class TestFunctional(unittest.TestCase):
`
``
1620
+
``
1621
`+
def setUp(self):
`
``
1622
`+
self.loop = asyncio.new_event_loop()
`
``
1623
`+
asyncio.set_event_loop(self.loop)
`
``
1624
+
``
1625
`+
def tearDown(self):
`
``
1626
`+
self.loop.close()
`
``
1627
`+
asyncio.set_event_loop(None)
`
``
1628
+
``
1629
`+
def test_add_reader_invalid_argument(self):
`
``
1630
`+
def assert_raises():
`
``
1631
`+
return self.assertRaisesRegex(ValueError, r'Invalid file object')
`
``
1632
+
``
1633
`+
cb = lambda: None
`
``
1634
+
``
1635
`+
with assert_raises():
`
``
1636
`+
self.loop.add_reader(object(), cb)
`
``
1637
`+
with assert_raises():
`
``
1638
`+
self.loop.add_writer(object(), cb)
`
``
1639
+
``
1640
`+
with assert_raises():
`
``
1641
`+
self.loop.remove_reader(object())
`
``
1642
`+
with assert_raises():
`
``
1643
`+
self.loop.remove_writer(object())
`
``
1644
+
``
1645
`+
def test_add_reader_or_writer_transport_fd(self):
`
``
1646
`+
def assert_raises():
`
``
1647
`+
return self.assertRaisesRegex(
`
``
1648
`+
RuntimeError,
`
``
1649
`+
r'File descriptor .* is used by transport')
`
``
1650
+
``
1651
`+
async def runner():
`
``
1652
`+
tr, pr = await self.loop.create_connection(
`
``
1653
`+
lambda: asyncio.Protocol(), sock=rsock)
`
``
1654
+
``
1655
`+
try:
`
``
1656
`+
cb = lambda: None
`
``
1657
+
``
1658
`+
with assert_raises():
`
``
1659
`+
self.loop.add_reader(rsock, cb)
`
``
1660
`+
with assert_raises():
`
``
1661
`+
self.loop.add_reader(rsock.fileno(), cb)
`
``
1662
+
``
1663
`+
with assert_raises():
`
``
1664
`+
self.loop.remove_reader(rsock)
`
``
1665
`+
with assert_raises():
`
``
1666
`+
self.loop.remove_reader(rsock.fileno())
`
``
1667
+
``
1668
`+
with assert_raises():
`
``
1669
`+
self.loop.add_writer(rsock, cb)
`
``
1670
`+
with assert_raises():
`
``
1671
`+
self.loop.add_writer(rsock.fileno(), cb)
`
``
1672
+
``
1673
`+
with assert_raises():
`
``
1674
`+
self.loop.remove_writer(rsock)
`
``
1675
`+
with assert_raises():
`
``
1676
`+
self.loop.remove_writer(rsock.fileno())
`
``
1677
+
``
1678
`+
finally:
`
``
1679
`+
tr.close()
`
``
1680
+
``
1681
`+
rsock, wsock = socket.socketpair()
`
``
1682
`+
try:
`
``
1683
`+
self.loop.run_until_complete(runner())
`
``
1684
`+
finally:
`
``
1685
`+
rsock.close()
`
``
1686
`+
wsock.close()
`
``
1687
+
``
1688
+
1619
1689
`if name == 'main':
`
1620
1690
`unittest.main()
`