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_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)
Exemple #3
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 #4
0
    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')
Exemple #5
0
    def test_senders_that_die(self):
        q = Queue()

        def do_send(q):
            q.put('sent')

        spawn(do_send, q)
        self.assertEquals(q.join(), 'sent')
Exemple #6
0
    def test_senders_that_die (self):
        q = Queue()

        def do_send (q):
            q.put('sent')

        spawn(do_send, q)
        self.assertEquals(q.join(), 'sent')
Exemple #7
0
    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')
Exemple #8
0
 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')
Exemple #9
0
 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')
Exemple #10
0
    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()
Exemple #11
0
    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')
Exemple #12
0
    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')
Exemple #13
0
    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))
Exemple #14
0
    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()
Exemple #15
0
    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')
Exemple #16
0
    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')
Exemple #17
0
    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()
Exemple #18
0
    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()
Exemple #19
0
    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()
Exemple #20
0
    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()
Exemple #21
0
    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')
Exemple #22
0
    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)
Exemple #23
0
    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')
Exemple #24
0
    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])
Exemple #25
0
    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])
Exemple #26
0
    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')
Exemple #27
0
    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))
Exemple #28
0
    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')
Exemple #29
0
    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')
Exemple #30
0
    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')
Exemple #31
0
 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())
Exemple #32
0
    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')
Exemple #33
0
    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')
Exemple #34
0
    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()
Exemple #35
0
    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
Exemple #36
0
    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()
Exemple #37
0
    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)
Exemple #38
0
    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)
Exemple #39
0
 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())
Exemple #40
0
    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))
Exemple #41
0
    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())
Exemple #42
0
    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()
Exemple #43
0
    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')
Exemple #44
0
    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())
Exemple #45
0
    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))
Exemple #46
0
 def test_getting_before_sending(self):
     q = Queue()
     gt = spawn(q.put, 'sent')
     self.assertEquals(q.get(), 'sent')
     gt.wait()
Exemple #47
0
 def test_send_first (self):
     q = Queue()
     q.put('hi')
     self.assertEquals(q.get(), 'hi')
Exemple #48
0
 def test_send_first(self):
     q = Queue()
     q.put('hi')
     self.assertEquals(q.get(), 'hi')
Exemple #49
0
 def test_getting_before_sending (self):
     q = Queue()
     gt = spawn(q.put, 'sent')
     self.assertEquals(q.get(), 'sent')
     gt.wait()
Exemple #50
0
    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)