tests: socket_resolve_green was giving false fails
Because first GreenPool.spawn() sometimes takes 200+ms which is a bug not related to this test. https://github.com/eventlet/eventlet/issues/374 https://github.com/eventlet/eventlet/issues/379
This commit is contained in:
		@@ -8,20 +8,22 @@ if __name__ == '__main__':
 | 
				
			|||||||
    import dns.message
 | 
					    import dns.message
 | 
				
			||||||
    import dns.query
 | 
					    import dns.query
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    n = 10
 | 
				
			||||||
 | 
					    delay = 0.01
 | 
				
			||||||
 | 
					    addr_map = {'test-host{0}.'.format(i): '0.0.1.{0}'.format(i) for i in range(n)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def slow_udp(q, *a, **kw):
 | 
					    def slow_udp(q, *a, **kw):
 | 
				
			||||||
        addr = '0.0.0.1'
 | 
					        qname = q.question[0].name
 | 
				
			||||||
        if 'host2' in str(q.question):
 | 
					        addr = addr_map[qname.to_text().decode()]
 | 
				
			||||||
            addr = '0.0.0.2'
 | 
					 | 
				
			||||||
        if 'host3' in str(q.question):
 | 
					 | 
				
			||||||
            addr = '0.0.0.3'
 | 
					 | 
				
			||||||
        r = dns.message.make_response(q)
 | 
					        r = dns.message.make_response(q)
 | 
				
			||||||
        r.index = None
 | 
					        r.index = None
 | 
				
			||||||
        r.flags = 256
 | 
					        r.flags = 256
 | 
				
			||||||
        r.answer.append(dns.rrset.from_text(str(q.question[0].name), 60, 'IN', 'A', addr))
 | 
					        r.answer.append(dns.rrset.from_text(str(qname), 60, 'IN', 'A', addr))
 | 
				
			||||||
        r.time = 0.001
 | 
					        r.time = 0.001
 | 
				
			||||||
        eventlet.sleep(0.1)
 | 
					        eventlet.sleep(delay)
 | 
				
			||||||
        return r
 | 
					        return r
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    dns.query.tcp = lambda: eventlet.Timeout(0)
 | 
				
			||||||
    dns.query.udp = slow_udp
 | 
					    dns.query.udp = slow_udp
 | 
				
			||||||
    results = {}
 | 
					    results = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,15 +33,18 @@ if __name__ == '__main__':
 | 
				
			|||||||
        except socket.error as e:
 | 
					        except socket.error as e:
 | 
				
			||||||
            print('name: {0} error: {1}'.format(name, e))
 | 
					            print('name: {0} error: {1}'.format(name, e))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pool = eventlet.GreenPool()
 | 
					    pool = eventlet.GreenPool(size=n + 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # FIXME: For unknown reason, first GreenPool.spawn() takes ~250ms on some platforms.
 | 
				
			||||||
 | 
					    # Spawned function executes for normal expected time, it's the GreenPool who needs warmup.
 | 
				
			||||||
 | 
					    pool.spawn(eventlet.sleep)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    t1 = time.time()
 | 
					    t1 = time.time()
 | 
				
			||||||
    pool.spawn(fun, 'eventlet-test-host1.')
 | 
					    for name in addr_map:
 | 
				
			||||||
    pool.spawn(fun, 'eventlet-test-host2.')
 | 
					        pool.spawn(fun, name)
 | 
				
			||||||
    pool.spawn(fun, 'eventlet-test-host3.')
 | 
					 | 
				
			||||||
    pool.waitall()
 | 
					    pool.waitall()
 | 
				
			||||||
    td = time.time() - t1
 | 
					    td = time.time() - t1
 | 
				
			||||||
    assert 0.1 <= td < 0.3, 'Resolve time expected: ~0.1s, real: {0:.3f}'.format(td)
 | 
					    fail_msg = 'Resolve time expected: ~{0:.3f}s, real: {1:.3f}'.format(delay, td)
 | 
				
			||||||
    assert results.get('eventlet-test-host1.') == '0.0.0.1'
 | 
					    assert delay <= td < delay * n, fail_msg
 | 
				
			||||||
    assert results.get('eventlet-test-host2.') == '0.0.0.2'
 | 
					    assert addr_map == results
 | 
				
			||||||
    assert results.get('eventlet-test-host3.') == '0.0.0.3'
 | 
					 | 
				
			||||||
    print('pass')
 | 
					    print('pass')
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user