gitlab-org--gitlab-foss/spec/lib/gitlab/query_limiting/middleware_spec.rb
Yorick Peterse cca61980d5
Track and act upon the number of executed queries
This ensures that we have more visibility in the number of SQL queries
that are executed in web requests. The current threshold is hardcoded to
100 as we will rarely (maybe once or twice) change it.

In production and development we use Sentry if enabled, in the test
environment we raise an error. This feature is also only enabled in
production/staging when running on GitLab.com as it's not very useful to
other users.
2018-02-01 17:00:46 +01:00

72 lines
2 KiB
Ruby

require 'spec_helper'
describe Gitlab::QueryLimiting::Middleware do
describe '#call' do
it 'runs the application with query limiting in place' do
middleware = described_class.new(-> (env) { env })
expect_any_instance_of(Gitlab::QueryLimiting::Transaction)
.to receive(:act_upon_results)
expect(middleware.call({ number: 10 }))
.to eq({ number: 10 })
end
end
describe '#action_name' do
let(:middleware) { described_class.new(-> (env) { env }) }
context 'using a Rails request' do
it 'returns the name of the controller and action' do
env = {
described_class::CONTROLLER_KEY => double(
:controller,
action_name: 'show',
class: double(:class, name: 'UsersController'),
content_type: 'text/html'
)
}
expect(middleware.action_name(env)).to eq('UsersController#show')
end
it 'includes the content type if this is not text/html' do
env = {
described_class::CONTROLLER_KEY => double(
:controller,
action_name: 'show',
class: double(:class, name: 'UsersController'),
content_type: 'application/json'
)
}
expect(middleware.action_name(env))
.to eq('UsersController#show (application/json)')
end
end
context 'using a Grape API request' do
it 'returns the name of the request method and endpoint path' do
env = {
described_class::ENDPOINT_KEY => double(
:endpoint,
route: double(:route, request_method: 'GET', path: '/foo')
)
}
expect(middleware.action_name(env)).to eq('GET /foo')
end
it 'returns nil if the route can not be retrieved' do
endpoint = double(:endpoint)
env = { described_class::ENDPOINT_KEY => endpoint }
allow(endpoint)
.to receive(:route)
.and_raise(RuntimeError)
expect(middleware.action_name(env)).to be_nil
end
end
end
end