def test_close_with_makefile(self): def accept_close_early(listener): # verify that the makefile and the socket are truly independent # by closing the socket prior to using the made file try: conn, addr = listener.accept() fd = conn.makefile('rw') conn.close() fd.write('hello\n') fd.close() if PY3: self.assertRaises(ValueError, fd.write, 'a') self.assertRaises(ValueError, fd.flush) else: r = fd.write('a') assert r is None, r self.assertRaises(AttributeError, fd.flush) self.assertRaises(socket.error, conn.send, b'b') finally: listener.close() def accept_close_late(listener): # verify that the makefile and the socket are truly independent # by closing the made file and then sending a character try: conn, addr = listener.accept() fd = conn.makefile('rw') fd.write('hello') fd.close() conn.send(b'\n') conn.close() if PY3: self.assertRaises(ValueError, fd.write, 'a') self.assertRaises(ValueError, fd.flush) else: r = fd.write('a') assert r is None, r self.assertRaises(AttributeError, fd.flush) self.assertRaises(socket.error, conn.send, b'b') finally: listener.close() def did_it_work(server): client = socket.create_connection( ('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.readline() == 'hello\n' assert fd.read() == '' fd.close() server = tcp_listener(('0.0.0.0', 0)) server_greenlet = gevent.spawn(accept_close_early, server) did_it_work(server) server_greenlet.kill() server = tcp_listener(('0.0.0.0', 0)) server_greenlet = gevent.spawn(accept_close_late, server) did_it_work(server) server_greenlet.kill()
def test_close_with_makefile(self): def accept_close_early(listener): # verify that the makefile and the socket are truly independent # by closing the socket prior to using the made file try: conn, addr = listener.accept() fd = conn.makefile('rw') conn.close() fd.write('hello\n') fd.close() if PY3: self.assertRaises(ValueError, fd.write, 'a') self.assertRaises(ValueError, fd.flush) else: r = fd.write('a') assert r is None, r self.assertRaises(AttributeError, fd.flush) self.assertRaises(socket.error, conn.send, b'b') finally: listener.close() def accept_close_late(listener): # verify that the makefile and the socket are truly independent # by closing the made file and then sending a character try: conn, addr = listener.accept() fd = conn.makefile('rw') fd.write('hello') fd.close() conn.send(b'\n') conn.close() if PY3: self.assertRaises(ValueError, fd.write, 'a') self.assertRaises(ValueError, fd.flush) else: r = fd.write('a') assert r is None, r self.assertRaises(AttributeError, fd.flush) self.assertRaises(socket.error, conn.send, b'b') finally: listener.close() def did_it_work(server): client = socket.create_connection(('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.readline() == 'hello\n' assert fd.read() == '' fd.close() server = tcp_listener(('0.0.0.0', 0)) server_greenlet = gevent.spawn(accept_close_early, server) did_it_work(server) server_greenlet.kill() server = tcp_listener(('0.0.0.0', 0)) server_greenlet = gevent.spawn(accept_close_late, server) did_it_work(server) server_greenlet.kill()
def test_close_with_makefile(self): def accept_close_early(listener): # verify that the makefile and the socket are truly independent # by closing the socket prior to using the made file try: conn, _ = listener.accept() fd = conn.makefile(mode='wb') conn.close() fd.write(b'hello\n') fd.close() _write_to_closed(fd, b'a') self.assertRaises(socket.error, conn.send, b'b') finally: listener.close() def accept_close_late(listener): # verify that the makefile and the socket are truly independent # by closing the made file and then sending a character try: conn, _ = listener.accept() fd = conn.makefile(mode='wb') fd.write(b'hello') fd.close() conn.send(b'\n') conn.close() _write_to_closed(fd, b'a') self.assertRaises(socket.error, conn.send, b'b') finally: listener.close() def did_it_work(server): client = socket.create_connection( (params.DEFAULT_CONNECT, server.getsockname()[1])) fd = client.makefile(mode='rb') client.close() self.assertEqual(fd.readline(), b'hello\n') self.assertFalse(fd.read()) fd.close() server = tcp_listener() server_greenlet = gevent.spawn(accept_close_early, server) did_it_work(server) server_greenlet.kill() server = tcp_listener() server_greenlet = gevent.spawn(accept_close_late, server) did_it_work(server) server_greenlet.kill()
def test_del_closes_socket(self): if PYPY: return timer = gevent.Timeout.start_new(0.5) def accept_once(listener): # delete/overwrite the original conn # object, only keeping the file object around # closing the file object should close everything try: conn, addr = listener.accept() conn = conn.makefile(mode='wb') conn.write(b'hello\n') conn.close() _write_to_closed(conn, b'a') finally: listener.close() server = tcp_listener(('0.0.0.0', 0)) gevent.spawn(accept_once, server) client = socket.create_connection(('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.read() == 'hello\n' assert fd.read() == '' timer.cancel()
def test_del_closes_socket(self): timer = gevent.Timeout.start_new(0.5) def accept_once(listener): # delete/overwrite the original conn # object, only keeping the file object around # closing the file object should close everything try: conn, addr = listener.accept() conn = conn.makefile() conn.write('hello\n') conn.close() r = conn.write('a') assert r is None, r finally: listener.close() server = tcp_listener(('0.0.0.0', 0)) gevent.spawn(accept_once, server) client = socket.create_connection( ('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.read() == 'hello\n' assert fd.read() == '' timer.cancel()
def test_del_closes_socket(self): timer = gevent.Timeout.start_new(0.5) def accept_once(listener): # delete/overwrite the original conn # object, only keeping the file object around # closing the file object should close everything # XXX: This is not exactly true on Python 3. # This produces a ResourceWarning. oconn = None try: conn, _ = listener.accept() if PY3: oconn = conn conn = conn.makefile(mode='wb') conn.write(b'hello\n') conn.close() _write_to_closed(conn, b'a') finally: listener.close() if oconn is not None: oconn.close() server = tcp_listener(('0.0.0.0', 0)) gevent.spawn(accept_once, server) client = socket.create_connection( ('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.read() == 'hello\n' assert fd.read() == '' timer.close()
def test_del_closes_socket(self): if PYPY: return timer = gevent.Timeout.start_new(0.5) def accept_once(listener): # delete/overwrite the original conn # object, only keeping the file object around # closing the file object should close everything # update: this is not true for PY3 try: sock, addr = listener.accept() conn = sock.makefile('rw') conn.write('hello\n') sock.close() conn.close() if PY3: self.assertRaises(ValueError, conn.write, 'a') self.assertRaises(ValueError, conn.flush) else: r = conn.write('a') assert r is None, r self.assertRaises(AttributeError, conn.flush) finally: listener.close() server = tcp_listener(('0.0.0.0', 0)) gevent.spawn(accept_once, server) client = socket.create_connection(('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.read() == 'hello\n' assert fd.read() == '' timer.cancel()
def test_del_closes_socket(self): timer = gevent.Timeout.start_new(0.5) def accept_once(listener): # delete/overwrite the original conn # object, only keeping the file object around # closing the file object should close everything try: conn_, addr = listener.accept() conn = conn_.makefile() conn.write(b('hello\n')) conn.close() conn_.close() if PY3: self.assertRaises(AttributeError, conn.write, b('a')) else: r = conn.write(b('a')) assert r is None, r finally: listener.close() server = tcp_listener(('0.0.0.0', 0)) gevent.spawn(accept_once, server) client = socket.create_connection(('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.read() == b('hello\n') assert fd.read() == b('') timer.cancel()
def test_del_closes_socket(self): if PYPY: return timer = gevent.Timeout.start_new(0.5) def accept_once(listener): # delete/overwrite the original conn # object, only keeping the file object around # closing the file object should close everything # update: this is not true for PY3 try: sock, addr = listener.accept() conn = sock.makefile('rw') conn.write('hello\n') sock.close() conn.close() if PY3: self.assertRaises(ValueError, conn.write, 'a') self.assertRaises(ValueError, conn.flush) else: r = conn.write('a') assert r is None, r self.assertRaises(AttributeError, conn.flush) finally: listener.close() server = tcp_listener(('0.0.0.0', 0)) gevent.spawn(accept_once, server) client = socket.create_connection( ('127.0.0.1', server.getsockname()[1])) fd = client.makefile() client.close() assert fd.read() == 'hello\n' assert fd.read() == '' timer.cancel()
def setUp(self): greentest.TestCase.setUp(self) self.listener = greentest.tcp_listener(('127.0.0.1', 0))