Improve pipeline size for query limit test
The pipeline was quite meagre in both stages and the number of groups. This has been improved. Performance is not yet optimal, but to limit this from sliding further this slippery slope, a hard limit has been set.
This commit is contained in:
parent
20987f4fd2
commit
63da91725e
|
@ -38,7 +38,7 @@ describe Projects::PipelinesController do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'GET show JSON' do
|
describe 'GET show JSON' do
|
||||||
let!(:pipeline) { create(:ci_pipeline_with_one_job, project: project) }
|
let(:pipeline) { create(:ci_pipeline_with_one_job, project: project) }
|
||||||
|
|
||||||
it 'returns the pipeline' do
|
it 'returns the pipeline' do
|
||||||
get_pipeline_json
|
get_pipeline_json
|
||||||
|
@ -49,20 +49,48 @@ describe Projects::PipelinesController do
|
||||||
expect(json_response['details']).to have_key 'stages'
|
expect(json_response['details']).to have_key 'stages'
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the pipeline has multiple jobs' do
|
context 'when the pipeline has multiple stages and groups' do
|
||||||
|
before do
|
||||||
|
RequestStore.begin!
|
||||||
|
|
||||||
|
create_build('build', 0, 'build')
|
||||||
|
create_build('test', 1, 'rspec 0')
|
||||||
|
create_build('deploy', 2, 'production')
|
||||||
|
create_build('post deploy', 3, 'pages 0')
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
RequestStore.end!
|
||||||
|
RequestStore.clear!
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:project) { create(:project) }
|
||||||
|
let(:pipeline) do
|
||||||
|
create(:ci_empty_pipeline, project: project, user: user, sha: project.commit.id)
|
||||||
|
end
|
||||||
|
|
||||||
it 'does not perform N + 1 queries' do
|
it 'does not perform N + 1 queries' do
|
||||||
control_count = ActiveRecord::QueryRecorder.new { get_pipeline_json }.count
|
control_count = ActiveRecord::QueryRecorder.new { get_pipeline_json }.count
|
||||||
|
|
||||||
create(:ci_build, pipeline: pipeline)
|
create_build('test', 1, 'rspec 1')
|
||||||
|
create_build('test', 1, 'spinach 0')
|
||||||
|
create_build('test', 1, 'spinach 1')
|
||||||
|
create_build('test', 1, 'audit')
|
||||||
|
create_build('post deploy', 3, 'pages 1')
|
||||||
|
create_build('post deploy', 3, 'pages 2')
|
||||||
|
|
||||||
# The plus 2 is needed to group and sort
|
new_count = ActiveRecord::QueryRecorder.new { get_pipeline_json }.count
|
||||||
expect { get_pipeline_json }.not_to exceed_query_limit(control_count + 2)
|
expect(new_count).to be_within(12).of(control_count)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_pipeline_json
|
def get_pipeline_json
|
||||||
get :show, namespace_id: project.namespace, project_id: project, id: pipeline, format: :json
|
get :show, namespace_id: project.namespace, project_id: project, id: pipeline, format: :json
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_build(stage, stage_idx, name)
|
||||||
|
create(:ci_build, pipeline: pipeline, stage: stage, stage_idx: stage_idx, name: name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'GET stages.json' do
|
describe 'GET stages.json' do
|
||||||
|
|
Loading…
Reference in New Issue