dataservices-api/server/lib/python/cartodb_services/test/metrics/test_quota.py

86 lines
3.1 KiB
Python
Raw Normal View History

2016-10-20 19:13:30 +08:00
from unittest import TestCase
from mockredis import MockRedis
from ..test_helper import *
2016-10-20 19:13:30 +08:00
from cartodb_services.metrics.quota import QuotaChecker
from cartodb_services.metrics import RoutingConfig
from datetime import datetime
class RoutingConfigMock(object):
def __init__(self, **kwargs):
self.__dict__ = kwargs
class TestQuotaChecker(TestCase):
def setUp(self):
self.username = 'my_test_user'
self.period_end_date = datetime.today()
self.service_type = 'routing_mapzen'
self.redis_key = 'user:{0}:{1}:success_responses:{2}{3}'.format(
self.username,
self.service_type,
self.period_end_date.year,
self.period_end_date.strftime('%m')
)
2016-10-20 19:13:30 +08:00
def test_routing_quota_check_passes_when_enough_quota(self):
user_service_config = RoutingConfigMock(
username = self.username,
2016-10-20 19:13:30 +08:00
organization = None,
service_type = self.service_type,
2018-03-14 20:31:00 +08:00
routing_quota = 1000,
2016-10-20 19:13:30 +08:00
period_end_date = datetime.today(),
soft_limit = False
)
redis_conn = MockRedis()
redis_conn.zincrby(self.redis_key, self.period_end_date.strftime('%d'), 999)
2016-10-20 19:13:30 +08:00
assert QuotaChecker(user_service_config, redis_conn).check() == True
def test_routing_quota_check_fails_when_quota_exhausted(self):
user_service_config = RoutingConfigMock(
username = self.username,
2016-10-20 19:13:30 +08:00
organization = None,
service_type = self.service_type,
2018-03-14 20:31:00 +08:00
routing_quota = 1000,
2016-10-20 19:13:30 +08:00
period_end_date = datetime.today(),
soft_limit = False
)
redis_conn = MockRedis()
redis_conn.zincrby(self.redis_key, self.period_end_date.strftime('%d'), 1001)
2016-10-20 19:13:30 +08:00
checker = QuotaChecker(user_service_config, redis_conn)
assert checker.check() == False
def test_routing_quota_check_fails_right_in_the_limit(self):
"""
I have 1000 credits and I just spent 1000 today. I should not pass
the check to perform the 1001th routing operation.
"""
user_service_config = RoutingConfigMock(
username = self.username,
organization = None,
service_type = self.service_type,
2018-03-14 20:31:00 +08:00
routing_quota = 1000,
period_end_date = datetime.today(),
soft_limit = False
)
redis_conn = MockRedis()
redis_conn.zincrby(self.redis_key, self.period_end_date.strftime('%d'), 1000)
checker = QuotaChecker(user_service_config, redis_conn)
assert checker.check() == False
2016-10-20 19:13:30 +08:00
def test_routing_quota_check_passes_if_no_quota_but_soft_limit(self):
user_service_config = RoutingConfigMock(
username = self.username,
2016-10-20 19:13:30 +08:00
organization = None,
service_type = self.service_type,
2018-03-14 20:31:00 +08:00
routing_quota = 1000,
2016-10-20 19:13:30 +08:00
period_end_date = datetime.today(),
soft_limit = True
)
redis_conn = MockRedis()
redis_conn.zincrby(self.redis_key, self.period_end_date.strftime('%d'), 1001)
2016-10-20 19:13:30 +08:00
checker = QuotaChecker(user_service_config, redis_conn)
assert checker.check() == True