mirror of
https://github.com/samsonjs/rack-attack.git
synced 2026-03-25 09:25:49 +00:00
Merge pull request #319 from grzuy/acceptance_test_notifications
Acceptance test ability to subscribe to notifications
This commit is contained in:
commit
a2fdd42edc
3 changed files with 80 additions and 0 deletions
|
|
@ -18,4 +18,24 @@ describe "#blocklist" do
|
|||
|
||||
assert_equal 200, last_response.status
|
||||
end
|
||||
|
||||
it "notifies when the request is blocked" do
|
||||
notification_matched = nil
|
||||
notification_type = nil
|
||||
|
||||
ActiveSupport::Notifications.subscribe("rack.attack") do |_name, _start, _finish, _id, request|
|
||||
notification_matched = request.env["rack.attack.matched"]
|
||||
notification_type = request.env["rack.attack.match_type"]
|
||||
end
|
||||
|
||||
get "/", {}, "REMOTE_ADDR" => "5.6.7.8"
|
||||
|
||||
assert_nil notification_matched
|
||||
assert_nil notification_type
|
||||
|
||||
get "/", {}, "REMOTE_ADDR" => "1.2.3.4"
|
||||
|
||||
assert_equal "block 1.2.3.4", notification_matched
|
||||
assert_equal :blocklist, notification_type
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -34,4 +34,20 @@ describe "#safelist" do
|
|||
|
||||
assert_equal 200, last_response.status
|
||||
end
|
||||
|
||||
it "notifies when the request is safe" do
|
||||
notification_matched = nil
|
||||
notification_type = nil
|
||||
|
||||
ActiveSupport::Notifications.subscribe("rack.attack") do |_name, _start, _finish, _id, request|
|
||||
notification_matched = request.env["rack.attack.matched"]
|
||||
notification_type = request.env["rack.attack.match_type"]
|
||||
end
|
||||
|
||||
get "/safe_space", {}, "REMOTE_ADDR" => "1.2.3.4"
|
||||
|
||||
assert_equal 200, last_response.status
|
||||
assert_equal "safe path", notification_matched
|
||||
assert_equal :safelist, notification_type
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -112,4 +112,48 @@ describe "#throttle" do
|
|||
assert_equal 200, last_response.status
|
||||
end
|
||||
end
|
||||
|
||||
it "notifies when the request is throttled" do
|
||||
Rack::Attack.throttle("by ip", limit: 1, period: 60) do |request|
|
||||
request.ip
|
||||
end
|
||||
|
||||
notification_matched = nil
|
||||
notification_type = nil
|
||||
notification_data = nil
|
||||
notification_discriminator = nil
|
||||
|
||||
ActiveSupport::Notifications.subscribe("rack.attack") do |_name, _start, _finish, _id, request|
|
||||
notification_matched = request.env["rack.attack.matched"]
|
||||
notification_type = request.env["rack.attack.match_type"]
|
||||
notification_data = request.env['rack.attack.match_data']
|
||||
notification_discriminator = request.env['rack.attack.match_discriminator']
|
||||
end
|
||||
|
||||
get "/", {}, "REMOTE_ADDR" => "5.6.7.8"
|
||||
|
||||
assert_equal 200, last_response.status
|
||||
assert_nil notification_matched
|
||||
assert_nil notification_type
|
||||
assert_nil notification_data
|
||||
assert_nil notification_discriminator
|
||||
|
||||
get "/", {}, "REMOTE_ADDR" => "1.2.3.4"
|
||||
|
||||
assert_equal 200, last_response.status
|
||||
assert_nil notification_matched
|
||||
assert_nil notification_type
|
||||
assert_nil notification_data
|
||||
assert_nil notification_discriminator
|
||||
|
||||
get "/", {}, "REMOTE_ADDR" => "1.2.3.4"
|
||||
|
||||
assert_equal 429, last_response.status
|
||||
assert_equal "by ip", notification_matched
|
||||
assert_equal :throttle, notification_type
|
||||
assert_equal 60, notification_data[:period]
|
||||
assert_equal 1, notification_data[:limit]
|
||||
assert_equal 2, notification_data[:count]
|
||||
assert_equal "1.2.3.4", notification_discriminator
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in a new issue