Ejemplo n.º 1
0
    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=[])
        ]
Ejemplo n.º 2
0
    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=[])
        ]