42 lines
977 B
Ruby
42 lines
977 B
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe 'ProductAnalytics::CollectorApp throttle' do
|
|
include RackAttackSpecHelpers
|
|
|
|
include_context 'rack attack cache store'
|
|
|
|
let(:project1) { create(:project) }
|
|
let(:project2) { create(:project) }
|
|
|
|
before do
|
|
allow(ProductAnalyticsEvent).to receive(:create).and_return(true)
|
|
end
|
|
|
|
context 'per application id' do
|
|
let(:params) do
|
|
{
|
|
aid: project1.id,
|
|
eid: SecureRandom.uuid
|
|
}
|
|
end
|
|
|
|
it 'throttles the endpoint' do
|
|
# Allow requests under the rate limit.
|
|
100.times do
|
|
expect_ok { get '/-/collector/i', params: params }
|
|
end
|
|
|
|
# Ensure its not related to ip address
|
|
random_next_ip
|
|
|
|
# Reject request over the limit
|
|
expect_rejection { get '/-/collector/i', params: params }
|
|
|
|
# But allows request for different aid
|
|
expect_ok { get '/-/collector/i', params: params.merge(aid: project2.id) }
|
|
end
|
|
end
|
|
end
|