def test_ratelimiting_block_with_hint(self, pyramid_services, pyramid_request, metrics): def view(context, request): return None ratelimited_view = xmlrpc.ratelimit()(view) context = pretend.stub() pyramid_request.remote_addr = "127.0.0.1" fake_rate_limiter = pretend.stub( test=lambda *a: False, hit=lambda *a: True, resets_in=lambda *a: datetime.timedelta(minutes=11, seconds=6.9), ) pyramid_services.register_service(fake_rate_limiter, IRateLimiter, None, name="xmlrpc.client") with pytest.raises(xmlrpc.XMLRPCWrappedError) as exc: ratelimited_view(context, pyramid_request) assert exc.value.faultString == ( "HTTPTooManyRequests: The action could not be performed because there " "were too many requests by the client. Limit may reset in 666 seconds." ) assert metrics.increment.calls == [ pretend.call("warehouse.xmlrpc.ratelimiter.exceeded", tags=[]) ]
def test_ratelimiting_pass(self, pyramid_services, pyramid_request, metrics): def view(context, request): return None ratelimited_view = xmlrpc.ratelimit()(view) context = pretend.stub() pyramid_request.remote_addr = "127.0.0.1" fake_rate_limiter = pretend.stub( test=lambda *a: True, hit=lambda *a: True, resets_in=lambda *a: None ) pyramid_services.register_service( fake_rate_limiter, IRateLimiter, None, name="xmlrpc.client" ) ratelimited_view(context, pyramid_request) assert metrics.increment.calls == [ pretend.call("warehouse.xmlrpc.ratelimiter.hit", tags=[]) ]