예제 #1
0
    def test_basic(self):
        limiter = RateLimiter(storage.MemoryStorage(),
                              "1 per minute",
                              identifiers=["foo"])

        assert limiter.test("foo")
        assert limiter.test("bar")

        while limiter.hit("bar"):
            pass

        assert limiter.test("foo")
        assert not limiter.test("bar")
예제 #2
0
    def test_namespacing(self):
        storage_ = storage.MemoryStorage()
        limiter1 = RateLimiter(storage_, "1 per minute", identifiers=["foo"])
        limiter2 = RateLimiter(storage_, "1 per minute")

        assert limiter1.test("bar")
        assert limiter2.test("bar")

        while limiter1.hit("bar"):
            pass

        assert limiter2.test("bar")
        assert not limiter1.test("bar")
예제 #3
0
파일: test_core.py 프로젝트: alex/warehouse
    def test_namespacing(self):
        storage_ = storage.MemoryStorage()
        limiter1 = RateLimiter(storage_, "1 per minute", identifiers=["foo"])
        limiter2 = RateLimiter(storage_, "1 per minute")

        assert limiter1.test("bar")
        assert limiter2.test("bar")

        while limiter1.hit("bar"):
            pass

        assert limiter2.test("bar")
        assert not limiter1.test("bar")
예제 #4
0
    def test_clear(self, metrics):
        limiter = RateLimiter(storage.MemoryStorage(),
                              "1 per minute",
                              metrics=metrics)

        assert limiter.test("foo")

        while limiter.hit("foo"):
            pass

        assert not limiter.test("foo")

        limiter.clear("foo")

        assert limiter.test("foo")
예제 #5
0
파일: test_core.py 프로젝트: alex/warehouse
    def test_basic(self):
        limiter = RateLimiter(
            storage.MemoryStorage(),
            "1 per minute",
            identifiers=["foo"],
        )

        assert limiter.test("foo")
        assert limiter.test("bar")

        while limiter.hit("bar"):
            pass

        assert limiter.test("foo")
        assert not limiter.test("bar")
예제 #6
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"]),
        ]
예제 #7
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"]),
        ]