Exemplo n.º 1
0
    def test_waiters_get_woken(self):
        # verify that when there's someone waiting on an empty pool
        # and someone puts an immediately-closed connection back in
        # the pool that the waiter gets woken
        self.pool.put(self.connection)
        self.pool.clear()
        self.pool = self.create_pool(max_size=1, max_age=0)

        self.connection = self.pool.get()
        self.assertEquals(self.pool.free(), 0)
        self.assertEquals(self.pool.waiting(), 0)
        e = event.Event()

        def retrieve(pool, ev):
            c = pool.get()
            ev.send(c)

        evy.spawn(retrieve, self.pool, e)
        sleep(0)  # these two sleeps should advance the retrieve
        sleep(0)  # coroutine until it's waiting in get()
        self.assertEquals(self.pool.free(), 0)
        self.assertEquals(self.pool.waiting(), 1)
        self.pool.put(self.connection)
        timer = Timeout(1)
        conn = e.wait()
        timer.cancel()
        self.assertEquals(self.pool.free(), 0)
        self.assertEquals(self.pool.waiting(), 0)
        self.pool.put(conn)
Exemplo n.º 2
0
    def test_waiters_get_woken (self):
        # verify that when there's someone waiting on an empty pool
        # and someone puts an immediately-closed connection back in
        # the pool that the waiter gets woken
        self.pool.put(self.connection)
        self.pool.clear()
        self.pool = self.create_pool(max_size = 1, max_age = 0)

        self.connection = self.pool.get()
        self.assertEquals(self.pool.free(), 0)
        self.assertEquals(self.pool.waiting(), 0)
        e = event.Event()

        def retrieve (pool, ev):
            c = pool.get()
            ev.send(c)

        evy.spawn(retrieve, self.pool, e)
        sleep(0) # these two sleeps should advance the retrieve
        sleep(0) # coroutine until it's waiting in get()
        self.assertEquals(self.pool.free(), 0)
        self.assertEquals(self.pool.waiting(), 1)
        self.pool.put(self.connection)
        timer = Timeout(1)
        conn = e.wait()
        timer.cancel()
        self.assertEquals(self.pool.free(), 0)
        self.assertEquals(self.pool.waiting(), 0)
        self.pool.put(conn)
Exemplo n.º 3
0
    def test_hub_exceptions (self):
        debug.hub_exceptions(True)
        server = convenience.listen(('0.0.0.0', 0))
        client = convenience.connect(('127.0.0.1', server.getsockname()[1]))
        client_2, addr = server.accept()

        def hurl (s):
            s.recv(1)
            {}[1]  # keyerror

        fake = StringIO()
        orig = sys.stderr
        sys.stderr = fake
        try:
            gt = evy.spawn(hurl, client_2)
            sleep(0)
            client.send(s2b(' '))
            sleep(0)
            # allow the "hurl" greenlet to trigger the KeyError
            # not sure why the extra context switch is needed
            sleep(0)
        finally:
            sys.stderr = orig
            self.assertRaises(KeyError, gt.wait)
            debug.hub_exceptions(False)
            # look for the KeyError exception in the traceback
        self.assert_('KeyError: 1' in fake.getvalue(),
                     "Traceback not in:\n" + fake.getvalue())
Exemplo n.º 4
0
    def test_returns_immediately(self):
        self.pool = self.create_pool()
        conn = self.pool.get()
        self.set_up_dummy_table(conn)
        self.fill_up_table(conn)
        curs = conn.cursor()
        results = []
        SHORT_QUERY = "select * from test_table"
        evt = event.Event()

        def a_query():
            self.assert_cursor_works(curs)
            curs.execute(SHORT_QUERY)
            results.append(2)
            evt.send()

        evy.spawn(a_query)
        results.append(1)
        self.assertEqual([1], results)
        evt.wait()
        self.assertEqual([1, 2], results)
        self.pool.put(conn)
Exemplo n.º 5
0
    def test_returns_immediately (self):
        self.pool = self.create_pool()
        conn = self.pool.get()
        self.set_up_dummy_table(conn)
        self.fill_up_table(conn)
        curs = conn.cursor()
        results = []
        SHORT_QUERY = "select * from test_table"
        evt = event.Event()

        def a_query ():
            self.assert_cursor_works(curs)
            curs.execute(SHORT_QUERY)
            results.append(2)
            evt.send()

        evy.spawn(a_query)
        results.append(1)
        self.assertEqual([1], results)
        evt.wait()
        self.assertEqual([1, 2], results)
        self.pool.put(conn)
Exemplo n.º 6
0
    def test_two_simultaneous_connections (self):
        # timing-sensitive test, disabled until we come up with a better
        # way to do this
        self.pool = self.create_pool(2)
        conn = self.pool.get()
        self.set_up_dummy_table(conn)
        self.fill_up_table(conn)
        curs = conn.cursor()
        conn2 = self.pool.get()
        self.set_up_dummy_table(conn2)
        self.fill_up_table(conn2)
        curs2 = conn2.cursor()
        results = []
        LONG_QUERY = "select * from test_table"
        SHORT_QUERY = "select * from test_table where row_id <= 20"

        evt = event.Event()

        def long_running_query ():
            self.assert_cursor_works(curs)
            curs.execute(LONG_QUERY)
            results.append(1)
            evt.send()

        evt2 = event.Event()

        def short_running_query ():
            self.assert_cursor_works(curs2)
            curs2.execute(SHORT_QUERY)
            results.append(2)
            evt2.send()

        evy.spawn(long_running_query)
        evy.spawn(short_running_query)
        evt.wait()
        evt2.wait()
        results.sort()
        self.assertEqual([1, 2], results)
Exemplo n.º 7
0
    def test_two_simultaneous_connections(self):
        # timing-sensitive test, disabled until we come up with a better
        # way to do this
        self.pool = self.create_pool(2)
        conn = self.pool.get()
        self.set_up_dummy_table(conn)
        self.fill_up_table(conn)
        curs = conn.cursor()
        conn2 = self.pool.get()
        self.set_up_dummy_table(conn2)
        self.fill_up_table(conn2)
        curs2 = conn2.cursor()
        results = []
        LONG_QUERY = "select * from test_table"
        SHORT_QUERY = "select * from test_table where row_id <= 20"

        evt = event.Event()

        def long_running_query():
            self.assert_cursor_works(curs)
            curs.execute(LONG_QUERY)
            results.append(1)
            evt.send()

        evt2 = event.Event()

        def short_running_query():
            self.assert_cursor_works(curs2)
            curs2.execute(SHORT_QUERY)
            results.append(2)
            evt2.send()

        evy.spawn(long_running_query)
        evy.spawn(short_running_query)
        evt.wait()
        evt2.wait()
        results.sort()
        self.assertEqual([1, 2], results)
Exemplo n.º 8
0
    def test_duplex_response (self):
        def serve (listener):
            sock, addr = listener.accept()
            stuff = sock.read(8192)
            sock.write('response')

        sock = listen_ssl_socket()

        server_coro = evy.spawn(serve, sock)

        client = util.wrap_ssl(connect(('127.0.0.1', sock.getsockname()[1])))
        client.write('line 1\r\nline 2\r\n\r\n')
        self.assertEquals(client.read(8192), 'response')
        server_coro.wait()
Exemplo n.º 9
0
    def test_ssl_connect (self):
        def serve (listener):
            sock, addr = listener.accept()
            stuff = sock.read(8192)

        sock = listen_ssl_socket()
        server_coro = evy.spawn(serve, sock)

        raw_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        ssl_client = util.wrap_ssl(raw_client)
        ssl_client.connect(('127.0.0.1', sock.getsockname()[1]))
        ssl_client.write('abc')
        shutdown_safe(ssl_client)
        ssl_client.close()
        server_coro.wait()
Exemplo n.º 10
0
    def test_ssl_close (self):
        def serve (listener):
            sock, addr = listener.accept()
            stuff = sock.read(8192)
            try:
                self.assertEquals("", sock.read(8192))
            except SSL.ZeroReturnError:
                pass

        sock = listen_ssl_socket()

        server_coro = evy.spawn(serve, sock)

        raw_client = connect(('127.0.0.1', sock.getsockname()[1]))
        client = util.wrap_ssl(raw_client)
        client.write('X')
        shutdown_safe(client)
        client.close()
        server_coro.wait()
Exemplo n.º 11
0
    def test_greensslobject (self):
        import warnings
        # disabling socket.ssl warnings because we're testing it here
        warnings.filterwarnings(action = 'ignore',
                                message = '.*socket.ssl.*',
                                category = DeprecationWarning)

        def serve (listener):
            sock, addr = listener.accept()
            sock.write('content')
            shutdown_safe(sock)
            sock.close()

        listener = listen_ssl_socket(('', 0))
        killer = evy.spawn(serve, listener)
        from evy.patched.socket import ssl

        client = ssl(connect(('localhost', listener.getsockname()[1])))
        self.assertEquals(client.read(1024), 'content')
        self.assertEquals(client.read(1024), '')
Exemplo n.º 12
0
    def test_ssl_unwrap (self):
        def serve ():
            sock, addr = listener.accept()
            self.assertEquals(sock.recv(6), 'before')
            sock_ssl = util.wrap_ssl(sock, certificate_file, private_key_file,
                                     server_side = True)
            sock_ssl.do_handshake()
            self.assertEquals(sock_ssl.read(6), 'during')
            sock2 = sock_ssl.unwrap()
            self.assertEquals(sock2.recv(5), 'after')
            sock2.close()

        listener = listen(('127.0.0.1', 0))
        server_coro = evy.spawn(serve)
        client = connect((listener.getsockname()))
        client.send('before')
        client_ssl = util.wrap_ssl(client)
        client_ssl.do_handshake()
        client_ssl.write('during')
        client2 = client_ssl.unwrap()
        client2.send('after')
        server_coro.wait()
Exemplo n.º 13
0
 def test_server (self):
     listener = socket.socket()
     listener.bind(('localhost', 0))
     listener.listen(50)
     serv = evy.spawn(backdoor.backdoor_server, listener)
     client = socket.socket()
     client.connect(('localhost', listener.getsockname()[1]))
     f = client.makefile('rw')
     self.assert_('Python' in f.readline())
     f.readline()  # build info
     f.readline()  # help info
     self.assert_('InteractiveConsole' in f.readline())
     self.assertEquals('>>> ', f.read(4))
     f.write('print("hi")\n')
     f.flush()
     self.assertEquals('hi\n', f.readline())
     self.assertEquals('>>> ', f.read(4))
     f.close()
     client.close()
     serv.kill()
     # wait for the console to discover that it's dead
     sleep(0.1)
Exemplo n.º 14
0
 def test_server(self):
     listener = socket.socket()
     listener.bind(('localhost', 0))
     listener.listen(50)
     serv = evy.spawn(backdoor.backdoor_server, listener)
     client = socket.socket()
     client.connect(('localhost', listener.getsockname()[1]))
     f = client.makefile('rw')
     self.assert_('Python' in f.readline())
     f.readline()  # build info
     f.readline()  # help info
     self.assert_('InteractiveConsole' in f.readline())
     self.assertEquals('>>> ', f.read(4))
     f.write('print("hi")\n')
     f.flush()
     self.assertEquals('hi\n', f.readline())
     self.assertEquals('>>> ', f.read(4))
     f.close()
     client.close()
     serv.kill()
     # wait for the console to discover that it's dead
     sleep(0.1)
Exemplo n.º 15
0

def bob_client(ctx, count):
    print "STARTING BOB"
    bob = zmq.Socket(CTX, zmq.REQ)
    bob.connect("ipc:///tmp/test")

    for i in range(0, count):
        print "BOB SENDING"
        bob.send("HI")
        print "BOB GOT:", bob.recv()


def alice_server(ctx, count):
    print "STARTING ALICE"
    alice = zmq.Socket(CTX, zmq.REP)
    alice.bind("ipc:///tmp/test")

    print "ALICE READY"
    for i in range(0, count):
        print "ALICE GOT:", alice.recv()
        print "ALIC SENDING"
        alice.send("HI BACK")


alice = evy.spawn(alice_server, CTX, 10)
bob = evy.spawn(bob_client, CTX, 10)

bob.wait()
alice.wait()
Exemplo n.º 16
0
def run_spawn ():
    evy.spawn(dummy, 1)
Exemplo n.º 17
0
    fd.close()


def cleanup ():
    evy.sleep(0.2)

iters = 10000
best = benchmarks.measure_best(5, iters,
                               'pass',
                               cleanup,
                               evy.sleep)

write_result('evy.sleep_main', best[evy.sleep])

gt = evy.spawn(benchmarks.measure_best, 5, iters,
                    'pass',
                    cleanup,
                    evy.sleep)
best = gt.wait()
write_result('evy.sleep_gt', best[evy.sleep])

def dummy (i = None):
    return i


def run_spawn ():
    evy.spawn(dummy, 1)


def run_spawn_n ():
    evy.spawn_n(dummy, 1)
Exemplo n.º 18
0
CTX = zmq.Context(1)

def bob_client (ctx, count):
    print "STARTING BOB"
    bob = zmq.Socket(CTX, zmq.REQ)
    bob.connect("ipc:///tmp/test")

    for i in range(0, count):
        print "BOB SENDING"
        bob.send("HI")
        print "BOB GOT:", bob.recv()


def alice_server (ctx, count):
    print "STARTING ALICE"
    alice = zmq.Socket(CTX, zmq.REP)
    alice.bind("ipc:///tmp/test")

    print "ALICE READY"
    for i in range(0, count):
        print "ALICE GOT:", alice.recv()
        print "ALIC SENDING"
        alice.send("HI BACK")

alice = evy.spawn(alice_server, CTX, 10)
bob = evy.spawn(bob_client, CTX, 10)

bob.wait()
alice.wait()