示例#1
0
    def test_error(self, metrics):
        limiter = RateLimiter(
            storage.MemoryStorage(),
            "1 per minute",
            identifiers=["foo"],
            metrics=metrics,
        )

        def raiser(*args, **kwargs):
            raise redis.ConnectionError()

        limiter._window = pretend.stub(hit=raiser,
                                       test=raiser,
                                       get_window_stats=raiser)

        assert limiter.test("foo")
        assert limiter.hit("foo")
        assert limiter.resets_in("foo") is None

        assert metrics.increment.calls == [
            pretend.call("warehouse.ratelimiter.error", tags=["call:test"]),
            pretend.call("warehouse.ratelimiter.error", tags=["call:hit"]),
            pretend.call("warehouse.ratelimiter.error",
                         tags=["call:resets_in"]),
        ]
示例#2
0
    def test_results_in_expired(self):
        limiter = RateLimiter(storage.MemoryStorage(),
                              "1 per minute; 1 per hour; 1 per day")

        current = datetime.datetime.now(tz=datetime.timezone.utc)
        stats = iter([
            (0, 0),
            ((current + datetime.timedelta(seconds=60)).timestamp(), 0),
            ((current + datetime.timedelta(seconds=5)).timestamp(), 0),
        ])

        limiter._window = pretend.stub(
            get_window_stats=lambda l, *a: next(stats))

        resets_in = limiter.resets_in("foo")

        assert resets_in > datetime.timedelta(seconds=0)
        assert resets_in <= datetime.timedelta(seconds=5)
示例#3
0
    def test_results_in_expired(self):
        limiter = RateLimiter(
            storage.MemoryStorage(),
            "1 per minute; 1 per hour; 1 per day",
        )

        current = datetime.datetime.now(tz=datetime.timezone.utc)
        stats = iter([
            (0, 0),
            ((current + datetime.timedelta(seconds=60)).timestamp(), 0),
            ((current + datetime.timedelta(seconds=5)).timestamp(), 0),
        ])

        limiter._window = pretend.stub(
            get_window_stats=lambda l, *a: next(stats),
        )

        resets_in = limiter.resets_in("foo")

        assert resets_in > datetime.timedelta(seconds=0)
        assert resets_in <= datetime.timedelta(seconds=5)
示例#4
0
    def test_error(self, metrics):
        limiter = RateLimiter(
            storage.MemoryStorage(),
            "1 per minute",
            identifiers=["foo"],
            metrics=metrics,
        )

        def raiser(*args, **kwargs):
            raise redis.ConnectionError()

        limiter._window = pretend.stub(hit=raiser, test=raiser, get_window_stats=raiser)

        assert limiter.test("foo")
        assert limiter.hit("foo")
        assert limiter.resets_in("foo") is None

        assert metrics.increment.calls == [
            pretend.call("warehouse.ratelimiter.error", tags=["call:test"]),
            pretend.call("warehouse.ratelimiter.error", tags=["call:hit"]),
            pretend.call("warehouse.ratelimiter.error", tags=["call:resets_in"]),
        ]