mirror of
https://github.com/discourse/discourse.git
synced 2025-05-30 07:11:34 +08:00
PERF: improve speed of rate limiter
Also - adds a global rate limiter option - cleans up usage in tests - fixes freeze_time so it handles clock_gettime
This commit is contained in:
@ -8,11 +8,14 @@ describe RateLimiter do
|
||||
|
||||
context 'disabled' do
|
||||
before do
|
||||
RateLimiter.stubs(:disabled?).returns(true)
|
||||
rate_limiter.performed!
|
||||
rate_limiter.performed!
|
||||
end
|
||||
|
||||
it "should be disabled" do
|
||||
expect(RateLimiter.disabled?).to eq(true)
|
||||
end
|
||||
|
||||
it "returns true for can_perform?" do
|
||||
expect(rate_limiter.can_perform?).to eq(true)
|
||||
end
|
||||
@ -25,10 +28,41 @@ describe RateLimiter do
|
||||
|
||||
context 'enabled' do
|
||||
before do
|
||||
RateLimiter.stubs(:disabled?).returns(false)
|
||||
RateLimiter.enable
|
||||
rate_limiter.clear!
|
||||
end
|
||||
|
||||
after do
|
||||
RateLimiter.disable
|
||||
end
|
||||
|
||||
context 'global rate limiter' do
|
||||
|
||||
it 'can operate in global mode' do
|
||||
limiter = RateLimiter.new(nil, "test", 2, 10, global: true)
|
||||
limiter.clear!
|
||||
|
||||
limiter.performed!
|
||||
limiter.performed!
|
||||
expect { limiter.performed! }.to raise_error(RateLimiter::LimitExceeded)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context 'handles readonly' do
|
||||
before do
|
||||
$redis.without_namespace.slaveof '10.0.0.1', '99999'
|
||||
end
|
||||
|
||||
after do
|
||||
$redis.without_namespace.slaveof 'no', 'one'
|
||||
end
|
||||
|
||||
it 'does not explode' do
|
||||
expect { rate_limiter.performed! }.not_to raise_error
|
||||
end
|
||||
end
|
||||
|
||||
context 'never done' do
|
||||
it "should perform right away" do
|
||||
expect(rate_limiter.can_perform?).to eq(true)
|
||||
|
Reference in New Issue
Block a user