Files
deb-python-eventlet/tests/isolated/socket_resolve_green.py
Sergey Shepelev 52b09becac bundle dnspython in support/; resolving is always green
Fixes installation issue when older dnspython is present in system packages
https://github.com/eventlet/eventlet/pull/341
2016-08-24 11:51:28 +05:00

46 lines
1.3 KiB
Python

__test__ = False
if __name__ == '__main__':
import eventlet
eventlet.monkey_patch(all=True)
import socket
import time
import dns.message
import dns.query
def slow_udp(q, *a, **kw):
addr = '0.0.0.1'
if 'host2' in str(q.question):
addr = '0.0.0.2'
if 'host3' in str(q.question):
addr = '0.0.0.3'
r = dns.message.make_response(q)
r.index = None
r.flags = 256
r.answer.append(dns.rrset.from_text(str(q.question[0].name), 60, 'IN', 'A', addr))
r.time = 0.001
eventlet.sleep(0.1)
return r
dns.query.udp = slow_udp
results = {}
def fun(name):
try:
results[name] = socket.gethostbyname(name)
except socket.error as e:
print('name: {0} error: {1}'.format(name, e))
pool = eventlet.GreenPool()
t1 = time.time()
pool.spawn(fun, 'eventlet-test-host1.')
pool.spawn(fun, 'eventlet-test-host2.')
pool.spawn(fun, 'eventlet-test-host3.')
pool.waitall()
td = time.time() - t1
assert 0.1 <= td < 0.3, 'Resolve time expected: ~0.1s, real: {0:.3f}'.format(td)
assert results.get('eventlet-test-host1.') == '0.0.0.1'
assert results.get('eventlet-test-host2.') == '0.0.0.2'
assert results.get('eventlet-test-host3.') == '0.0.0.3'
print('pass')