test__refcount.py: added the test with greenlet exit via exception

This commit is contained in:
Denis Bilenko
2008-11-03 17:37:29 +06:00
parent 895eed9d60
commit 165d30ea30

View File

@@ -11,8 +11,11 @@ import gc
address = ('0.0.0.0', 7878) address = ('0.0.0.0', 7878)
SOCKET_TIMEOUT = 0.1
def init_server(): def init_server():
s = socket.socket() s = socket.socket()
s.settimeout(SOCKET_TIMEOUT)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(address) s.bind(address)
s.listen(5) s.listen(5)
@@ -41,17 +44,18 @@ def make_request():
#print 'make_request - recvd %r' % res #print 'make_request - recvd %r' % res
#s.close() #s.close()
def run_interaction(): def run_interaction(run_client=True):
s = init_server() s = init_server()
start_new_thread(handle_request, (s, )) start_new_thread(handle_request, (s, ))
if run_client:
start_new_thread(make_request, ()) start_new_thread(make_request, ())
sleep(0.2) sleep(0.1+SOCKET_TIMEOUT)
#print sys.getrefcount(s.fd) #print sys.getrefcount(s.fd)
#s.close() #s.close()
return weakref.ref(s.fd) return weakref.ref(s.fd)
def run_and_check(): def run_and_check(run_client=True):
w = run_interaction() w = run_interaction(run_client=run_client)
if w(): if w():
print gc.get_referrers(w()) print gc.get_referrers(w())
for x in gc.get_referrers(w()): for x in gc.get_referrers(w()):
@@ -62,10 +66,13 @@ def run_and_check():
class test(unittest.TestCase): class test(unittest.TestCase):
def test(self): def test_clean_exit(self):
run_and_check() run_and_check()
run_and_check() run_and_check()
def test_timeout_exit(self):
run_and_check(True)
run_and_check(True)
if __name__=='__main__': if __name__=='__main__':
unittest.main() unittest.main()