Files
2026-03-16 11:21:24 +00:00

35 lines
628 B
Elixir

defmodule Req.RateLimiter.FakeClock do
@moduledoc """
Fake clock for deterministic rate limiter tests.
Stores the current time in the process dictionary so each test process
has its own isolated clock state. Works with `async: true`.
"""
@behaviour Req.RateLimiter.Clock
@key :fake_clock_now
@spec set(integer()) :: :ok
def set(now) do
Process.put(@key, now)
:ok
end
@spec advance(non_neg_integer()) :: :ok
def advance(ms) do
Process.put(@key, now() + ms)
:ok
end
@impl true
def now do
Process.get(@key, 0)
end
@impl true
def sleep(ms) do
advance(ms)
end
end