Exemple #1
0
    def test_blocks_on_pool (self):
        waiter = Queue(0)

        def greedy ():
            self.pool.get()
            self.pool.get()
            self.pool.get()
            self.pool.get()
            # No one should be waiting yet.
            self.assertEquals(self.pool.waiting(), 0)
            # The call to the next get will unschedule this routine.
            self.pool.get()
            # So this put should never be called.
            waiter.put('Failed!')

        killable = spawn(greedy)

        # no one should be waiting yet.
        self.assertEquals(self.pool.waiting(), 0)

        ## Wait for greedy
        sleep(0)

        ## Greedy should be blocking on the last get
        self.assertEquals(self.pool.waiting(), 1)

        ## Send will never be called, so balance should be 0.
        self.assertFalse(not waiter.full())

        kill(killable)
Exemple #2
0
    def test_blocks_on_pool(self):
        waiter = Queue(0)

        def greedy():
            self.pool.get()
            self.pool.get()
            self.pool.get()
            self.pool.get()
            # No one should be waiting yet.
            self.assertEquals(self.pool.waiting(), 0)
            # The call to the next get will unschedule this routine.
            self.pool.get()
            # So this put should never be called.
            waiter.put('Failed!')

        killable = spawn(greedy)

        # no one should be waiting yet.
        self.assertEquals(self.pool.waiting(), 0)

        ## Wait for greedy
        sleep(0)

        ## Greedy should be blocking on the last get
        self.assertEquals(self.pool.waiting(), 1)

        ## Send will never be called, so balance should be 0.
        self.assertFalse(not waiter.full())

        kill(killable)
Exemple #3
0
    def test_killing_dormant(self):
        DELAY = 0.1
        state = []

        def test():
            try:
                state.append('start')
                sleep(DELAY)
            except:
                state.append('except')
                # catching GreenletExit
                pass
                # when switching to hub, hub makes itself the parent of this greenlet,
            # thus after the function's done, the control will go to the parent
            sleep(0)
            state.append('finished')

        g = spawn(test)
        sleep(DELAY / 2)
        self.assertEquals(state, ['start'])
        kill(g)
        # will not get there, unless switching is explicitly scheduled by kill
        self.assertEquals(state, ['start', 'except'])
        sleep(DELAY)
        self.assertEquals(state, ['start', 'except', 'finished'])
Exemple #4
0
    def test_killing_dormant (self):
        DELAY = 0.1
        state = []

        def test ():
            try:
                state.append('start')
                sleep(DELAY)
            except:
                state.append('except')
                # catching GreenletExit
                pass
                # when switching to hub, hub makes itself the parent of this greenlet,
            # thus after the function's done, the control will go to the parent
            sleep(0)
            state.append('finished')

        g = spawn(test)
        sleep(DELAY / 2)
        self.assertEquals(state, ['start'])
        kill(g)
        # will not get there, unless switching is explicitly scheduled by kill
        self.assertEquals(state, ['start', 'except'])
        sleep(DELAY)
        self.assertEquals(state, ['start', 'except', 'finished'])
Exemple #5
0
    def test_timeout_cancel(self):
        server = listen(('0.0.0.0', 0))
        _, bound_port = server.getsockname()

        done = Event()

        def client_closer(sock):
            while True:
                (conn, addr) = sock.accept()
                conn.close()

        def go():
            desc = connect(('127.0.0.1', bound_port))
            try:
                hubs.trampoline(desc, read=True, timeout=0.1)
            except TimeoutError:
                assert False, "Timed out"

            server.close()
            desc.close()
            done.send()

        spawn_after_local(0, go)

        server_coro = spawn(client_closer, server)
        done.wait()
        kill(server_coro)

        check_hub()
Exemple #6
0
    def test_timeout_cancel (self):
        server = listen(('0.0.0.0', 0))
        _, bound_port = server.getsockname()

        done = Event()

        def client_closer (sock):
            while True:
                (conn, addr) = sock.accept()
                conn.close()

        def go ():
            desc = connect(('127.0.0.1', bound_port))
            try:
                hubs.trampoline(desc, read = True, timeout = 0.1)
            except TimeoutError:
                assert False, "Timed out"

            server.close()
            desc.close()
            done.send()

        spawn_after_local(0, go)

        server_coro = spawn(client_closer, server)
        done.wait()
        kill(server_coro)

        check_hub()
Exemple #7
0
 def test_kill(self):
     gt = spawn(passthru, 6)
     kill(gt)
     self.assert_dead(gt)
     sleep(0.001)
     self.assertEquals(_g_results, [])
     kill(gt)
     self.assert_dead(gt)
Exemple #8
0
 def test_kill (self):
     gt = spawn(passthru, 6)
     kill(gt)
     self.assert_dead(gt)
     sleep(0.001)
     self.assertEquals(_g_results, [])
     kill(gt)
     self.assert_dead(gt)
Exemple #9
0
def _stop_checker (t, server_gt, conn):
    try:
        try:
            t.wait()
        finally:
            conn.close()
    except greenlet.GreenletExit:
        pass
    except Exception:
        kill(server_gt, *sys.exc_info())
Exemple #10
0
def _stop_checker(t, server_gt, conn):
    try:
        try:
            t.wait()
        finally:
            conn.close()
    except greenlet.GreenletExit:
        pass
    except Exception:
        kill(server_gt, *sys.exc_info())
Exemple #11
0
def killall():
    global _setup_already, _rspq, _rfile, _wfile
    if not _setup_already:
        return
    for reqq, _ in _threads:
        reqq.put(None)
    for _, thr in _threads:
        thr.join()
    del _threads[:]
    if _coro is not None:
        greenthread.kill(_coro)
    _rfile.close()
    _wfile.close()
    _rfile = None
    _wfile = None
    _rspq = None
    _setup_already = False
Exemple #12
0
def killall():
    global _setup_already, _rspq, _rfile, _wfile
    if not _setup_already:
        return
    for reqq, _ in _threads:
        reqq.put(None)
    for _, thr in _threads:
        thr.join()
    del _threads[:]
    if _coro is not None:
        greenthread.kill(_coro)
    _rfile.close()
    _wfile.close()
    _rfile = None
    _wfile = None
    _rspq = None
    _setup_already = False
Exemple #13
0
 def tearDown (self):
     self.server.server_close()
     kill(self.gthread)