|
2 | 2 |
|
3 | 3 | import errno |
4 | 4 | import socket |
5 | | -import threading |
6 | | -import time |
7 | 5 | import unittest |
8 | 6 | from unittest import mock |
9 | 7 | try: |
@@ -1786,89 +1784,5 @@ def test_fatal_error_connected(self, m_exc): |
1786 | 1784 | 'Fatal error on transport\nprotocol:.*\ntransport:.*'), |
1787 | 1785 | exc_info=(ConnectionRefusedError, MOCK_ANY, MOCK_ANY)) |
1788 | 1786 |
|
1789 | | - |
1790 | | -class SelectorLoopFunctionalTests(unittest.TestCase): |
1791 | | - |
1792 | | - def setUp(self): |
1793 | | - self.loop = asyncio.new_event_loop() |
1794 | | - asyncio.set_event_loop(None) |
1795 | | - |
1796 | | - def tearDown(self): |
1797 | | - self.loop.close() |
1798 | | - |
1799 | | - @asyncio.coroutine |
1800 | | - def recv_all(self, sock, nbytes): |
1801 | | - buf = b'' |
1802 | | - while len(buf) < nbytes: |
1803 | | - buf += yield from self.loop.sock_recv(sock, nbytes - len(buf)) |
1804 | | - return buf |
1805 | | - |
1806 | | - def test_sock_connect_sock_write_race(self): |
1807 | | - TIMEOUT = 60.0 |
1808 | | - PAYLOAD = b'DATA' * 1024 * 1024 |
1809 | | - |
1810 | | - class Server(threading.Thread): |
1811 | | - def __init__(self, *args, srv_sock, **kwargs): |
1812 | | - super().__init__(*args, **kwargs) |
1813 | | - self.srv_sock = srv_sock |
1814 | | - |
1815 | | - def run(self): |
1816 | | - with self.srv_sock: |
1817 | | - srv_sock.listen(100) |
1818 | | - |
1819 | | - sock, addr = self.srv_sock.accept() |
1820 | | - sock.settimeout(TIMEOUT) |
1821 | | - |
1822 | | - with sock: |
1823 | | - sock.sendall(b'helo') |
1824 | | - |
1825 | | - buf = bytearray() |
1826 | | - while len(buf) < len(PAYLOAD): |
1827 | | - pack = sock.recv(1024 * 65) |
1828 | | - if not pack: |
1829 | | - break |
1830 | | - buf.extend(pack) |
1831 | | - |
1832 | | - @asyncio.coroutine |
1833 | | - def client(addr): |
1834 | | - sock = socket.socket() |
1835 | | - with sock: |
1836 | | - sock.setblocking(False) |
1837 | | - |
1838 | | - started = time.monotonic() |
1839 | | - while True: |
1840 | | - if time.monotonic() - started > TIMEOUT: |
1841 | | - self.fail('unable to connect to the socket') |
1842 | | - return |
1843 | | - try: |
1844 | | - yield from self.loop.sock_connect(sock, addr) |
1845 | | - except OSError: |
1846 | | - yield from asyncio.sleep(0.05, loop=self.loop) |
1847 | | - else: |
1848 | | - break |
1849 | | - |
1850 | | - # Give 'Server' thread a chance to accept and send b'helo' |
1851 | | - time.sleep(0.1) |
1852 | | - |
1853 | | - data = yield from self.recv_all(sock, 4) |
1854 | | - self.assertEqual(data, b'helo') |
1855 | | - yield from self.loop.sock_sendall(sock, PAYLOAD) |
1856 | | - |
1857 | | - srv_sock = socket.socket() |
1858 | | - srv_sock.settimeout(TIMEOUT) |
1859 | | - srv_sock.bind(('127.0.0.1', 0)) |
1860 | | - srv_addr = srv_sock.getsockname() |
1861 | | - |
1862 | | - srv = Server(srv_sock=srv_sock, daemon=True) |
1863 | | - srv.start() |
1864 | | - |
1865 | | - try: |
1866 | | - self.loop.run_until_complete( |
1867 | | - asyncio.wait_for(client(srv_addr), loop=self.loop, |
1868 | | - timeout=TIMEOUT)) |
1869 | | - finally: |
1870 | | - srv.join() |
1871 | | - |
1872 | | - |
1873 | 1787 | if __name__ == '__main__': |
1874 | 1788 | unittest.main() |
0 commit comments