コード例 #1
0
ファイル: test_core.py プロジェクト: anzhaozhong/warehouse
    def test_results_in(self):
        limiter = RateLimiter(storage.MemoryStorage(), "1 per minute")

        assert limiter.resets_in("foo") is None

        while limiter.hit("foo"):
            pass

        assert limiter.resets_in("foo") > datetime.timedelta(seconds=0)
        assert limiter.resets_in("foo") < datetime.timedelta(seconds=60)
コード例 #2
0
ファイル: test_core.py プロジェクト: craig5/warehouse
    def test_results_in(self, metrics):
        limiter = RateLimiter(storage.MemoryStorage(), "1 per minute", metrics=metrics)

        assert limiter.resets_in("foo") is None

        while limiter.hit("foo"):
            pass

        assert limiter.resets_in("foo") > datetime.timedelta(seconds=0)
        assert limiter.resets_in("foo") < datetime.timedelta(seconds=60)
コード例 #3
0
ファイル: test_core.py プロジェクト: loveplay1983/warehouse-1
    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"]),
        ]
コード例 #4
0
ファイル: test_core.py プロジェクト: anzhaozhong/warehouse
    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)
コード例 #5
0
ファイル: test_core.py プロジェクト: alex/warehouse
    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)
コード例 #6
0
ファイル: test_core.py プロジェクト: craig5/warehouse
    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"]),
        ]