From 92f3b7fbd0221031da42f93accb6b45e63d9a337 Mon Sep 17 00:00:00 2001 From: Gonzalo Rodriguez Date: Fri, 22 Jun 2018 10:52:23 -0300 Subject: [PATCH] Acceptance test ActiveSupport::Cache::RedisStore (redis-activesupport) as cache store backend --- .../stores/active_support_redis_store_spec.rb | 39 +++++++++++++++++++ spec/integration/rack_attack_cache_spec.rb | 2 - 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 spec/acceptance/stores/active_support_redis_store_spec.rb diff --git a/spec/acceptance/stores/active_support_redis_store_spec.rb b/spec/acceptance/stores/active_support_redis_store_spec.rb new file mode 100644 index 0000000..0b446e4 --- /dev/null +++ b/spec/acceptance/stores/active_support_redis_store_spec.rb @@ -0,0 +1,39 @@ +require_relative "../../spec_helper" +require_relative "../../support/cache_store_helper" + +require "redis-activesupport" +require "timecop" + +describe "ActiveSupport::Cache::RedisStore as a cache backend" do + before do + Rack::Attack.cache.store = ActiveSupport::Cache::RedisStore.new + end + + after do + Rack::Attack.cache.store.flushdb + 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" + + get "/", {}, "REMOTE_ADDR" => "1.2.3.4" + end + + assert Rack::Attack.cache.store.read(key) + + sleep 2.1 + + assert_nil Rack::Attack.cache.store.read(key) + end +end diff --git a/spec/integration/rack_attack_cache_spec.rb b/spec/integration/rack_attack_cache_spec.rb index 6f7b55c..9a13720 100644 --- a/spec/integration/rack_attack_cache_spec.rb +++ b/spec/integration/rack_attack_cache_spec.rb @@ -16,13 +16,11 @@ describe Rack::Attack::Cache do end require 'active_support/cache/dalli_store' - require 'active_support/cache/redis_store' require 'connection_pool' cache_stores = [ ActiveSupport::Cache::MemoryStore.new, ActiveSupport::Cache::DalliStore.new("127.0.0.1"), - ActiveSupport::Cache::RedisStore.new("127.0.0.1"), Dalli::Client.new, ConnectionPool.new { Dalli::Client.new }, Redis::Store.new