tests: minitest + rack-test suite, bin/test with ephemeral Postgres
This commit is contained in:
parent
8468b3d099
commit
43bed98329
13 changed files with 456 additions and 2 deletions
35
test/rate_limit_test.rb
Normal file
35
test/rate_limit_test.rb
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
require_relative 'test_helper'
|
||||
|
||||
class RateLimitTest < Minitest::Test
|
||||
def test_allows_up_to_limit_then_denies
|
||||
rl = RateLimit.new(limit: 5, window: 3600)
|
||||
assert (1..5).all? { rl.allow?('1.2.3.4') }
|
||||
refute rl.allow?('1.2.3.4')
|
||||
end
|
||||
|
||||
def test_keys_are_independent
|
||||
rl = RateLimit.new(limit: 1, window: 3600)
|
||||
assert rl.allow?('a')
|
||||
refute rl.allow?('a')
|
||||
assert rl.allow?('b')
|
||||
end
|
||||
|
||||
def test_sweep_removes_stale_keys
|
||||
rl = RateLimit.new(limit: 5, window: 3600)
|
||||
hits = rl.instance_variable_get(:@hits)
|
||||
old = Time.now.to_i - 7200
|
||||
50.times { |i| hits["stale-#{i}"] << old }
|
||||
rl.sweep!
|
||||
assert_empty hits.keys.grep(/\Astale-/)
|
||||
end
|
||||
|
||||
def test_allow_prunes_opportunistically
|
||||
rl = RateLimit.new(limit: 5, window: 3600)
|
||||
hits = rl.instance_variable_get(:@hits)
|
||||
old = Time.now.to_i - 7200
|
||||
50.times { |i| hits["stale-#{i}"] << old }
|
||||
RateLimit::SWEEP_EVERY.times { rl.allow?('fresh') }
|
||||
assert_empty hits.keys.grep(/\Astale-/)
|
||||
assert hits.key?('fresh')
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue