From d831f2490e2a90c1840f0b1a28512d565b265af6 Mon Sep 17 00:00:00 2001 From: Gonzalo Rodriguez Date: Tue, 19 Jun 2018 12:12:45 -0300 Subject: [PATCH] Acceptance test RedisCacheStore as a store backend doesn't leak keys --- .../stores/redis_cache_store_spec.rb | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/spec/acceptance/stores/redis_cache_store_spec.rb b/spec/acceptance/stores/redis_cache_store_spec.rb index de36275..b0e84e9 100644 --- a/spec/acceptance/stores/redis_cache_store_spec.rb +++ b/spec/acceptance/stores/redis_cache_store_spec.rb @@ -1,6 +1,8 @@ require_relative "../../spec_helper" require_relative "../../support/cache_store_helper" +require "timecop" + if ActiveSupport.version >= Gem::Version.new("5.2.0") describe "RedisCacheStore as a cache backend" do before do @@ -12,5 +14,28 @@ if ActiveSupport.version >= Gem::Version.new("5.2.0") end it_works_for_cache_backed_features + + it "doesn't leak keys" do + Rack::Attack.throttle("by ip", limit: 1, period: 1) do |request| + request.ip + end + + key = nil + + # Freeze time during these statement to be sure that the key used by rack attack is the same + # we pre-calculate in local variable `key` + Timecop.freeze do + key = "rack::attack:#{Time.now.to_i}:by ip:1.2.3.4" + + # puts key + get "/", {}, "REMOTE_ADDR" => "1.2.3.4" + end + + assert_equal "1", Rack::Attack.cache.store.fetch(key) + + sleep 2.1 + + assert_nil Rack::Attack.cache.store.fetch(key) + end end end