Exemple #1
0
 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"
Exemple #2
0
 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()
Exemple #3
0
    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)
Exemple #4
0
 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
Exemple #5
0
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
Exemple #6
0
    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]
Exemple #7
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"
Exemple #8
0
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()
Exemple #9
0
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()
Exemple #10
0
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()
Exemple #11
0
 def connect(self):
     self.sock = greenhouse.Socket()
     self.sock.connect(self.server_address)
     self.write_lock = greenhouse.Lock()
     self.connected = True
Exemple #12
0
 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)
Exemple #13
0
 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
Exemple #14
0
 def f():
     client = greenhouse.Socket()
     client.connect(("", port()))
     client.send("howdy")