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_channel_wait(self): channel = Queue(0) events = [] def another_greenlet(): events.append('sending hello') channel.put('hello') events.append('sending world') channel.put('world') events.append('sent world') gt = spawn(another_greenlet) events.append('waiting') events.append(channel.get()) events.append(channel.get()) self.assertEqual( ['waiting', 'sending hello', 'hello', 'sending world', 'world'], events) sleep(0) self.assertEqual([ 'waiting', 'sending hello', 'hello', 'sending world', 'world', 'sent world' ], events)
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_waiters_that_cancel(self): q = Queue() gt = spawn(do_bail, q) self.assertEquals(gt.wait(), 'timed out') q.put('hi') self.assertEquals(q.get(), 'hi')
def test_senders_that_die(self): q = Queue() def do_send(q): q.put('sent') spawn(do_send, q) self.assertEquals(q.join(), 'sent')
def test_senders_that_die (self): q = Queue() def do_send (q): q.put('sent') spawn(do_send, q) self.assertEquals(q.join(), 'sent')
def test_waiters_that_cancel (self): q = Queue() gt = spawn(do_bail, q) self.assertEquals(gt.wait(), 'timed out') q.put('hi') self.assertEquals(q.get(), 'hi')
def test_two_bogus_waiters (self): q = Queue() gt1 = spawn(do_bail, q) gt2 = spawn(do_bail, q) sleep(0) q.put('sent') self.assertEquals(gt1.wait(), 'timed out') self.assertEquals(gt2.wait(), 'timed out') self.assertEquals(q.get(), 'sent')
def test_two_bogus_waiters(self): q = Queue() gt1 = spawn(do_bail, q) gt2 = spawn(do_bail, q) sleep(0) q.put('sent') self.assertEquals(gt1.wait(), 'timed out') self.assertEquals(gt2.wait(), 'timed out') self.assertEquals(q.get(), 'sent')
def test_send_last (self): q = Queue() def waiter (q): self.assertEquals(q.get(), 'hi2') gt = spawn(with_timeout, 0.1, waiter, q) sleep(0) sleep(0) q.put('hi2') gt.wait()
def test_two_waiters_one_dies (self): def waiter (q): return q.get() q = Queue() dying = spawn(do_bail, q) waiting = spawn(waiter, q) sleep(0) q.put('hi') self.assertEquals(dying.wait(), 'timed out') self.assertEquals(waiting.wait(), 'hi')
def test_two_waiters_one_dies(self): def waiter(q): return q.get() q = Queue() dying = spawn(do_bail, q) waiting = spawn(waiter, q) sleep(0) q.put('hi') self.assertEquals(dying.wait(), 'timed out') self.assertEquals(waiting.wait(), 'hi')
def test_resize_down (self): size = 5 q = Queue(5) for i in range(5): q.put(i) self.assertEquals(list(q.queue), range(5)) q.resize(1) sleep(0) self.assertEquals(list(q.queue), range(5))
def test_send_last(self): q = Queue() def waiter(q): self.assertEquals(q.get(), 'hi2') gt = spawn(with_timeout, 0.1, waiter, q) sleep(0) sleep(0) q.put('hi2') gt.wait()
def test_send_last(self): q = Queue() def waiter(q): timer = Timeout(0.2) self.assertEquals(q.join(), 'hi2') timer.cancel() spawn(waiter, q) sleep(0) sleep(0) q.put('hi2')
def test_send_last (self): q = Queue() def waiter (q): timer = Timeout(0.2) self.assertEquals(q.join(), 'hi2') timer.cancel() spawn(waiter, q) sleep(0) sleep(0) q.put('hi2')
def test_resize_up(self): q = Queue(0) def sender(evt, q): q.put('hi') evt.send('done') evt = event.Event() gt = spawn(sender, evt, q) sleep(0) self.assert_(not evt.ready()) q.resize(1) sleep(0) self.assert_(evt.ready()) gt.wait()
def test_resize_to_Unlimited(self): q = Queue(0) def sender(evt, q): q.put('hi') evt.send('done') evt = event.Event() gt = spawn(sender, evt, q) sleep() self.assertFalse(evt.ready()) q.resize(None) sleep() self.assertTrue(evt.ready()) gt.wait()
def test_resize_to_Unlimited (self): q = Queue(0) def sender (evt, q): q.put('hi') evt.send('done') evt = event.Event() gt = spawn(sender, evt, q) sleep() self.assertFalse(evt.ready()) q.resize(None) sleep() self.assertTrue(evt.ready()) gt.wait()
def test_resize_up (self): q = Queue(0) def sender (evt, q): q.put('hi') evt.send('done') evt = event.Event() gt = spawn(sender, evt, q) sleep(0) self.assert_(not evt.ready()) q.resize(1) sleep(0) self.assert_(evt.ready()) gt.wait()
def test_waiters_that_cancel (self): q = Queue() def do_receive (q, evt): Timeout(0, RuntimeError()) try: result = q.join() evt.send(result) except RuntimeError: evt.send('timed out') evt = Event() spawn(do_receive, q, evt) self.assertEquals(evt.wait(), 'timed out') q.put('hi') self.assertEquals(q.get(), 'hi')
def test_channel_send (self): channel = Queue(0) events = [] def another_greenlet (): events.append(channel.get()) events.append(channel.get()) gt = spawn(another_greenlet) events.append('sending') channel.put('hello') events.append('sent hello') channel.put('world') events.append('sent world') self.assertEqual(['sending', 'hello', 'sent hello', 'world', 'sent world'], events)
def test_waiters_that_cancel(self): q = Queue() def do_receive(q, evt): Timeout(0, RuntimeError()) try: result = q.join() evt.send(result) except RuntimeError: evt.send('timed out') evt = Event() spawn(do_receive, q, evt) self.assertEquals(evt.wait(), 'timed out') q.put('hi') self.assertEquals(q.get(), 'hi')
def test_channel_waiters(self): c = Queue(0) w1 = spawn(c.get) w2 = spawn(c.get) w3 = spawn(c.get) sleep(0) self.assertEquals(c.getting(), 3) s1 = spawn(c.put, 1) s2 = spawn(c.put, 2) s3 = spawn(c.put, 3) s1.wait() s2.wait() s3.wait() self.assertEquals(c.getting(), 0) # NOTE: we don't guarantee that waiters are served in order results = sorted([w1.wait(), w2.wait(), w3.wait()]) self.assertEquals(results, [1, 2, 3])
def test_channel_waiters (self): c = Queue(0) w1 = spawn(c.get) w2 = spawn(c.get) w3 = spawn(c.get) sleep(0) self.assertEquals(c.getting(), 3) s1 = spawn(c.put, 1) s2 = spawn(c.put, 2) s3 = spawn(c.put, 3) s1.wait() s2.wait() s3.wait() self.assertEquals(c.getting(), 0) # NOTE: we don't guarantee that waiters are served in order results = sorted([w1.wait(), w2.wait(), w3.wait()]) self.assertEquals(results, [1, 2, 3])
def test_two_bogus_waiters (self): def do_receive (q, evt): Timeout(0, RuntimeError()) try: result = q.join() evt.send(result) except RuntimeError: evt.send('timed out') q = Queue() e1 = Event() e2 = Event() spawn(do_receive, q, e1) spawn(do_receive, q, e2) sleep(0) q.put('sent') self.assertEquals(e1.wait(), 'timed out') self.assertEquals(e2.wait(), 'timed out') self.assertEquals(q.get(), 'sent')
def test_multiple_waiters (self): self.reset_timeout(100000000) # tests that multiple waiters get their results back q = Queue() sendings = ['1', '2', '3', '4'] gts = [spawn(q.join) for x in sendings] sleep(0.01) # get 'em all waiting q.put(sendings[0]) q.put(sendings[1]) q.put(sendings[2]) q.put(sendings[3]) results = waitall(*gts) self.assertEquals(sorted(results), sorted(sendings))
def test_two_bogus_waiters(self): def do_receive(q, evt): Timeout(0, RuntimeError()) try: result = q.join() evt.send(result) except RuntimeError: evt.send('timed out') q = Queue() e1 = Event() e2 = Event() spawn(do_receive, q, e1) spawn(do_receive, q, e2) sleep(0) q.put('sent') self.assertEquals(e1.wait(), 'timed out') self.assertEquals(e2.wait(), 'timed out') self.assertEquals(q.get(), 'sent')
def test_max_size(self): q = Queue(2) results = [] def putter(q): q.put('a') results.append('a') q.put('b') results.append('b') q.put('c') results.append('c') spawn(putter, q) sleep(0) self.assertEquals(results, ['a', 'b']) self.assertEquals(q.get(), 'a') sleep(0) self.assertEquals(results, ['a', 'b', 'c']) self.assertEquals(q.get(), 'b') self.assertEquals(q.get(), 'c')
def test_max_size (self): q = Queue(2) results = [] def putter (q): q.put('a') results.append('a') q.put('b') results.append('b') q.put('c') results.append('c') spawn(putter, q) sleep(0) self.assertEquals(results, ['a', 'b']) self.assertEquals(q.get(), 'a') sleep(0) self.assertEquals(results, ['a', 'b', 'c']) self.assertEquals(q.get(), 'b') self.assertEquals(q.get(), 'c')
def test_waiting(self): q = Queue() gt1 = spawn(q.get) sleep(0) self.assertEquals(1, q.getting()) q.put('hi') sleep(0) self.assertEquals(0, q.getting()) self.assertEquals('hi', gt1.wait()) self.assertEquals(0, q.getting())
def test_two_waiters_one_dies(self): def waiter(q, evt): evt.send(q.join()) def do_receive(q, evt): Timeout(0, RuntimeError()) try: result = q.get() evt.send(result) except RuntimeError: evt.send('timed out') q = Queue() dying_evt = Event() waiting_evt = Event() spawn(do_receive, q, dying_evt) spawn(waiter, q, waiting_evt) sleep(0) q.put('hi') self.assertEquals(dying_evt.wait(), 'timed out') self.assertEquals(waiting_evt.wait(), 'hi')
def test_two_waiters_one_dies (self): def waiter (q, evt): evt.send(q.join()) def do_receive (q, evt): Timeout(0, RuntimeError()) try: result = q.get() evt.send(result) except RuntimeError: evt.send('timed out') q = Queue() dying_evt = Event() waiting_evt = Event() spawn(do_receive, q, dying_evt) spawn(waiter, q, waiting_evt) sleep(0) q.put('hi') self.assertEquals(dying_evt.wait(), 'timed out') self.assertEquals(waiting_evt.wait(), 'hi')
def test_putting_to_queue (self): timer = Timeout(0.1) try: size = 2 self.pool = IntPool(min_size = 0, max_size = size) queue = Queue() results = [] def just_put (pool_item, index): self.pool.put(pool_item) queue.put(index) for index in xrange(size + 1): pool_item = self.pool.get() spawn(just_put, pool_item, index) for _ in range(size + 1): x = queue.get() results.append(x) self.assertEqual(sorted(results), range(size + 1)) finally: timer.cancel()
def test_put_nowait_simple(self): from evy import hubs, queue hub = hubs.get_hub() result = [] q = Queue(1) hub.run_callback(store_result, result, q.put_nowait, 2) hub.run_callback(store_result, result, q.put_nowait, 3) sleep(0) sleep(0) assert len(result) == 2, result assert result[0] == None, result assert isinstance(result[1], queue.Full), result
def test_putting_to_queue(self): timer = Timeout(0.1) try: size = 2 self.pool = IntPool(min_size=0, max_size=size) queue = Queue() results = [] def just_put(pool_item, index): self.pool.put(pool_item) queue.put(index) for index in xrange(size + 1): pool_item = self.pool.get() spawn(just_put, pool_item, index) for _ in range(size + 1): x = queue.get() results.append(x) self.assertEqual(sorted(results), range(size + 1)) finally: timer.cancel()
def test_exhaustion(self): waiter = Queue(0) def consumer(): gotten = None try: gotten = self.pool.get() finally: waiter.put(gotten) spawn(consumer) one, two, three, four = (self.pool.get(), self.pool.get(), self.pool.get(), self.pool.get()) self.assertEquals(self.pool.free(), 0) # Let consumer run; nothing will be in the pool, so he will wait sleep(0) # Wake consumer self.pool.put(one) # wait for the consumer self.assertEquals(waiter.get(), one)
def test_exhaustion (self): waiter = Queue(0) def consumer (): gotten = None try: gotten = self.pool.get() finally: waiter.put(gotten) spawn(consumer) one, two, three, four = ( self.pool.get(), self.pool.get(), self.pool.get(), self.pool.get()) self.assertEquals(self.pool.free(), 0) # Let consumer run; nothing will be in the pool, so he will wait sleep(0) # Wake consumer self.pool.put(one) # wait for the consumer self.assertEquals(waiter.get(), one)
def test_waiting (self): q = Queue() gt1 = spawn(q.get) sleep(0) self.assertEquals(1, q.getting()) q.put('hi') sleep(0) self.assertEquals(0, q.getting()) self.assertEquals('hi', gt1.wait()) self.assertEquals(0, q.getting())
def test_resize_down(self): size = 5 q = Queue(5) for i in range(5): q.put(i) self.assertEquals(list(q.queue), range(5)) q.resize(1) sleep(0) self.assertEquals(list(q.queue), range(5))
def test_waiting(self): def do_wait(q, evt): result = q.join() evt.send(result) q = Queue() e1 = Event() spawn(do_wait, q, e1) sleep(0) self.assertEquals(1, q.join()) q.put('hi') sleep(0) self.assertEquals(0, q.join()) self.assertEquals('hi', e1.wait()) self.assertEquals(0, q.join())
def test_zero_max_size(self): q = Queue(0) def sender(evt, q): q.put('hi') evt.send('done') def receiver(q): x = q.get() return x evt = event.Event() gt = spawn(sender, evt, q) sleep(0) self.assert_(not evt.ready()) gt2 = spawn(receiver, q) self.assertEquals(gt2.wait(), 'hi') self.assertEquals(evt.wait(), 'done') gt.wait()
def test_zero_max_size(self): q = Queue(0) def sender(evt, q): q.put('hi') evt.send('done') def receiver(evt, q): x = q.join() evt.send(x) e1 = Event() e2 = Event() spawn(sender, e1, q) sleep(0) self.assert_(not e1.ready()) spawn(receiver, e2, q) self.assertEquals(e2.wait(), 'hi') self.assertEquals(e1.wait(), 'done')
def test_waiting (self): def do_wait (q, evt): result = q.join() evt.send(result) q = Queue() e1 = Event() spawn(do_wait, q, e1) sleep(0) self.assertEquals(1, q.join()) q.put('hi') sleep(0) self.assertEquals(0, q.join()) self.assertEquals('hi', e1.wait()) self.assertEquals(0, q.join())
def test_multiple_waiters(self): self.reset_timeout(100000000) # tests that multiple waiters get their results back q = Queue() sendings = ['1', '2', '3', '4'] gts = [spawn(q.join) for x in sendings] sleep(0.01) # get 'em all waiting q.put(sendings[0]) q.put(sendings[1]) q.put(sendings[2]) q.put(sendings[3]) results = waitall(*gts) self.assertEquals(sorted(results), sorted(sendings))
def test_getting_before_sending(self): q = Queue() gt = spawn(q.put, 'sent') self.assertEquals(q.get(), 'sent') gt.wait()
def test_send_first (self): q = Queue() q.put('hi') self.assertEquals(q.get(), 'hi')
def test_send_first(self): q = Queue() q.put('hi') self.assertEquals(q.get(), 'hi')
def test_getting_before_sending (self): q = Queue() gt = spawn(q.put, 'sent') self.assertEquals(q.get(), 'sent') gt.wait()
def test_channel_sender_timing_out(self): from evy import queue c = Queue(0) self.assertRaises(queue.Full, c.put, "hi", timeout=0.001) self.assertRaises(queue.Empty, c.get_nowait)