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()

`