
Fixes installation issue when older dnspython is present in system packages https://github.com/eventlet/eventlet/pull/341
46 lines
1.3 KiB
Python
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')
|