コード例 #1
0
    def test_get_channel_when_two_free_and_one_closed(self):
        # Because we can't mock builtins ....
        class Set(set):

            def pop(self):
                pass

        conn = mock()
        ch1 = mock()
        ch1.closed = True
        ch2 = mock()
        ch2.closed = False
        cp = ChannelPool(conn)
        cp._free_channels = Set([ch1, ch2])
        cp._channels = 2

        # Because we want them in order
        expect(cp._free_channels.pop).returns(
            ch1).side_effect(super(Set, cp._free_channels).pop)
        expect(cp._free_channels.pop).returns(
            ch2).side_effect(super(Set, cp._free_channels).pop)

        self.assertEquals(ch2, cp._get_channel())
        self.assertEquals(set(), cp._free_channels)
        assert_equals(2, cp._channels)
コード例 #2
0
ファイル: channel_pool_test.py プロジェクト: yzlin/haigha
    def test_publish_does_not_resend_queued_messages_if_channel_is_inactive(
            self):
        ch = mock()
        cp = ChannelPool(None)
        user_cb = mock()
        ch.active = True
        ch.closed = False
        cp._queue.append((('a1', 'a2'), {'cb': 'foo', 'yo': 'dawg'}))

        expect(cp._get_channel).returns(ch)
        expect(ch.publish_synchronous).args('arg1',
                                            'arg2',
                                            cb=var('cb'),
                                            doit='harder')

        cp.publish('arg1', 'arg2', cb=user_cb, doit='harder')
        assert_equals(set(), cp._free_channels)
        assert_equals(1, len(cp._queue))

        ch.active = False

        stub(cp._process_queue)
        expect(user_cb)
        var('cb').value()
        assert_equals(set([ch]), cp._free_channels)
        assert_equals(1, len(cp._queue))
コード例 #3
0
    def test_channel_closed_cb(self):
        cp = ChannelPool(None)
        cp._channels = 32

        expect(cp._process_queue)
        cp._channel_closed_cb('channel')
        assert_equals(31, cp._channels)
コード例 #4
0
ファイル: channel_pool_test.py プロジェクト: grncdr/haigha
    def test_publish_appends_to_queue_when_no_ready_channels(self):
        cp = ChannelPool(None)

        expect(cp._get_channel).returns(None)

        cp.publish("arg1", "arg2", arg3="foo", cb="usercb")
        self.assertEquals(set(), cp._free_channels)
        assert_equals(deque([(("arg1", "arg2"), {"arg3": "foo", "cb": "usercb"})]), cp._queue)
コード例 #5
0
ファイル: channel_pool_test.py プロジェクト: ask/haigha
  def test_get_channel_when_none_free(self):
    conn = mock()
    cp = ChannelPool(conn)

    expect(conn.channel).returns( 'channel' )
    
    self.assertEquals( 'channel', cp._get_channel() )
    self.assertEquals( set(), cp._free_channels )
コード例 #6
0
  def test_get_channel_when_none_free(self):
    conn = mock()
    cp = ChannelPool(conn)

    expect(conn.channel).returns( 'channel' )
    
    self.assertEquals( 'channel', cp._get_channel() )
    self.assertEquals( set(), cp._free_channels )
コード例 #7
0
    def test_get_channel_returns_new_when_none_free_and_at_limit(self):
        conn = mock()
        cp = ChannelPool(conn, 1)
        cp._channels = 1

        stub(conn.channel)

        self.assertEquals(None, cp._get_channel())
        self.assertEquals(set(), cp._free_channels)
コード例 #8
0
    def test_get_channel_when_one_free_and_not_closed(self):
        conn = mock()
        ch = mock()
        ch.closed = False
        cp = ChannelPool(conn)
        cp._free_channels = set([ch])

        self.assertEquals(ch, cp._get_channel())
        self.assertEquals(set(), cp._free_channels)
コード例 #9
0
    def test_publish_appends_to_queue_when_no_ready_channels(self):
        cp = ChannelPool(None)

        expect(cp._get_channel).returns(None)

        cp.publish('arg1', 'arg2', arg3='foo', cb='usercb')
        self.assertEquals(set(), cp._free_channels)
        assert_equals(deque([(('arg1', 'arg2'), {'arg3': 'foo', 'cb': 'usercb'})]),
                      cp._queue)
コード例 #10
0
    def test_get_channel_returns_new_when_none_free_and_not_at_limit(self):
        conn = mock()
        cp = ChannelPool(conn)
        cp._channels = 1

        with expect(conn.channel).returns(mock()) as newchannel:
            expect(newchannel.add_close_listener).args(cp._channel_closed_cb)
            self.assertEquals(newchannel, cp._get_channel())
        self.assertEquals(set(), cp._free_channels)
        assert_equals(2, cp._channels)
コード例 #11
0
ファイル: channel_pool_test.py プロジェクト: grncdr/haigha
    def test_publish_appends_to_queue_when_no_ready_channels_out_of_several(self):
        ch1 = mock()
        cp = ChannelPool(None)
        ch1.active = False

        expect(cp._get_channel).returns(ch1)
        expect(cp._get_channel).returns(None)

        cp.publish("arg1", "arg2", arg3="foo", cb="usercb")
        self.assertEquals(set([ch1]), cp._free_channels)
        assert_equals(deque([(("arg1", "arg2"), {"arg3": "foo", "cb": "usercb"})]), cp._queue)
コード例 #12
0
    def test_publish_appends_to_queue_when_no_ready_channels_out_of_several(self):
        ch1 = mock()
        cp = ChannelPool(None)
        ch1.active = False

        expect(cp._get_channel).returns(ch1)
        expect(cp._get_channel).returns(None)

        cp.publish('arg1', 'arg2', arg3='foo', cb='usercb')
        self.assertEquals(set([ch1]), cp._free_channels)
        assert_equals(deque([(('arg1', 'arg2'), {'arg3': 'foo', 'cb': 'usercb'})]),
                      cp._queue)
コード例 #13
0
ファイル: channel_pool_test.py プロジェクト: dehun/haigha
    def test_publish_without_user_cb(self):
        ch = mock()
        cp = ChannelPool(None)

        expect(cp._get_channel).returns(ch)
        expect(ch.publish_synchronous).args('arg1', 'arg2', cb=var('cb'), doit='harder')

        cp.publish('arg1', 'arg2', doit='harder')
        assert_equals(set(), cp._free_channels)

        # run committed callback
        var('cb').value()
        assert_equals(set([ch]), cp._free_channels)
コード例 #14
0
ファイル: channel_pool_test.py プロジェクト: grncdr/haigha
    def test_publish_without_user_cb(self):
        ch = mock()
        cp = ChannelPool(None)

        expect(cp._get_channel).returns(ch)
        expect(ch.publish_synchronous).args("arg1", "arg2", cb=var("cb"), doit="harder")

        cp.publish("arg1", "arg2", doit="harder")
        assert_equals(set(), cp._free_channels)

        # run committed callback
        var("cb").value()
        assert_equals(set([ch]), cp._free_channels)
コード例 #15
0
ファイル: channel_pool_test.py プロジェクト: ask/haigha
  def test_get_channel_when_two_free_and_all_closed(self):
    conn = mock()
    ch1 = mock()
    ch1.closed = True
    ch2 = mock()
    ch2.closed = True
    cp = ChannelPool(conn)
    cp._free_channels = set([ch1,ch2])

    expect(conn.channel).returns('channel')

    self.assertEquals( 'channel', cp._get_channel() )
    self.assertEquals( set(), cp._free_channels )
コード例 #16
0
ファイル: channel_pool_test.py プロジェクト: xjdrew/haigha
  def test_publish_without_user_cb(self):
    ch = mock()
    cp = ChannelPool(None)

    expect(cp._get_channel).returns( ch )
    expect(ch.publish_synchronous).args( 'arg1', 'arg2', cb=var('cb'), doit='harder' )

    cp.publish( 'arg1', 'arg2', doit='harder' )
    assert_equals( set(), cp._free_channels )
    
    # run committed callback
    var('cb').value()
    assert_equals( set([ch]), cp._free_channels )
コード例 #17
0
  def test_get_channel_when_two_free_and_all_closed(self):
    conn = mock()
    ch1 = mock()
    ch1.closed = True
    ch2 = mock()
    ch2.closed = True
    cp = ChannelPool(conn)
    cp._free_channels = set([ch1,ch2])

    expect(conn.channel).returns('channel')

    self.assertEquals( 'channel', cp._get_channel() )
    self.assertEquals( set(), cp._free_channels )
コード例 #18
0
    def test_init(self):
        c = ChannelPool('connection')
        self.assertEquals('connection', c._connection)
        self.assertEquals(set(), c._free_channels)
        assert_equals(None, c._size)
        assert_equals(0, c._channels)
        assert_equals(deque(), c._queue)

        c = ChannelPool('connection', size=50)
        self.assertEquals('connection', c._connection)
        self.assertEquals(set(), c._free_channels)
        assert_equals(50, c._size)
        assert_equals(0, c._channels)
        assert_equals(deque(), c._queue)
コード例 #19
0
    def test_publish_searches_for_active_channel(self):
        ch1 = mock()
        ch2 = mock()
        ch3 = mock()
        ch1.active = ch2.active = False
        ch3.active = True
        cp = ChannelPool(None)

        expect(cp._get_channel).returns(ch1)
        expect(cp._get_channel).returns(ch2)
        expect(cp._get_channel).returns(ch3)
        expect(ch3.publish_synchronous).args('arg1', 'arg2', cb=ignore())

        cp.publish('arg1', 'arg2')
        self.assertEquals(set([ch1, ch2]), cp._free_channels)
コード例 #20
0
    def test_get_channel_when_two_free_and_all_closed(self):
        conn = mock()
        ch1 = mock()
        ch1.closed = True
        ch2 = mock()
        ch2.closed = True
        cp = ChannelPool(conn)
        cp._free_channels = set([ch1, ch2])
        cp._channels = 2

        with expect(conn.channel).returns(mock()) as newchannel:
            expect(newchannel.add_close_listener).args(cp._channel_closed_cb)
            self.assertEquals(newchannel, cp._get_channel())

        self.assertEquals(set(), cp._free_channels)
        assert_equals(3, cp._channels)
コード例 #21
0
  def test_publish_without_user_cb(self):
    ch = mock()
    cp = ChannelPool(None)

    def test_committed_cb(cb):
      # Because using this for side effects is kinda fugly, protect it
      if not getattr(cb,'_called_yet',False):
        cb()
        setattr(cb, '_called_yet', True)
      return True

    expect(cp._get_channel).returns( ch )
    expect(ch.publish_synchronous).args( 'arg1', 'arg2', cb=func(test_committed_cb), doit='harder' )

    self.assertEquals( set(), cp._free_channels )
    cp.publish( 'arg1', 'arg2', doit='harder' )
    self.assertEquals( set([ch]), cp._free_channels )
コード例 #22
0
ファイル: channel_pool_test.py プロジェクト: ask/haigha
  def test_publish_without_user_cb(self):
    ch = mock()
    cp = ChannelPool(None)

    def test_committed_cb(cb):
      # Because using this for side effects is kinda fugly, protect it
      if not getattr(cb,'_called_yet',False):
        cb()
        setattr(cb, '_called_yet', True)
      return True

    expect(cp._get_channel).returns( ch )
    expect(ch.publish_synchronous).args( 'arg1', 'arg2', cb=func(test_committed_cb), doit='harder' )

    self.assertEquals( set(), cp._free_channels )
    cp.publish( 'arg1', 'arg2', doit='harder' )
    self.assertEquals( set([ch]), cp._free_channels )
コード例 #23
0
ファイル: channel_pool_test.py プロジェクト: grncdr/haigha
    def test_publish_resends_queued_messages_if_channel_is_active(self):
        ch = mock()
        cp = ChannelPool(None)
        user_cb = mock()
        ch.active = True
        ch.closed = False
        cp._queue.append((("a1", "a2"), {"cb": "foo", "yo": "dawg"}))

        expect(cp._get_channel).returns(ch)
        expect(ch.publish_synchronous).args("arg1", "arg2", cb=var("cb"), doit="harder")

        cp.publish("arg1", "arg2", cb=user_cb, doit="harder")
        assert_equals(set(), cp._free_channels)
        assert_equals(1, len(cp._queue))

        expect(cp._process_queue)
        expect(user_cb)
        var("cb").value()
        assert_equals(set([ch]), cp._free_channels)
コード例 #24
0
ファイル: channel_pool_test.py プロジェクト: dehun/haigha
    def test_publish_resends_queued_messages_if_channel_is_active(self):
        ch = mock()
        cp = ChannelPool(None)
        user_cb = mock()
        ch.active = True
        ch.closed = False
        cp._queue.append((('a1', 'a2'), {'cb': 'foo', 'yo': 'dawg'}))

        expect(cp._get_channel).returns(ch)
        expect(ch.publish_synchronous).args('arg1', 'arg2', cb=var('cb'), doit='harder')

        cp.publish('arg1', 'arg2', cb=user_cb, doit='harder')
        assert_equals(set(), cp._free_channels)
        assert_equals(1, len(cp._queue))

        expect(cp._process_queue)
        expect(user_cb)
        var('cb').value()
        assert_equals(set([ch]), cp._free_channels)
コード例 #25
0
    def test_process_queue(self):
        cp = ChannelPool(None)
        cp._queue = deque([
            (('foo',), {'a': 1}),
            (('bar',), {'b': 2}),
        ])
        expect(cp.publish).args('foo', a=1)
        expect(cp.publish).args('bar', b=2)

        cp._process_queue()
        cp._process_queue()
        cp._process_queue()
コード例 #26
0
ファイル: channel_pool_test.py プロジェクト: grncdr/haigha
    def test_process_queue(self):
        cp = ChannelPool(None)
        cp._queue = deque([(("foo",), {"a": 1}), (("bar",), {"b": 2})])
        expect(cp.publish).args("foo", a=1)
        expect(cp.publish).args("bar", b=2)

        cp._process_queue()
        cp._process_queue()
        cp._process_queue()
コード例 #27
0
 def test_init(self):
   c = ChannelPool('connection')
   self.assertEquals('connection', c._connection)
   self.assertEquals(set(), c._free_channels)