Пример #1
0
    def test_record_usage_multi(self):
        self.now = 24 * 3600 + 5
        tsa = ratelimit.get_timeslice(3600)
        tsb = ratelimit.get_timeslice(700)
        ratelimit.record_usage_multi([('a', tsa), ('b', tsb)])
        self.assertEquals(1, self.cache['rl:a-000000'])
        self.assertEquals(1, self.cache['rl:b-235500'])

        ratelimit.record_usage_multi([('a', tsa), ('b', tsb)])
        self.assertEquals(2, self.cache['rl:a-000000'])
        self.assertEquals(2, self.cache['rl:b-235500'])
Пример #2
0
    def test_record_usage_multi_across_slice_expiration(self):
        self.now = 24 * 3600 + 5
        tsa = ratelimit.get_timeslice(3600)
        tsb = ratelimit.get_timeslice(700)
        real_incr = self.cache.incr
        evicted = False

        def fake_incr_multi(keys, delta=1):
            if evicted:
                for key in keys:
                    del self.cache[key]
                raise pylibmc.NotFound()
            return real_incr(key)

        with patch.object(self.cache, 'incr_multi', fake_incr_multi):
            # Forcibly evict the key before incr is called, but after the
            # initial add call inside record_usage.
            evicted = True
            ratelimit.record_usage_multi([('a', tsa), ('b', tsb)])
            self.assertEquals(1, self.cache['rl:a-000000'])
            self.assertEquals(1, self.cache['rl:b-235500'])