Esempio n. 1
0
    def test_get_key(self):
        h = db.Hash('h1')
        h['hk1'] = 'v1'

        l = db.List('l1')
        l.append('i1')

        s = db.Set('s1')
        s.add('k1')

        zs = db.ZSet('z1')
        zs.add({'i1': 1., 'i2': 2.})

        h_db = db.get_key('h1')
        self.assertTrue(isinstance(h_db, Hash))
        self.assertEqual(h_db['hk1'], b'v1')

        l_db = db.get_key('l1')
        self.assertTrue(isinstance(l_db, List))
        self.assertEqual(l_db[0], b'i1')

        s_db = db.get_key('s1')
        self.assertTrue(isinstance(s_db, Set))
        self.assertEqual(s_db.members(), set((b'k1', )))

        z_db = db.get_key('z1')
        self.assertTrue(isinstance(z_db, ZSet))
        self.assertEqual(z_db.score('i1'), 1.)
Esempio n. 2
0
    def test_sort(self):
        values = ['charlie', 'zaizee', 'mickey', 'huey']
        self.lst.extend(values)
        self.assertEqual(self.lst.sort(),
                         [b'charlie', b'huey', b'mickey', b'zaizee'])

        self.lst.sort(ordering='DESC', limit=3, store='l_dest')
        self.assertList(db.List('l_dest'), [b'zaizee', b'mickey', b'huey'])
Esempio n. 3
0
    def test_sort(self):
        values = ['charlie', 3, 'zaizee', 2, 'mickey', 6, 'huey', 3]
        self.zs.add(*values)
        self.assertEqual(self.zs.sort(),
                         [b'charlie', b'huey', b'mickey', b'zaizee'])

        self.zs.sort(ordering='DESC', limit=3, store='z_dest')
        res = db.List('z_dest')
        self.assertEqual(list(res), [b'zaizee', b'mickey', b'huey'])
Esempio n. 4
0
    def test_rate_limit_rollover(self):
        rl = db.rate_limit('test-rl2', 3, 100)
        container = db.List('test-rl2:k1')

        now = time.time()
        past = now - 101

        # Simulate two events.
        container.extend([now, now])

        # Third event goes through OK.
        self.assertFalse(rl.limit('k1'))

        # Fourth event is rate-limited.
        self.assertTrue(rl.limit('k1'))

        # There are three timestamps in the container.
        self.assertEqual(len(container), 3)

        # Hand modify the oldest timestamp to appear as if it happened over
        # 100 seconds ago.
        container[-1] = past

        # We can again perform an action.
        self.assertFalse(rl.limit('k1'))

        # We once again have 3 items all within the last 100 seconds, so we
        # are rate-limited.
        self.assertTrue(rl.limit('k1'))

        # There are only 3 items in the container.
        self.assertEqual(len(container), 3)

        # The oldest item is the 2nd we added at the beginning of the test.
        self.assertEqual(float(container[-1]), now)

        # Remove an item and make the 2nd timestamp (oldest) in the past. This
        # gives us 2 actions.
        container.popright()
        container[-1] = past

        self.assertFalse(rl.limit('k1'))
        self.assertFalse(rl.limit('k1'))
        self.assertTrue(rl.limit('k1'))
Esempio n. 5
0
    def test_slicing(self):
        self.lst.extend(['i1', 'i2', 'i3', 'i4'])
        self.assertEqual(self.lst[:1], [b'i1'])
        self.assertEqual(self.lst[:2], [b'i1', b'i2'])
        self.assertEqual(self.lst[:-1], [b'i1', b'i2', b'i3'])
        self.assertEqual(self.lst[1:2], [b'i2'])
        self.assertEqual(self.lst[1:], [b'i2', b'i3', b'i4'])

        l = db.List('l1')
        l.extend(range(10))

        # LTRIM, preserve the 1st to last (removes the 0th element).
        del l[1:-1]
        self.assertEqual([int(decode(i)) for i in l],
                         [1, 2, 3, 4, 5, 6, 7, 8, 9])

        # Trim the list so that it contains only the values within the
        # specified range.
        del l[:3]
        self.assertEqual([int(decode(i)) for i in l], [1, 2, 3])
Esempio n. 6
0
    def test_decorator(self):
        rl = db.rate_limit('test-rl2', 3, 100)
        container = db.List('test-rl2:fake-key')

        def key_fn(*args, **kwargs):
            return 'fake-key'

        @rl.rate_limited(key_function=key_fn)
        def do_test():
            return 'OK'

        now = time.time()
        container.extend([now, now])

        self.assertEqual(do_test(), 'OK')
        self.assertRaises(RateLimitException, do_test)

        container.popright()
        container[-1] = now - 101

        self.assertEqual(do_test(), 'OK')
        self.assertEqual(do_test(), 'OK')
        self.assertRaises(RateLimitException, do_test)
Esempio n. 7
0
 def test_as_list(self):
     self.lst.extend(['foo', 'bar'])
     self.assertEqual(self.lst.as_list(True), ['foo', 'bar'])
     self.assertEqual(db.List('test').as_list(), [])
Esempio n. 8
0
 def setUp(self):
     super(TestList, self).setUp()
     self.lst = db.List('my-list')