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'])
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'])