greendns: Python3 compatibility
This commit is contained in:
@@ -251,7 +251,7 @@ class HostsResolver(object):
|
|||||||
else:
|
else:
|
||||||
cannon = hostname
|
cannon = hostname
|
||||||
aliases.append(cannon)
|
aliases.append(cannon)
|
||||||
for alias, cname in self._aliases.iteritems():
|
for alias, cname in six.iteritems(self._aliases):
|
||||||
if cannon == cname:
|
if cannon == cname:
|
||||||
aliases.append(alias)
|
aliases.append(alias)
|
||||||
aliases.remove(hostname)
|
aliases.remove(hostname)
|
||||||
@@ -385,19 +385,19 @@ def _getaddrinfo_lookup(host, family, flags):
|
|||||||
addrs = []
|
addrs = []
|
||||||
if family == socket.AF_UNSPEC:
|
if family == socket.AF_UNSPEC:
|
||||||
for qfamily in [socket.AF_INET6, socket.AF_INET]:
|
for qfamily in [socket.AF_INET6, socket.AF_INET]:
|
||||||
answer = resolve(host, qfamily, 0)
|
answer = resolve(host, qfamily, False)
|
||||||
if answer.rrset:
|
if answer.rrset:
|
||||||
addrs.extend([rr.address for rr in answer.rrset])
|
addrs.extend([rr.address for rr in answer.rrset])
|
||||||
elif family == socket.AF_INET6 and flags & socket.AI_V4MAPPED:
|
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:
|
if answer.rrset:
|
||||||
addrs = [rr.address for rr in answer.rrset]
|
addrs = [rr.address for rr in answer.rrset]
|
||||||
if not addrs or flags & socket.AI_ALL:
|
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:
|
if answer.rrset:
|
||||||
addrs = ['::ffff:' + rr.address for rr in answer.rrset]
|
addrs = ['::ffff:' + rr.address for rr in answer.rrset]
|
||||||
else:
|
else:
|
||||||
answer = resolve(host, family, 0)
|
answer = resolve(host, family, False)
|
||||||
if answer.rrset:
|
if answer.rrset:
|
||||||
addrs = [rr.address for rr in answer.rrset]
|
addrs = [rr.address for rr in answer.rrset]
|
||||||
return str(answer.qname), addrs
|
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.
|
allows us to respect all the other arguments like the native OS.
|
||||||
"""
|
"""
|
||||||
if isinstance(host, six.string_types):
|
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):
|
if host is not None and not is_ip_addr(host):
|
||||||
qname, addrs = _getaddrinfo_lookup(host, family, flags)
|
qname, addrs = _getaddrinfo_lookup(host, family, flags)
|
||||||
else:
|
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')
|
raise socket.gaierror(socket.EAI_NONAME, 'No address found')
|
||||||
if flags & socket.AI_CANONNAME:
|
if flags & socket.AI_CANONNAME:
|
||||||
if not is_ip_addr(qname):
|
if not is_ip_addr(qname):
|
||||||
qname = resolve_cname(qname).decode('idna')
|
qname = resolve_cname(qname).encode('ascii').decode('idna')
|
||||||
ai = res[0]
|
ai = res[0]
|
||||||
res[0] = (ai[0], ai[1], ai[2], qname, ai[4])
|
res[0] = (ai[0], ai[1], ai[2], qname, ai[4])
|
||||||
return res
|
return res
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
# coding: utf-8
|
||||||
"""Tests for the eventlet.support.greendns module"""
|
"""Tests for the eventlet.support.greendns module"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@@ -7,7 +8,6 @@ import time
|
|||||||
|
|
||||||
import tests
|
import tests
|
||||||
from tests import mock
|
from tests import mock
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import dns.rdatatype
|
import dns.rdatatype
|
||||||
import dns.rdtypes.IN.A
|
import dns.rdtypes.IN.A
|
||||||
@@ -50,15 +50,15 @@ class TestHostsResolver(tests.LimitedTestCase):
|
|||||||
@tests.skip_unless(greendns_requirement)
|
@tests.skip_unless(greendns_requirement)
|
||||||
def test_readlines_lines(self):
|
def test_readlines_lines(self):
|
||||||
hr = self._make_host_resolver()
|
hr = self._make_host_resolver()
|
||||||
hr.hosts.write('line0\n')
|
hr.hosts.write(b'line0\n')
|
||||||
hr.hosts.flush()
|
hr.hosts.flush()
|
||||||
assert hr._readlines() == ['line0']
|
assert hr._readlines() == ['line0']
|
||||||
hr._last_stat = 0
|
hr._last_stat = 0
|
||||||
hr.hosts.write('line1\n')
|
hr.hosts.write(b'line1\n')
|
||||||
hr.hosts.flush()
|
hr.hosts.flush()
|
||||||
assert hr._readlines() == ['line0', 'line1']
|
assert hr._readlines() == ['line0', 'line1']
|
||||||
hr._last_stat = 0
|
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']
|
assert hr._readlines() == ['line0', 'line1']
|
||||||
|
|
||||||
@tests.skip_unless(greendns_requirement)
|
@tests.skip_unless(greendns_requirement)
|
||||||
@@ -79,8 +79,8 @@ class TestHostsResolver(tests.LimitedTestCase):
|
|||||||
@tests.skip_unless(greendns_requirement)
|
@tests.skip_unless(greendns_requirement)
|
||||||
def test_load_v4_v6_cname_aliases(self):
|
def test_load_v4_v6_cname_aliases(self):
|
||||||
hr = self._make_host_resolver()
|
hr = self._make_host_resolver()
|
||||||
hr.hosts.write('1.2.3.4 v4.example.com v4\n'
|
hr.hosts.write(b'1.2.3.4 v4.example.com v4\n'
|
||||||
'dead:beef::1 v6.example.com v6\n')
|
b'dead:beef::1 v6.example.com v6\n')
|
||||||
hr.hosts.flush()
|
hr.hosts.flush()
|
||||||
hr._load()
|
hr._load()
|
||||||
assert hr._v4 == {'v4.example.com': '1.2.3.4', 'v4': '1.2.3.4'}
|
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)
|
@tests.skip_unless(greendns_requirement)
|
||||||
def test_load_v6_link_local(self):
|
def test_load_v6_link_local(self):
|
||||||
hr = self._make_host_resolver()
|
hr = self._make_host_resolver()
|
||||||
hr.hosts.write('fe80:: foo\n'
|
hr.hosts.write(b'fe80:: foo\n'
|
||||||
'fe80:dead:beef::1 bar\n')
|
b'fe80:dead:beef::1 bar\n')
|
||||||
hr.hosts.flush()
|
hr.hosts.flush()
|
||||||
hr._load()
|
hr._load()
|
||||||
assert not hr._v4
|
assert not hr._v4
|
||||||
@@ -509,6 +509,37 @@ class TestGetaddrinfo(tests.LimitedTestCase):
|
|||||||
greendns.resolve_cname = self._old_resolve_cname
|
greendns.resolve_cname = self._old_resolve_cname
|
||||||
greendns.socket.getaddrinfo = self._old_orig_getaddrinfo
|
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)
|
@tests.skip_unless(greendns_requirement)
|
||||||
def test_getaddrinfo_inet(self):
|
def test_getaddrinfo_inet(self):
|
||||||
greendns.resolve = _make_mock_resolve()
|
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 tcp in [ai[:3] + (ai[4],) for ai in res]
|
||||||
assert udp 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)
|
@tests.skip_unless(greendns_requirement)
|
||||||
def test_getaddrinfo_only_a_ans(self):
|
def test_getaddrinfo_only_a_ans(self):
|
||||||
greendns.resolve = _make_mock_resolve()
|
greendns.resolve = _make_mock_resolve()
|
||||||
|
3
tox.ini
3
tox.ini
@@ -42,8 +42,9 @@ basepython =
|
|||||||
deps =
|
deps =
|
||||||
nose==1.3.1
|
nose==1.3.1
|
||||||
setuptools==5.4.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{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}: psycopg2cffi-compat==1.1
|
||||||
{selects,poll,epolls}: pyopenssl==0.13
|
{selects,poll,epolls}: pyopenssl==0.13
|
||||||
{selects,poll,epolls}: pyzmq==13.1.0
|
{selects,poll,epolls}: pyzmq==13.1.0
|
||||||
|
Reference in New Issue
Block a user