Sha256: 5ccb2f1f58a4fd9e543ca9b12c07577ecad97cf68602143a635d123d368d1214

Contents?: true

Size: 1.33 KB

Versions: 2

Compression:

Stored size: 1.33 KB

Contents

require File.join(File.dirname(__FILE__), '..', 'spec_helper')


describe Rack::Throttle::Interval do
  include Rack::Test::Methods

  def app
    @target_app ||= example_target_app
    @app ||= Rack::Throttle::Interval.new(@target_app, :min => 0.1)
  end

  it "should allow the request if the source has not been seen" do
    get "/foo"
    expect(last_response.body).to show_allowed_response
  end

  it "should allow the request if the source has not been seen in the current interval" do
    Timecop.freeze do
      get "/foo"
      Timecop.freeze(1) do # Timecop.freeze won't do subsecond resolution
        get "/foo"
      end
    end
    expect(last_response.body).to show_allowed_response
  end

  it "should not allow the request if the source has been seen inside the current interval" do
    Timecop.freeze do
      2.times { get "/foo" }
    end
    expect(last_response.body).to show_throttled_response
  end

  it "should gracefully allow the request if the cache bombs on getting" do
    expect(app).to receive(:cache_get).and_raise(StandardError)
    get "/foo"
    expect(last_response.body).to show_allowed_response
  end

  it "should gracefully allow the request if the cache bombs on setting" do
    expect(app).to receive(:cache_set).and_raise(StandardError)
    get "/foo"
    expect(last_response.body).to show_allowed_response
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
improved-rack-throttle-0.9.0 spec/limiters/interval_spec.rb
improved-rack-throttle-0.8.0 spec/limiters/interval_spec.rb