| @@ -3,9 +3,9 @@ import asyncio | |||||
| import aiosocks | import aiosocks | ||||
| import aiohttp | import aiohttp | ||||
| from unittest import mock | from unittest import mock | ||||
| from asyncio import coroutine | |||||
| from aiohttp.client_reqrep import ClientRequest | from aiohttp.client_reqrep import ClientRequest | ||||
| from aiosocks.connector import SocksConnector | from aiosocks.connector import SocksConnector | ||||
| from .helpers import fake_coroutine | |||||
| class TestSocksConnector(unittest.TestCase): | class TestSocksConnector(unittest.TestCase): | ||||
| @@ -16,19 +16,11 @@ class TestSocksConnector(unittest.TestCase): | |||||
| def tearDown(self): | def tearDown(self): | ||||
| self.loop.close() | self.loop.close() | ||||
| def _fake_coroutine(self, return_value): | |||||
| def coro(*args, **kwargs): | |||||
| if isinstance(return_value, Exception): | |||||
| raise return_value | |||||
| return return_value | |||||
| return mock.Mock(side_effect=coroutine(coro)) | |||||
| @mock.patch('aiosocks.connector.create_connection') | @mock.patch('aiosocks.connector.create_connection') | ||||
| def test_connect_proxy_ip(self, cr_conn_mock): | def test_connect_proxy_ip(self, cr_conn_mock): | ||||
| tr, proto = mock.Mock(name='transport'), mock.Mock(name='protocol') | tr, proto = mock.Mock(name='transport'), mock.Mock(name='protocol') | ||||
| cr_conn_mock.side_effect = \ | cr_conn_mock.side_effect = \ | ||||
| self._fake_coroutine((tr, proto)).side_effect | |||||
| fake_coroutine((tr, proto)).side_effect | |||||
| loop_mock = mock.Mock() | loop_mock = mock.Mock() | ||||
| @@ -36,7 +28,7 @@ class TestSocksConnector(unittest.TestCase): | |||||
| connector = SocksConnector(aiosocks.Socks5Addr('127.0.0.1'), | connector = SocksConnector(aiosocks.Socks5Addr('127.0.0.1'), | ||||
| None, loop=loop_mock) | None, loop=loop_mock) | ||||
| loop_mock.getaddrinfo = self._fake_coroutine([mock.MagicMock()]) | |||||
| loop_mock.getaddrinfo = fake_coroutine([mock.MagicMock()]) | |||||
| conn = self.loop.run_until_complete(connector.connect(req)) | conn = self.loop.run_until_complete(connector.connect(req)) | ||||
| @@ -49,14 +41,14 @@ class TestSocksConnector(unittest.TestCase): | |||||
| def test_connect_proxy_domain(self, cr_conn_mock): | def test_connect_proxy_domain(self, cr_conn_mock): | ||||
| tr, proto = mock.Mock(name='transport'), mock.Mock(name='protocol') | tr, proto = mock.Mock(name='transport'), mock.Mock(name='protocol') | ||||
| cr_conn_mock.side_effect = \ | cr_conn_mock.side_effect = \ | ||||
| self._fake_coroutine((tr, proto)).side_effect | |||||
| fake_coroutine((tr, proto)).side_effect | |||||
| loop_mock = mock.Mock() | loop_mock = mock.Mock() | ||||
| req = ClientRequest('GET', 'http://python.org', loop=self.loop) | req = ClientRequest('GET', 'http://python.org', loop=self.loop) | ||||
| connector = SocksConnector(aiosocks.Socks5Addr('proxy.example'), | connector = SocksConnector(aiosocks.Socks5Addr('proxy.example'), | ||||
| None, loop=loop_mock) | None, loop=loop_mock) | ||||
| connector._resolve_host = self._fake_coroutine([mock.MagicMock()]) | |||||
| connector._resolve_host = fake_coroutine([mock.MagicMock()]) | |||||
| conn = self.loop.run_until_complete(connector.connect(req)) | conn = self.loop.run_until_complete(connector.connect(req)) | ||||
| @@ -70,13 +62,13 @@ class TestSocksConnector(unittest.TestCase): | |||||
| def test_connect_locale_resolve(self, cr_conn_mock): | def test_connect_locale_resolve(self, cr_conn_mock): | ||||
| tr, proto = mock.Mock(name='transport'), mock.Mock(name='protocol') | tr, proto = mock.Mock(name='transport'), mock.Mock(name='protocol') | ||||
| cr_conn_mock.side_effect = \ | cr_conn_mock.side_effect = \ | ||||
| self._fake_coroutine((tr, proto)).side_effect | |||||
| fake_coroutine((tr, proto)).side_effect | |||||
| req = ClientRequest('GET', 'http://python.org', loop=self.loop) | req = ClientRequest('GET', 'http://python.org', loop=self.loop) | ||||
| connector = SocksConnector(aiosocks.Socks5Addr('proxy.example'), | connector = SocksConnector(aiosocks.Socks5Addr('proxy.example'), | ||||
| None, loop=self.loop, remote_resolve=False) | None, loop=self.loop, remote_resolve=False) | ||||
| connector._resolve_host = self._fake_coroutine([mock.MagicMock()]) | |||||
| connector._resolve_host = fake_coroutine([mock.MagicMock()]) | |||||
| conn = self.loop.run_until_complete(connector.connect(req)) | conn = self.loop.run_until_complete(connector.connect(req)) | ||||
| @@ -89,13 +81,13 @@ class TestSocksConnector(unittest.TestCase): | |||||
| def test_proxy_connect_fail(self, cr_conn_mock): | def test_proxy_connect_fail(self, cr_conn_mock): | ||||
| loop_mock = mock.Mock() | loop_mock = mock.Mock() | ||||
| cr_conn_mock.side_effect = \ | cr_conn_mock.side_effect = \ | ||||
| self._fake_coroutine(aiosocks.SocksConnectionError()).side_effect | |||||
| fake_coroutine(aiosocks.SocksConnectionError()).side_effect | |||||
| req = ClientRequest('GET', 'http://python.org', loop=self.loop) | req = ClientRequest('GET', 'http://python.org', loop=self.loop) | ||||
| connector = SocksConnector(aiosocks.Socks5Addr('127.0.0.1'), | connector = SocksConnector(aiosocks.Socks5Addr('127.0.0.1'), | ||||
| None, loop=loop_mock) | None, loop=loop_mock) | ||||
| loop_mock.getaddrinfo = self._fake_coroutine([mock.MagicMock()]) | |||||
| loop_mock.getaddrinfo = fake_coroutine([mock.MagicMock()]) | |||||
| with self.assertRaises(aiohttp.ProxyConnectionError): | with self.assertRaises(aiohttp.ProxyConnectionError): | ||||
| self.loop.run_until_complete(connector.connect(req)) | self.loop.run_until_complete(connector.connect(req)) | ||||
| @@ -104,13 +96,13 @@ class TestSocksConnector(unittest.TestCase): | |||||
| def test_proxy_negotiate_fail(self, cr_conn_mock): | def test_proxy_negotiate_fail(self, cr_conn_mock): | ||||
| loop_mock = mock.Mock() | loop_mock = mock.Mock() | ||||
| cr_conn_mock.side_effect = \ | cr_conn_mock.side_effect = \ | ||||
| self._fake_coroutine(aiosocks.SocksError()).side_effect | |||||
| fake_coroutine(aiosocks.SocksError()).side_effect | |||||
| req = ClientRequest('GET', 'http://python.org', loop=self.loop) | req = ClientRequest('GET', 'http://python.org', loop=self.loop) | ||||
| connector = SocksConnector(aiosocks.Socks5Addr('127.0.0.1'), | connector = SocksConnector(aiosocks.Socks5Addr('127.0.0.1'), | ||||
| None, loop=loop_mock) | None, loop=loop_mock) | ||||
| loop_mock.getaddrinfo = self._fake_coroutine([mock.MagicMock()]) | |||||
| loop_mock.getaddrinfo = fake_coroutine([mock.MagicMock()]) | |||||
| with self.assertRaises(aiosocks.SocksError): | with self.assertRaises(aiosocks.SocksError): | ||||
| self.loop.run_until_complete(connector.connect(req)) | self.loop.run_until_complete(connector.connect(req)) | ||||