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)
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)
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'])
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'])
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()
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()
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)
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)
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())
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())
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
def tearDown (self): self.server.server_close() kill(self.gthread)