async def test_resolve(self): async def _side_effect(*args, **kwargs): host = 'test.com' address = '127.0.0.1' port = 80 family = socket.AF_INET resolve_result = [{'hostname': host, 'host': address, 'port': port, 'family': family, 'proto': 0, 'flags': socket.AI_NUMERICHOST}] return resolve_result rs = Resolver(timeout=0.1) hinfo = await rs.resolve('127.0.0.1') host = hinfo[0]['host'] self.assertEqual(host, '127.0.0.1') if isinstance(rs, aiohttp.resolver.ThreadedResolver): with self.assertRaises(socket.gaierror): await rs.resolve('256.0.0.1') if isinstance(rs, aiohttp.resolver.AsyncResolver): with self.assertRaises(aiodns.error.DNSError): await rs.resolve('256.0.0.1') with patch("aiohttp.DefaultResolver.resolve") as query: query.side_effect = _side_effect hinfo = await rs.resolve('test.com') host = hinfo[0]['host'] self.assertEqual(host, '127.0.0.1')
async def test_resolve_cache(self): rs = Resolver(timeout=0.1) with patch("aiodns.DNSResolver.query") as query: query.side_effect = future_iter([ResolveResult('127.0.0.1', 0)]) await rs.resolve('test.com') query.side_effect = future_iter([ResolveResult('127.0.0.2', 0)]) port = 80 resp = [{'hostname': 'test2.com', 'host': '127.0.0.2', 'port': port, 'family': socket.AF_INET, 'proto': socket.IPPROTO_IP, 'flags': socket.AI_NUMERICHOST}] await rs.resolve('test2.com', port=80, family=socket.AF_INET) rs._resolve = None self.assertEqual(await rs.resolve('test.com'), '127.0.0.1') resp = await rs.resolve('test2.com') self.assertEqual(resp[0]['host'], '127.0.0.2')
async def test_resolve(self): rs = Resolver(timeout=0.1) self.assertEqual(await rs.resolve('127.0.0.1'), '127.0.0.1') with self.assertRaises(ResolveError): await rs.resolve('256.0.0.1') with patch("aiodns.DNSResolver.query") as query: query.side_effect = future_iter([ResolveResult('127.0.0.1', 0)]) self.assertEqual(await rs.resolve('test.com'), '127.0.0.1')
async def test_get_real_ext_ip(self): rs = Resolver(timeout=0.1) async def side_effect(*args, **kwargs): async def _side_effect(*args, **kwargs): return {'origin': '127.0.0.1'} resp = Mock() resp.json.side_effect = _side_effect return resp with patch("aiohttp.client.ClientSession._request") as resp: resp.side_effect = side_effect self.assertEqual(await rs.get_real_ext_ip(), '127.0.0.1')
async def test_resolve_cache(self): rs = Resolver(timeout=0.1) with patch("aiodns.DNSResolver.query") as query: query.side_effect = future_iter([ResolveResult('127.0.0.1', 0)]) await rs.resolve('test.com') query.side_effect = future_iter([ResolveResult('127.0.0.2', 0)]) port = 80 resp = [{ 'hostname': 'test2.com', 'host': '127.0.0.2', 'port': port, 'family': socket.AF_INET, 'proto': socket.IPPROTO_IP, 'flags': socket.AI_NUMERICHOST }] await rs.resolve('test2.com', port=80, family=socket.AF_INET) rs._resolve = None self.assertEqual(await rs.resolve('test.com'), '127.0.0.1') resp = await rs.resolve('test2.com') self.assertEqual(resp[0]['host'], '127.0.0.2')
async def test_resolve_family(self): rs = Resolver(timeout=0.1) with patch("aiodns.DNSResolver.query") as query: query.side_effect = future_iter([ResolveResult('127.0.0.2', 0)]) resp = [{ 'hostname': 'test2.com', 'host': '127.0.0.2', 'port': 80, 'family': socket.AF_INET, 'proto': socket.IPPROTO_IP, 'flags': socket.AI_NUMERICHOST }] self.assertEqual( await rs.resolve('test2.com', family=socket.AF_INET), resp)
async def test_create_with_domain(self): async def _side_effect(*args, **kwargs): host = 'test.com' address = '127.0.0.1' port = 80 family = socket.AF_INET resolve_result = [{'hostname': host, 'host': address, 'port': port, 'family': family, 'proto': 0, 'flags': socket.AI_NUMERICHOST}] return resolve_result with patch("aiohttp.DefaultResolver.resolve") as query: query.side_effect = _side_effect resolver = Resolver() proxy = await Proxy.create('testhost.com', '80', resolver=resolver) self.assertEqual(proxy.host, '127.0.0.1')
async def test_get_real_ext_ip(self): rs = Resolver(timeout=0.1) def side_effect(*args, **kwargs): def _side_effect(*args, **kwargs): fut = Future() fut.set_result({'origin': '127.0.0.1'}) return fut resp = Mock() resp.json.side_effect = resp.release.side_effect = _side_effect fut = Future() fut.set_result(resp) return fut with patch("aiohttp.client.ClientSession._request") as resp: resp.side_effect = side_effect self.assertEqual(await rs.get_real_ext_ip(), '127.0.0.1')
async def test_resolve_family(self): async def _side_effect(*args, **kwargs): host = 'test2.com' address = '127.0.0.2' port = 0 family = socket.AF_INET resolve_result = [{'hostname': host, 'host': address, 'port': port, 'family': family, 'proto': socket.IPPROTO_IP, 'flags': socket.AI_NUMERICHOST}] return resolve_result rs = Resolver(timeout=0.1) with patch("aiohttp.DefaultResolver.resolve") as query: query.side_effect = _side_effect hinfo = await rs.resolve('test2.com', family=socket.AF_INET) resp = [{'hostname': 'test2.com', 'host': '127.0.0.2', 'port': 0, 'family': socket.AF_INET, 'proto': socket.IPPROTO_IP, 'flags': socket.AI_NUMERICHOST}] self.assertEqual(hinfo, resp)
async def test_create_with_domain(self): with patch("aiodns.DNSResolver.query") as query: query.side_effect = future_iter([ResolveResult('127.0.0.1', 0)]) resolver = Resolver() proxy = await Proxy.create('testhost.com', '80', resolver=resolver) self.assertEqual(proxy.host, '127.0.0.1')
def test_get_ip_info(self): rs = Resolver(timeout=0.1) self.assertEqual(rs.get_ip_info('test.com'), ('--', 'Unknown')) self.assertEqual(rs.get_ip_info('127.0.0.1'), ('--', 'Unknown')) self.assertEqual(rs.get_ip_info('8.8.8.8'), ('US', 'United States'))
def test_host_is_ip(self): rs = Resolver(timeout=0.1) self.assertTrue(rs.host_is_ip('127.0.0.1')) self.assertFalse(rs.host_is_ip('256.0.0.1')) self.assertFalse(rs.host_is_ip('test.com'))
def resolver(): return Resolver(timeout=0.1)