From bca253c674a59f0edea5c027faf78c05cc044c61 Mon Sep 17 00:00:00 2001 From: Gonzalo Rodriguez Date: Fri, 22 Jun 2018 12:06:46 -0300 Subject: [PATCH] Acceptance test ActiveSupport::Cache::DalliStore (via dalli) as cache store backend --- .../stores/active_support_dalli_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_dalli_store_spec.rb diff --git a/spec/acceptance/stores/active_support_dalli_store_spec.rb b/spec/acceptance/stores/active_support_dalli_store_spec.rb new file mode 100644 index 0000000..b3be95f --- /dev/null +++ b/spec/acceptance/stores/active_support_dalli_store_spec.rb @@ -0,0 +1,39 @@ +require_relative "../../spec_helper" +require_relative "../../support/cache_store_helper" + +require "active_support/cache/dalli_store" +require "timecop" + +describe "ActiveSupport::Cache::DalliStore as a cache backend" do + before do + Rack::Attack.cache.store = ActiveSupport::Cache::DalliStore.new + end + + after do + Rack::Attack.cache.store.clear + 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.fetch(key) + + sleep 2.1 + + assert_nil Rack::Attack.cache.store.fetch(key) + end +end diff --git a/spec/integration/rack_attack_cache_spec.rb b/spec/integration/rack_attack_cache_spec.rb index 4e76552..a349dbf 100644 --- a/spec/integration/rack_attack_cache_spec.rb +++ b/spec/integration/rack_attack_cache_spec.rb @@ -15,12 +15,10 @@ describe Rack::Attack::Cache do sleep(@expires_in * 1.1) # Add 10% to reduce errors end - require 'active_support/cache/dalli_store' require 'connection_pool' cache_stores = [ ActiveSupport::Cache::MemoryStore.new, - ActiveSupport::Cache::DalliStore.new("127.0.0.1"), Dalli::Client.new, ConnectionPool.new { Dalli::Client.new } ]