2019-12-04 20:38:33 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2015-11-26 14:37:03 +05:30
|
|
|
require 'spec_helper'
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
describe Gitlab::Sherlock::Middleware do
|
2015-11-26 14:37:03 +05:30
|
|
|
let(:app) { double(:app) }
|
|
|
|
let(:middleware) { described_class.new(app) }
|
|
|
|
|
|
|
|
describe '#call' do
|
|
|
|
describe 'when instrumentation is enabled' do
|
|
|
|
it 'instruments a request' do
|
|
|
|
allow(middleware).to receive(:instrument?).and_return(true)
|
|
|
|
allow(middleware).to receive(:call_with_instrumentation)
|
|
|
|
|
|
|
|
middleware.call({})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe 'when instrumentation is disabled' do
|
|
|
|
it "doesn't instrument a request" do
|
|
|
|
allow(middleware).to receive(:instrument).and_return(false)
|
|
|
|
allow(app).to receive(:call)
|
|
|
|
|
|
|
|
middleware.call({})
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#call_with_instrumentation' do
|
|
|
|
it 'instruments a request' do
|
|
|
|
trans = double(:transaction)
|
|
|
|
retval = 'cats are amazing'
|
|
|
|
env = {}
|
|
|
|
|
|
|
|
allow(app).to receive(:call).with(env).and_return(retval)
|
|
|
|
allow(middleware).to receive(:transaction_from_env).and_return(trans)
|
|
|
|
allow(trans).to receive(:run).and_yield.and_return(retval)
|
|
|
|
allow(Gitlab::Sherlock.collection).to receive(:add).with(trans)
|
|
|
|
|
|
|
|
middleware.call_with_instrumentation(env)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#instrument?' do
|
|
|
|
it 'returns false for a text/css request' do
|
|
|
|
env = { 'HTTP_ACCEPT' => 'text/css', 'REQUEST_URI' => '/' }
|
|
|
|
|
|
|
|
expect(middleware.instrument?(env)).to eq(false)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns false for a request to a Sherlock route' do
|
|
|
|
env = {
|
|
|
|
'HTTP_ACCEPT' => 'text/html',
|
|
|
|
'REQUEST_URI' => '/sherlock/transactions'
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(middleware.instrument?(env)).to eq(false)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns true for a request that should be instrumented' do
|
|
|
|
env = {
|
|
|
|
'HTTP_ACCEPT' => 'text/html',
|
|
|
|
'REQUEST_URI' => '/cats'
|
|
|
|
}
|
|
|
|
|
|
|
|
expect(middleware.instrument?(env)).to eq(true)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe '#transaction_from_env' do
|
|
|
|
it 'returns a Transaction' do
|
|
|
|
env = {
|
|
|
|
'HTTP_ACCEPT' => 'text/html',
|
|
|
|
'REQUEST_URI' => '/cats'
|
|
|
|
}
|
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
expect(middleware.transaction_from_env(env))
|
|
|
|
.to be_an_instance_of(Gitlab::Sherlock::Transaction)
|
2015-11-26 14:37:03 +05:30
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|