def test_fromfd_from_gsock(self): with self.socketpair() as (client, handler): client = greenhouse.Socket(fromsock=client) handler.send("hi") assert client.recv(2) == "hi" client.send("howdy") assert handler.recv(3) == "how"
def test_non_blocking_accept(self): server = greenhouse.Socket() server.setblocking(0) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(("", port())) server.listen(5) self.assertRaises(socket.error, server.accept) server.close()
def test_skips_registering(self): sock = greenhouse.Socket() poller = greenhouse.scheduler.state.poller poller.register(sock, poller.INMASK | poller.OUTMASK) items = poller._registry.items() poller.register(sock, poller.INMASK) self.assertEquals(poller._registry.items(), items)
def socketpair(self): server = greenhouse.Socket() server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) while 1: try: port = random.randrange(1025, 65536) server.bind(("", port)) except socket.error, exc: if exc.args[0] != errno.EADDRINUSE: raise else: break
def greenhouse_serve(): greenhouse.set_ignore_interrupts(1) servsock = greenhouse.Socket() servsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) servsock.bind(("127.0.0.1", 8000)) servsock.listen(socket.SOMAXCONN) try: while 1: client, addr = servsock.accept() greenhouse.schedule(greenhouse_handler, (client, )) except GoAway: pass
def test_socketpolling(self): client = greenhouse.Socket() server = greenhouse.Socket() server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(("", port())) server.listen(5) client.connect(("", port())) handler, addr = server.accept() l = [False] @greenhouse.schedule def f(): client.recv(10) l[0] = True greenhouse.pause() greenhouse.pause() assert not l[0] handler.send("hi") greenhouse.pause() assert l[0]
def test_block_on_accept(self): server = greenhouse.Socket() server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(("", port())) server.listen(5) @greenhouse.schedule def f(): client = greenhouse.Socket() client.connect(("", port())) client.send("howdy") handler, addr = server.accept() assert handler.recv(5) == "howdy"
def main(): print "localhost echoing server starting on port %d." % PORT print "shut it down with <Ctrl>-C" try: serversock = greenhouse.Socket() serversock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) serversock.bind(("", PORT)) serversock.listen(5) while 1: clientsock, address = serversock.accept() greenhouse.schedule(connection_handler, args=[clientsock, address]) except KeyboardInterrupt: print "KeyboardInterrupt caught, closing listener socket" serversock.close()
class StateClearingTestCase(unittest.TestCase): def setUp(self): GTL.acquire() state = greenhouse.scheduler.state state.awoken_from_events.clear() state.timed_paused.clear() state.paused[:] = [] state.descriptormap.clear() state.to_run.clear() del state.global_exception_handlers[:] state.local_exception_handlers.clear() del state.global_hooks[:] state.local_to_hooks.clear() state.local_from_hooks.clear() state.raise_in_main = None greenhouse.reset_poller() def tearDown(self): gc.collect() GTL.release() @contextlib.contextmanager def socketpair(self): server = greenhouse.Socket() server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) while 1: try: port = random.randrange(1025, 65536) server.bind(("", port)) except socket.error, exc: if exc.args[0] != errno.EADDRINUSE: raise else: break server.listen(5) client = greenhouse.Socket() client.connect(("", port)) handler, addr = server.accept() server.close() yield client, handler client.close() handler.close()
def start(): print "localhost nc chat server starting on port %d." % PORT print "shut it down with <Ctrl>-C" try: serversock = greenhouse.Socket() serversock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) serversock.bind(("", PORT)) serversock.listen(5) while 1: clientsock, address = serversock.accept() greenhouse.schedule(connection_handler, args=(clientsock, )) except KeyboardInterrupt: print "KeyboardInterrupt caught, closing connections" serversock.close() for sock in CONNECTED.values(): sock.close()
def connect(self): self.sock = greenhouse.Socket() self.sock.connect(self.server_address) self.write_lock = greenhouse.Lock() self.connected = True
def test_sockopts(self): sock = greenhouse.Socket() assert not sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) assert sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR)
def test_fd_poller_cleanup_with_exception(self): sock = greenhouse.Socket() self.assertRaises( (socket.error, OverflowError, ValueError), sock.connect, ("", 893748)) assert sock.fileno() not in greenhouse.scheduler.state.poller._registry
def f(): client = greenhouse.Socket() client.connect(("", port())) client.send("howdy")