greendns: Python3 compatibility
This commit is contained in:
@@ -251,7 +251,7 @@ class HostsResolver(object):
|
||||
else:
|
||||
cannon = hostname
|
||||
aliases.append(cannon)
|
||||
for alias, cname in self._aliases.iteritems():
|
||||
for alias, cname in six.iteritems(self._aliases):
|
||||
if cannon == cname:
|
||||
aliases.append(alias)
|
||||
aliases.remove(hostname)
|
||||
@@ -385,19 +385,19 @@ def _getaddrinfo_lookup(host, family, flags):
|
||||
addrs = []
|
||||
if family == socket.AF_UNSPEC:
|
||||
for qfamily in [socket.AF_INET6, socket.AF_INET]:
|
||||
answer = resolve(host, qfamily, 0)
|
||||
answer = resolve(host, qfamily, False)
|
||||
if answer.rrset:
|
||||
addrs.extend([rr.address for rr in answer.rrset])
|
||||
elif family == socket.AF_INET6 and flags & socket.AI_V4MAPPED:
|
||||
answer = resolve(host, socket.AF_INET6, 0)
|
||||
answer = resolve(host, socket.AF_INET6, False)
|
||||
if answer.rrset:
|
||||
addrs = [rr.address for rr in answer.rrset]
|
||||
if not addrs or flags & socket.AI_ALL:
|
||||
answer = resolve(host, socket.AF_INET, 0)
|
||||
answer = resolve(host, socket.AF_INET, False)
|
||||
if answer.rrset:
|
||||
addrs = ['::ffff:' + rr.address for rr in answer.rrset]
|
||||
else:
|
||||
answer = resolve(host, family, 0)
|
||||
answer = resolve(host, family, False)
|
||||
if answer.rrset:
|
||||
addrs = [rr.address for rr in answer.rrset]
|
||||
return str(answer.qname), addrs
|
||||
@@ -412,7 +412,7 @@ def getaddrinfo(host, port, family=0, socktype=0, proto=0, flags=0):
|
||||
allows us to respect all the other arguments like the native OS.
|
||||
"""
|
||||
if isinstance(host, six.string_types):
|
||||
host = host.encode('idna')
|
||||
host = host.encode('idna').decode('ascii')
|
||||
if host is not None and not is_ip_addr(host):
|
||||
qname, addrs = _getaddrinfo_lookup(host, family, flags)
|
||||
else:
|
||||
@@ -437,7 +437,7 @@ def getaddrinfo(host, port, family=0, socktype=0, proto=0, flags=0):
|
||||
raise socket.gaierror(socket.EAI_NONAME, 'No address found')
|
||||
if flags & socket.AI_CANONNAME:
|
||||
if not is_ip_addr(qname):
|
||||
qname = resolve_cname(qname).decode('idna')
|
||||
qname = resolve_cname(qname).encode('ascii').decode('idna')
|
||||
ai = res[0]
|
||||
res[0] = (ai[0], ai[1], ai[2], qname, ai[4])
|
||||
return res
|
||||
|
@@ -1,3 +1,4 @@
|
||||
# coding: utf-8
|
||||
"""Tests for the eventlet.support.greendns module"""
|
||||
|
||||
import os
|
||||
@@ -7,7 +8,6 @@ import time
|
||||
|
||||
import tests
|
||||
from tests import mock
|
||||
|
||||
try:
|
||||
import dns.rdatatype
|
||||
import dns.rdtypes.IN.A
|
||||
@@ -50,15 +50,15 @@ class TestHostsResolver(tests.LimitedTestCase):
|
||||
@tests.skip_unless(greendns_requirement)
|
||||
def test_readlines_lines(self):
|
||||
hr = self._make_host_resolver()
|
||||
hr.hosts.write('line0\n')
|
||||
hr.hosts.write(b'line0\n')
|
||||
hr.hosts.flush()
|
||||
assert hr._readlines() == ['line0']
|
||||
hr._last_stat = 0
|
||||
hr.hosts.write('line1\n')
|
||||
hr.hosts.write(b'line1\n')
|
||||
hr.hosts.flush()
|
||||
assert hr._readlines() == ['line0', 'line1']
|
||||
hr._last_stat = 0
|
||||
hr.hosts.write('#comment0\nline0\n #comment1\nline1')
|
||||
hr.hosts.write(b'#comment0\nline0\n #comment1\nline1')
|
||||
assert hr._readlines() == ['line0', 'line1']
|
||||
|
||||
@tests.skip_unless(greendns_requirement)
|
||||
@@ -79,8 +79,8 @@ class TestHostsResolver(tests.LimitedTestCase):
|
||||
@tests.skip_unless(greendns_requirement)
|
||||
def test_load_v4_v6_cname_aliases(self):
|
||||
hr = self._make_host_resolver()
|
||||
hr.hosts.write('1.2.3.4 v4.example.com v4\n'
|
||||
'dead:beef::1 v6.example.com v6\n')
|
||||
hr.hosts.write(b'1.2.3.4 v4.example.com v4\n'
|
||||
b'dead:beef::1 v6.example.com v6\n')
|
||||
hr.hosts.flush()
|
||||
hr._load()
|
||||
assert hr._v4 == {'v4.example.com': '1.2.3.4', 'v4': '1.2.3.4'}
|
||||
@@ -92,8 +92,8 @@ class TestHostsResolver(tests.LimitedTestCase):
|
||||
@tests.skip_unless(greendns_requirement)
|
||||
def test_load_v6_link_local(self):
|
||||
hr = self._make_host_resolver()
|
||||
hr.hosts.write('fe80:: foo\n'
|
||||
'fe80:dead:beef::1 bar\n')
|
||||
hr.hosts.write(b'fe80:: foo\n'
|
||||
b'fe80:dead:beef::1 bar\n')
|
||||
hr.hosts.flush()
|
||||
hr._load()
|
||||
assert not hr._v4
|
||||
@@ -509,6 +509,37 @@ class TestGetaddrinfo(tests.LimitedTestCase):
|
||||
greendns.resolve_cname = self._old_resolve_cname
|
||||
greendns.socket.getaddrinfo = self._old_orig_getaddrinfo
|
||||
|
||||
@tests.skip_unless(greendns_requirement)
|
||||
def test_getaddrinfo(self):
|
||||
greendns.resolve = _make_mock_resolve()
|
||||
greendns.resolve.add('example.com', '127.0.0.2')
|
||||
greendns.resolve.add('example.com', '::1')
|
||||
res = greendns.getaddrinfo('example.com', 'ssh')
|
||||
addr = ('127.0.0.2', 22)
|
||||
tcp = (socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP, addr)
|
||||
udp = (socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP, addr)
|
||||
addr = ('::1', 22, 0, 0)
|
||||
tcp6 = (socket.AF_INET6, socket.SOCK_STREAM, socket.IPPROTO_TCP, addr)
|
||||
udp6 = (socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP, addr)
|
||||
filt_res = [ai[:3] + (ai[4],) for ai in res]
|
||||
assert tcp in filt_res
|
||||
assert udp in filt_res
|
||||
assert tcp6 in filt_res
|
||||
assert udp6 in filt_res
|
||||
|
||||
@tests.skip_unless(greendns_requirement)
|
||||
def test_getaddrinfo_idn(self):
|
||||
greendns.resolve = _make_mock_resolve()
|
||||
idn_name = u'евентлет.com'
|
||||
greendns.resolve.add(idn_name.encode('idna').decode('ascii'), '127.0.0.2')
|
||||
res = greendns.getaddrinfo(idn_name, 'ssh')
|
||||
addr = ('127.0.0.2', 22)
|
||||
tcp = (socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP, addr)
|
||||
udp = (socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP, addr)
|
||||
filt_res = [ai[:3] + (ai[4],) for ai in res]
|
||||
assert tcp in filt_res
|
||||
assert udp in filt_res
|
||||
|
||||
@tests.skip_unless(greendns_requirement)
|
||||
def test_getaddrinfo_inet(self):
|
||||
greendns.resolve = _make_mock_resolve()
|
||||
@@ -531,24 +562,6 @@ class TestGetaddrinfo(tests.LimitedTestCase):
|
||||
assert tcp in [ai[:3] + (ai[4],) for ai in res]
|
||||
assert udp in [ai[:3] + (ai[4],) for ai in res]
|
||||
|
||||
@tests.skip_unless(greendns_requirement)
|
||||
def test_getaddrinfo(self):
|
||||
greendns.resolve = _make_mock_resolve()
|
||||
greendns.resolve.add('example.com', '127.0.0.2')
|
||||
greendns.resolve.add('example.com', '::1')
|
||||
res = greendns.getaddrinfo('example.com', 'ssh')
|
||||
addr = ('127.0.0.2', 22)
|
||||
tcp = (socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP, addr)
|
||||
udp = (socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP, addr)
|
||||
addr = ('::1', 22, 0, 0)
|
||||
tcp6 = (socket.AF_INET6, socket.SOCK_STREAM, socket.IPPROTO_TCP, addr)
|
||||
udp6 = (socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP, addr)
|
||||
filt_res = [ai[:3] + (ai[4],) for ai in res]
|
||||
assert tcp in filt_res
|
||||
assert udp in filt_res
|
||||
assert tcp6 in filt_res
|
||||
assert udp6 in filt_res
|
||||
|
||||
@tests.skip_unless(greendns_requirement)
|
||||
def test_getaddrinfo_only_a_ans(self):
|
||||
greendns.resolve = _make_mock_resolve()
|
||||
|
3
tox.ini
3
tox.ini
@@ -42,8 +42,9 @@ basepython =
|
||||
deps =
|
||||
nose==1.3.1
|
||||
setuptools==5.4.1
|
||||
dns: dnspython==1.12.0
|
||||
py27-dns: dnspython==1.12.0
|
||||
py{26,27}-{selects,poll,epolls}: MySQL-python==1.2.5
|
||||
py{34,py}-dns: dnspython3==1.12.0
|
||||
{selects,poll,epolls}: psycopg2cffi-compat==1.1
|
||||
{selects,poll,epolls}: pyopenssl==0.13
|
||||
{selects,poll,epolls}: pyzmq==13.1.0
|
||||
|
Reference in New Issue
Block a user