Exemplo n.º 1
0
def test_that_when_exceed_rate_limit_request_fails(
        notify_db,
        notify_db_session,
        key_type,
        mocker):
    with freeze_time("2016-01-01 12:00:00.000000"):

        if key_type == 'live':
            api_key_type = 'normal'
        else:
            api_key_type = key_type

        mocker.patch('app.redis_store.exceeded_rate_limit', return_value=True)
        mocker.patch('app.notifications.validators.services_dao')

        service = create_service(notify_db, notify_db_session, restricted=True)
        api_key = sample_api_key(notify_db, notify_db_session, service=service, key_type=api_key_type)
        with pytest.raises(RateLimitError) as e:
            check_service_over_api_rate_limit(service, api_key)

        assert app.redis_store.exceeded_rate_limit.called_with(
            "{}-{}".format(str(service.id), api_key.key_type),
            service.rate_limit,
            60
        )
        assert e.value.status_code == 429
        assert e.value.message == 'Exceeded rate limit for key type {} of {} requests per {} seconds'.format(
            key_type.upper(), service.rate_limit, 60
        )
        assert e.value.fields == []
def test_should_not_rate_limit_if_limiting_is_disabled(sample_service, mocker):
    with freeze_time("2016-01-01 12:00:00.000000"):
        current_app.config['API_RATE_LIMIT_ENABLED'] = False

        mocker.patch('app.redis_store.exceeded_rate_limit', return_value=False)
        mocker.patch('app.notifications.validators.services_dao')

        sample_service.restricted = True
        api_key = create_api_key(sample_service)

        check_service_over_api_rate_limit(sample_service, api_key)
        assert not app.redis_store.exceeded_rate_limit.called
def test_that_when_not_exceeded_rate_limit_request_succeeds(
        sample_service, mocker):
    with freeze_time("2016-01-01 12:00:00.000000"):
        mocker.patch('app.redis_store.exceeded_rate_limit', return_value=False)
        mocker.patch('app.notifications.validators.services_dao')

        sample_service.restricted = True
        api_key = create_api_key(sample_service)

        check_service_over_api_rate_limit(sample_service, api_key)
        assert app.redis_store.exceeded_rate_limit.called_with(
            "{}-{}".format(str(sample_service.id), api_key.key_type), 3000, 60)
Exemplo n.º 4
0
def test_should_not_rate_limit_if_limiting_is_disabled(notify_db,
                                                       notify_db_session,
                                                       mocker):
    with freeze_time("2016-01-01 12:00:00.000000"):
        current_app.config["API_RATE_LIMIT_ENABLED"] = False

        mocker.patch("app.redis_store.exceeded_rate_limit", return_value=False)
        mocker.patch("app.notifications.validators.services_dao")

        service = create_service(notify_db, notify_db_session, restricted=True)
        api_key = sample_api_key(notify_db, notify_db_session, service=service)

        check_service_over_api_rate_limit(service, api_key)
        assert not app.redis_store.exceeded_rate_limit.called
Exemplo n.º 5
0
def test_that_when_not_exceeded_rate_limit_request_succeeds(
        notify_db, notify_db_session, mocker):
    with freeze_time("2016-01-01 12:00:00.000000"):
        mocker.patch("app.redis_store.exceeded_rate_limit", return_value=False)
        mocker.patch("app.notifications.validators.services_dao")

        service = create_service(notify_db, notify_db_session, restricted=True)
        api_key = sample_api_key(notify_db,
                                 notify_db_session,
                                 service=service,
                                 key_type="normal")

        check_service_over_api_rate_limit(service, api_key)
        assert app.redis_store.exceeded_rate_limit.called_with(
            "{}-{}".format(str(service.id), api_key.key_type), 3000, 60)