1 """This test checks that socket instances (not GreenSockets but underlying sockets)
2 are not leaked by the hub.
5 from pprint import pformat
9 from eventlet.support import clear_sys_exc_info
10 from eventlet.green import socket
11 from eventlet.green.thread import start_new_thread
12 from eventlet.green.time import sleep
19 s.settimeout(SOCKET_TIMEOUT)
20 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
21 s.bind(('localhost', 0))
23 return s, s.getsockname()[1]
26 def handle_request(s, raise_on_timeout):
28 conn, address = s.accept()
29 except socket.timeout:
34 # print('handle_request - accepted')
36 assert res == b'hello', repr(res)
37 # print('handle_request - recvd %r' % res)
38 res = conn.send(b'bye')
39 # print('handle_request - sent %r' % res)
40 # print('handle_request - conn refcount: %s' % sys.getrefcount(conn))
44 def make_request(port):
45 # print('make_request')
47 s.connect(('localhost', port))
48 # print('make_request - connected')
49 res = s.send(b'hello')
50 # print('make_request - sent %s' % res)
52 assert res == b'bye', repr(res)
53 # print('make_request - recvd %r' % res)
57 def run_interaction(run_client):
58 s, port = init_server()
59 start_new_thread(handle_request, (s, run_client))
61 start_new_thread(make_request, (port,))
62 sleep(0.1 + SOCKET_TIMEOUT)
63 # print(sys.getrefcount(s.fd))
65 return weakref.ref(s.fd)
68 def run_and_check(run_client):
69 w = run_interaction(run_client=run_client)
73 print(pformat(gc.get_referrers(w())))
74 for x in gc.get_referrers(w()):
76 for y in gc.get_referrers(x):
77 print('- {0}'.format(pformat(y)))
78 raise AssertionError('server should be dead by now')
81 def test_clean_exit():
86 def test_timeout_exit():
91 if __name__ == '__main__':