Ejemplo n.º 1
0
    def test_consumer_group_container(self):
        ra1, rb1, ra2, rb2, rb3 = self._create_test_data()
        cg1 = db.consumer_group('g1', {'sa': '1', 'sb': '0'})
        cg2 = db.consumer_group('g2', {'sb': '2'})

        self.assertEqual(cg1.create(), {'sa': True, 'sb': True})
        self.assertEqual(cg2.create(), {'sb': True})

        self.assertEqual(dict(cg1.read(count=2)), {
            b'sa': [(ra2, {b'k': b'a2'})],
            b'sb': [(rb1, {b'k': b'b1'}), (rb2, {b'k': b'b2'})]})
        self.assertEqual(cg1.sa.read(), [])
        self.assertEqual(cg1.sb.read(), [(rb3, {b'k': b'b3'})])

        self.assertEqual(cg1.sa.ack(ra2), 1)
        self.assertEqual(cg1.sb.ack(rb1, rb3), 2)
        p1, = cg1.sb.pending()
        self.assertEqual(p1['message_id'], rb2)
        self.assertEqual(p1['consumer'], b'g1.c1')

        self.assertEqual(cg2.read(count=1), [
            [b'sb', [(rb2, {b'k': b'b2'})]]])
        self.assertEqual(cg2.sb.read(), [(rb3, {b'k': b'b3'})])

        self.assertEqual(cg1.destroy(), {'sa': 1, 'sb': 1})
        self.assertEqual(cg2.destroy(), {'sb': 1})
Ejemplo n.º 2
0
    def test_consumer_group_container(self):
        ra1, rb1, ra2, rb2, rb3 = self._create_test_data()
        cg1 = db.consumer_group('g1', {'sa': '1', 'sb': '0'})
        cg2 = db.consumer_group('g2', {'sb': '2'})

        self.assertEqual(cg1.create(), {'sa': True, 'sb': True})
        self.assertEqual(cg2.create(), {'sb': True})

        self.assertEqual(
            dict(cg1.read(count=2)), {
                b'sa': [(ra2, {
                    b'k': b'a2'
                })],
                b'sb': [(rb1, {
                    b'k': b'b1'
                }), (rb2, {
                    b'k': b'b2'
                })]
            })
        self.assertEqual(cg1.sa.read(), [])
        self.assertEqual(cg1.sb.read(), [(rb3, {b'k': b'b3'})])

        self.assertEqual(cg1.sa.ack(ra2), 1)
        self.assertEqual(cg1.sb.ack(rb1, rb3), 2)
        p1, = cg1.sb.pending()
        self.assertEqual(p1['message_id'], rb2)
        self.assertEqual(p1['consumer'], b'g1.c1')

        self.assertEqual(cg2.read(count=1), [[b'sb', [(rb2, {b'k': b'b2'})]]])
        self.assertEqual(cg2.sb.read(), [(rb3, {b'k': b'b3'})])

        self.assertEqual(cg1.destroy(), {'sa': 1, 'sb': 1})
        self.assertEqual(cg2.destroy(), {'sb': 1})
Ejemplo n.º 3
0
    def test_consumer_group_create(self):
        cg = db.consumer_group('cg', ['sa'])
        self.assertEqual(cg.create(), {'sa': True})

        # Creating the consumer group again will report that it was not created
        # for the given key(s).
        self.assertEqual(cg.create(), {'sa': False})

        # We can register the consumer group with another key.
        cg = db.consumer_group('cg', ['sa', 'sb'])
        self.assertEqual(cg.create(), {'sa': False, 'sb': True})
Ejemplo n.º 4
0
    def test_consumer_group_create(self):
        cg = db.consumer_group('cg', ['sa'])
        self.assertEqual(cg.create(), {'sa': True})

        # Creating the consumer group again will report that it was not created
        # for the given key(s).
        self.assertEqual(cg.create(), {'sa': False})

        # We can register the consumer group with another key.
        cg = db.consumer_group('cg', ['sa', 'sb'])
        self.assertEqual(cg.create(), {'sa': False, 'sb': True})
Ejemplo n.º 5
0
    def test_stream_group_info(self):
        sa = db.Stream('sa')
        ra1 = sa.add({'k': 'a1'})
        ra2 = sa.add({'k': 'a2'})
        ra3 = sa.add({'k': 'a3'})

        sb = db.Stream('sb')
        rb1 = sb.add({'k': 'b1'})

        sa_info = sa.info()
        self.assertEqual(sa_info['groups'], 0)
        self.assertEqual(sa_info['length'], 3)
        self.assertEqual(sa_info['first-entry'][0], ra1)
        self.assertEqual(sa_info['last-entry'][0], ra3)

        sb_info = sb.info()
        self.assertEqual(sb_info['groups'], 0)
        self.assertEqual(sb_info['length'], 1)
        self.assertEqual(sb_info['first-entry'][0], rb1)
        self.assertEqual(sb_info['last-entry'][0], rb1)

        self.assertEqual(sa.groups_info(), [])
        self.assertEqual(sb.groups_info(), [])

        # Create consumer groups.
        cga = db.consumer_group('cga', ['sa'])
        cga.create()
        cgab = db.consumer_group('cgab', ['sa', 'sb'])
        cgab.create()

        self.assertEqual(sa.info()['groups'], 2)
        self.assertEqual(sb.info()['groups'], 1)

        sa_groups = sa.groups_info()
        self.assertEqual(len(sa_groups), 2)
        self.assertEqual(sorted(g['name'] for g in sa_groups),
                         [b'cga', b'cgab'])

        sb_groups = sb.groups_info()
        self.assertEqual(len(sb_groups), 1)
        self.assertEqual(sb_groups[0]['name'], b'cgab')

        # Verify we can get stream info from the consumer group.
        stream_info = cgab.stream_info()
        self.assertEqual(sorted(stream_info), ['sa', 'sb'])

        # Destroy consumer group?
        cgab.destroy()
        self.assertEqual(len(sa.groups_info()), 1)
        self.assertEqual(len(sb.groups_info()), 0)
Ejemplo n.º 6
0
    def test_stream_group_info(self):
        sa = db.Stream('sa')
        ra1 = sa.add({'k': 'a1'})
        ra2 = sa.add({'k': 'a2'})
        ra3 = sa.add({'k': 'a3'})

        sb = db.Stream('sb')
        rb1 = sb.add({'k': 'b1'})

        sa_info = sa.info()
        self.assertEqual(sa_info['groups'], 0)
        self.assertEqual(sa_info['length'], 3)
        self.assertEqual(sa_info['first-entry'][0], ra1)
        self.assertEqual(sa_info['last-entry'][0], ra3)

        sb_info = sb.info()
        self.assertEqual(sb_info['groups'], 0)
        self.assertEqual(sb_info['length'], 1)
        self.assertEqual(sb_info['first-entry'][0], rb1)
        self.assertEqual(sb_info['last-entry'][0], rb1)

        self.assertEqual(sa.groups_info(), [])
        self.assertEqual(sb.groups_info(), [])

        # Create consumer groups.
        cga = db.consumer_group('cga', ['sa'])
        cga.create()
        cgab = db.consumer_group('cgab', ['sa', 'sb'])
        cgab.create()

        self.assertEqual(sa.info()['groups'], 2)
        self.assertEqual(sb.info()['groups'], 1)

        sa_groups = sa.groups_info()
        self.assertEqual(len(sa_groups), 2)
        self.assertEqual(sorted(g['name'] for g in sa_groups),
                         [b'cga', b'cgab'])

        sb_groups = sb.groups_info()
        self.assertEqual(len(sb_groups), 1)
        self.assertEqual(sb_groups[0]['name'], b'cgab')

        # Verify we can get stream info from the consumer group.
        stream_info = cgab.stream_info()
        self.assertEqual(sorted(stream_info), ['sa', 'sb'])

        # Destroy consumer group?
        cgab.destroy()
        self.assertEqual(len(sa.groups_info()), 1)
        self.assertEqual(len(sb.groups_info()), 0)
Ejemplo n.º 7
0
    def test_consumer_group_consumers(self):
        ra1, rb1, ra2, rb2, rb3 = self._create_test_data()
        cg11 = db.consumer_group('g1', {'sa': '0', 'sb': '0'}, consumer='cg11')
        cg11.create()
        cg12 = cg11.consumer('cg12')

        self.assertEqual(dict(cg11.read(count=1)), {
            b'sa': [(ra1, {
                b'k': b'a1'
            })],
            b'sb': [(rb1, {
                b'k': b'b1'
            })]
        })

        self.assertEqual(dict(cg12.read(count=1, block=1)), {
            b'sa': [(ra2, {
                b'k': b'a2'
            })],
            b'sb': [(rb2, {
                b'k': b'b2'
            })]
        })

        pa1, pa2 = cg11.sa.pending()
        self.assertEqual(pa1['message_id'], ra1)
        self.assertEqual(pa1['consumer'], b'cg11')
        self.assertEqual(pa2['message_id'], ra2)
        self.assertEqual(pa2['consumer'], b'cg12')

        pb1, pb2 = cg11.sb.pending()
        self.assertEqual(pb1['message_id'], rb1)
        self.assertEqual(pb1['consumer'], b'cg11')
        self.assertEqual(pb2['message_id'], rb2)
        self.assertEqual(pb2['consumer'], b'cg12')
Ejemplo n.º 8
0
    def test_consumer_group_streams(self):
        ra1, rb1, ra2, rb2, rb3 = self._create_test_data()
        cg = db.consumer_group('g1', ['sa', 'sb'])

        self.assertEqual(cg.sa[ra1], (ra1, {b'k': b'a1'}))
        self.assertEqual(cg.sb[rb3], (rb3, {b'k': b'b3'}))

        def assertMessages(resp, expected):
            self.assertEqual([mid for mid, _ in resp], expected)

        assertMessages(cg.sa[ra1:], [ra1, ra2])
        assertMessages(cg.sa[:ra1], [ra1])
        assertMessages(cg.sa[ra2:], [ra2])
        assertMessages(cg.sa[:ra2], [ra1, ra2])
        assertMessages(cg.sa[rb3:], [])
        assertMessages(cg.sa[:b'0-1'], [])
        assertMessages(list(cg.sa), [ra1, ra2])

        assertMessages(cg.sb[rb1:], [rb1, rb2, rb3])
        assertMessages(cg.sb[rb1::2], [rb1, rb2])
        assertMessages(cg.sb[:rb1], [rb1])
        assertMessages(cg.sb[rb3:], [rb3])
        assertMessages(cg.sb[:rb3], [rb1, rb2, rb3])
        assertMessages(list(cg.sb), [rb1, rb2, rb3])

        self.assertEqual(len(cg.sa), 2)
        self.assertEqual(len(cg.sb), 3)

        del cg.sa[ra1]
        del cg.sb[rb1, rb3]
        self.assertEqual(len(cg.sa), 1)
        self.assertEqual(len(cg.sb), 1)
        assertMessages(list(cg.sa), [ra2])
        assertMessages(list(cg.sb), [rb2])
Ejemplo n.º 9
0
    def test_consumer_group_consumers(self):
        ra1, rb1, ra2, rb2, rb3 = self._create_test_data()
        cg11 = db.consumer_group('g1', {'sa': '0', 'sb': '0'}, consumer='cg11')
        cg11.create()
        cg12 = cg11.consumer('cg12')

        self.assertEqual(dict(cg11.read(count=1)), {
            b'sa': [(ra1, {b'k': b'a1'})],
            b'sb': [(rb1, {b'k': b'b1'})]})

        self.assertEqual(dict(cg12.read(count=1)), {
            b'sa': [(ra2, {b'k': b'a2'})],
            b'sb': [(rb2, {b'k': b'b2'})]})

        pa1, pa2 = cg11.sa.pending()
        self.assertEqual(pa1['message_id'], ra1)
        self.assertEqual(pa1['consumer'], b'cg11')
        self.assertEqual(pa2['message_id'], ra2)
        self.assertEqual(pa2['consumer'], b'cg12')

        pb1, pb2 = cg11.sb.pending()
        self.assertEqual(pb1['message_id'], rb1)
        self.assertEqual(pb1['consumer'], b'cg11')
        self.assertEqual(pb2['message_id'], rb2)
        self.assertEqual(pb2['consumer'], b'cg12')
Ejemplo n.º 10
0
    def test_consumer_group_streams(self):
        ra1, rb1, ra2, rb2, rb3 = self._create_test_data()
        cg = db.consumer_group('g1', ['sa', 'sb'])

        self.assertEqual(cg.sa[ra1], (ra1, {b'k': b'a1'}))
        self.assertEqual(cg.sb[rb3], (rb3, {b'k': b'b3'}))

        def assertMessages(resp, expected):
            self.assertEqual([mid for mid, _ in resp], expected)

        assertMessages(cg.sa[ra1:], [ra1, ra2])
        assertMessages(cg.sa[:ra1], [ra1])
        assertMessages(cg.sa[ra2:], [ra2])
        assertMessages(cg.sa[:ra2], [ra1, ra2])
        assertMessages(cg.sa[rb3:], [])
        assertMessages(cg.sa[:b'0-1'], [])
        assertMessages(list(cg.sa), [ra1, ra2])

        assertMessages(cg.sb[rb1:], [rb1, rb2, rb3])
        assertMessages(cg.sb[rb1::2], [rb1, rb2])
        assertMessages(cg.sb[:rb1], [rb1])
        assertMessages(cg.sb[rb3:], [rb3])
        assertMessages(cg.sb[:rb3], [rb1, rb2, rb3])
        assertMessages(list(cg.sb), [rb1, rb2, rb3])

        self.assertEqual(len(cg.sa), 2)
        self.assertEqual(len(cg.sb), 3)

        del cg.sa[ra1]
        del cg.sb[rb1, rb3]
        self.assertEqual(len(cg.sa), 1)
        self.assertEqual(len(cg.sb), 1)
        assertMessages(list(cg.sa), [ra2])
        assertMessages(list(cg.sb), [rb2])
Ejemplo n.º 11
0
    def test_consumer_group_stream_creation(self):
        cg = db.consumer_group('cg1', ['stream-a', 'stream-b'])
        self.assertFalse(db.exists('stream-a'))
        self.assertFalse(db.exists('stream-b'))

        cg.create()

        # The streams were created (by adding and then deleting a message).
        self.assertTrue(db.exists('stream-a'))
        self.assertTrue(db.exists('stream-b'))

        # The streams that were automatically created will not have any data.
        self.assertEqual(db.xlen('stream-a'), 0)
        self.assertEqual(db.xlen('stream-b'), 0)

        # If a stream already exists that's OK.
        db.xadd('stream-c', {'data': 'dummy'}, id=b'1')
        cg = db.consumer_group('cg2', ['stream-c', 'stream-d'])
        self.assertTrue(db.exists('stream-c'))
        self.assertEqual(db.type('stream-c'), b'stream')
        self.assertFalse(db.exists('stream-d'))

        cg.create()
        self.assertTrue(db.exists('stream-d'))
        self.assertEqual(db.type('stream-c'), b'stream')
        self.assertEqual(db.type('stream-d'), b'stream')
        self.assertEqual(db.xlen('stream-c'), 1)
        self.assertEqual(db.xlen('stream-d'), 0)

        # If a stream key already exists and is a different type, fail.
        db.lpush('l1', 'item-1')
        db.hset('h1', 'key', 'data')
        db.sadd('s1', 'item-1')
        db.set('k1', 'v1')
        db.zadd('z1', {'item-1': 1.0})
        for key in ('l1', 'h1', 's1', 'k1', 'z1'):
            cg = db.consumer_group('cg-%s' % key, keys=[key])
            self.assertRaises(ValueError, cg.create)
Ejemplo n.º 12
0
    def test_consumer_group_stream_creation(self):
        cg = db.consumer_group('cg1', ['stream-a', 'stream-b'])
        self.assertFalse(db.exists('stream-a'))
        self.assertFalse(db.exists('stream-b'))

        cg.create()

        # The streams were created (by adding and then deleting a message).
        self.assertTrue(db.exists('stream-a'))
        self.assertTrue(db.exists('stream-b'))

        # The streams that were automatically created will not have any data.
        self.assertEqual(db.xlen('stream-a'), 0)
        self.assertEqual(db.xlen('stream-b'), 0)

        # If a stream already exists that's OK.
        db.xadd('stream-c', {'data': 'dummy'}, id=b'1')
        cg = db.consumer_group('cg2', ['stream-c', 'stream-d'])
        self.assertTrue(db.exists('stream-c'))
        self.assertEqual(db.type('stream-c'), b'stream')
        self.assertFalse(db.exists('stream-d'))

        cg.create()
        self.assertTrue(db.exists('stream-d'))
        self.assertEqual(db.type('stream-c'), b'stream')
        self.assertEqual(db.type('stream-d'), b'stream')
        self.assertEqual(db.xlen('stream-c'), 1)
        self.assertEqual(db.xlen('stream-d'), 0)

        # If a stream key already exists and is a different type, fail.
        db.lpush('l1', 'item-1')
        db.hset('h1', 'key', 'data')
        db.sadd('s1', 'item-1')
        db.set('k1', 'v1')
        db.zadd('z1', {'item-1': 1.0})
        for key in ('l1', 'h1', 's1', 'k1', 'z1'):
            cg = db.consumer_group('cg-%s' % key, keys=[key])
            self.assertRaises(ValueError, cg.create)