From 379cd39dc982bbb0d4ebf7f8eb192db2f153b70c Mon Sep 17 00:00:00 2001 From: Gonzalo Rodriguez Date: Fri, 18 May 2018 14:10:07 -0300 Subject: [PATCH] Acceptance test use of ActiveSupport::Cache::MemCacheStore --- .../acceptance/stores/mem_cache_store_spec.rb | 14 +++++ .../stores/redis_cache_store_spec.rb | 58 +------------------ spec/support/cache_store_helper.rb | 58 +++++++++++++++++++ 3 files changed, 74 insertions(+), 56 deletions(-) create mode 100644 spec/acceptance/stores/mem_cache_store_spec.rb create mode 100644 spec/support/cache_store_helper.rb diff --git a/spec/acceptance/stores/mem_cache_store_spec.rb b/spec/acceptance/stores/mem_cache_store_spec.rb new file mode 100644 index 0000000..2ee8832 --- /dev/null +++ b/spec/acceptance/stores/mem_cache_store_spec.rb @@ -0,0 +1,14 @@ +require_relative "../../spec_helper" +require_relative "../../support/cache_store_helper" + +describe "MemCacheStore as a cache backend" do + before do + Rack::Attack.cache.store = ActiveSupport::Cache::MemCacheStore.new + end + + after do + Rack::Attack.cache.store.flush_all + end + + it_works_for_cache_backed_features +end diff --git a/spec/acceptance/stores/redis_cache_store_spec.rb b/spec/acceptance/stores/redis_cache_store_spec.rb index 4e47126..de36275 100644 --- a/spec/acceptance/stores/redis_cache_store_spec.rb +++ b/spec/acceptance/stores/redis_cache_store_spec.rb @@ -1,4 +1,5 @@ require_relative "../../spec_helper" +require_relative "../../support/cache_store_helper" if ActiveSupport.version >= Gem::Version.new("5.2.0") describe "RedisCacheStore as a cache backend" do @@ -10,61 +11,6 @@ if ActiveSupport.version >= Gem::Version.new("5.2.0") Rack::Attack.cache.store.clear end - it "works for throttle" do - Rack::Attack.throttle("by ip", limit: 1, period: 60) do |request| - request.ip - end - - get "/", {}, "REMOTE_ADDR" => "1.2.3.4" - - assert_equal 200, last_response.status - - get "/", {}, "REMOTE_ADDR" => "1.2.3.4" - - assert_equal 429, last_response.status - end - - it "works for fail2ban" do - Rack::Attack.blocklist("fail2ban pentesters") do |request| - Rack::Attack::Fail2Ban.filter(request.ip, maxretry: 2, findtime: 30, bantime: 60) do - request.path.include?("private-place") - end - end - - get "/" - assert_equal 200, last_response.status - - get "/private-place" - assert_equal 403, last_response.status - - get "/private-place" - assert_equal 403, last_response.status - - get "/" - assert_equal 403, last_response.status - end - - it "works for allow2ban" do - Rack::Attack.blocklist("allow2ban pentesters") do |request| - Rack::Attack::Allow2Ban.filter(request.ip, maxretry: 2, findtime: 30, bantime: 60) do - request.path.include?("scarce-resource") - end - end - - get "/" - assert_equal 200, last_response.status - - get "/scarce-resource" - assert_equal 200, last_response.status - - get "/scarce-resource" - assert_equal 200, last_response.status - - get "/scarce-resource" - assert_equal 403, last_response.status - - get "/" - assert_equal 403, last_response.status - end + it_works_for_cache_backed_features end end diff --git a/spec/support/cache_store_helper.rb b/spec/support/cache_store_helper.rb new file mode 100644 index 0000000..2ca7606 --- /dev/null +++ b/spec/support/cache_store_helper.rb @@ -0,0 +1,58 @@ +class Minitest::Spec + def self.it_works_for_cache_backed_features + it "works for throttle" do + Rack::Attack.throttle("by ip", limit: 1, period: 60) do |request| + request.ip + end + + get "/", {}, "REMOTE_ADDR" => "1.2.3.4" + assert_equal 200, last_response.status + + get "/", {}, "REMOTE_ADDR" => "1.2.3.4" + assert_equal 429, last_response.status + end + + it "works for fail2ban" do + Rack::Attack.blocklist("fail2ban pentesters") do |request| + Rack::Attack::Fail2Ban.filter(request.ip, maxretry: 2, findtime: 30, bantime: 60) do + request.path.include?("private-place") + end + end + + get "/" + assert_equal 200, last_response.status + + get "/private-place" + assert_equal 403, last_response.status + + get "/private-place" + assert_equal 403, last_response.status + + get "/" + assert_equal 403, last_response.status + end + + it "works for allow2ban" do + Rack::Attack.blocklist("allow2ban pentesters") do |request| + Rack::Attack::Allow2Ban.filter(request.ip, maxretry: 2, findtime: 30, bantime: 60) do + request.path.include?("scarce-resource") + end + end + + get "/" + assert_equal 200, last_response.status + + get "/scarce-resource" + assert_equal 200, last_response.status + + get "/scarce-resource" + assert_equal 200, last_response.status + + get "/scarce-resource" + assert_equal 403, last_response.status + + get "/" + assert_equal 403, last_response.status + end + end +end