Test the ExpireJobCacheWorker and related changes
These were untested by the cherry picked commit.
This commit is contained in:
parent
da0c543e28
commit
336635f283
|
@ -89,7 +89,7 @@ class CommitStatus < ActiveRecord::Base
|
||||||
else
|
else
|
||||||
PipelineUpdateWorker.perform_async(pipeline.id)
|
PipelineUpdateWorker.perform_async(pipeline.id)
|
||||||
end
|
end
|
||||||
ExpireJobCacheWorker.perform_async(pipeline.id, commit_status.id)
|
ExpireJobCacheWorker.perform_async(commit_status.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,16 +2,18 @@ class ExpireJobCacheWorker
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
include BuildQueue
|
include BuildQueue
|
||||||
|
|
||||||
def perform(pipeline_id, job_id)
|
def perform(job_id)
|
||||||
job = CommitStatus.joins(:pipeline, :project).find_by(id: job)
|
job = CommitStatus.joins(:pipeline, :project).find_by(id: job_id)
|
||||||
return unless job
|
return unless job
|
||||||
|
|
||||||
pipeline = job.pipeline
|
pipeline = job.pipeline
|
||||||
project = job.project
|
project = job.project
|
||||||
|
|
||||||
|
Gitlab::EtagCaching::Store.new.tap do |store|
|
||||||
store.touch(project_pipeline_path(project, pipeline))
|
store.touch(project_pipeline_path(project, pipeline))
|
||||||
store.touch(project_job_path(project, job))
|
store.touch(project_job_path(project, job))
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
@ -30,8 +32,4 @@ class ExpireJobCacheWorker
|
||||||
job.id,
|
job.id,
|
||||||
format: :json)
|
format: :json)
|
||||||
end
|
end
|
||||||
|
|
||||||
def store
|
|
||||||
@store ||= Gitlab::EtagCaching::Store.new
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,6 +36,16 @@ describe CommitStatus, :models do
|
||||||
it { is_expected.to eq(commit_status.user) }
|
it { is_expected.to eq(commit_status.user) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'status state machine' do
|
||||||
|
let!(:commit_status) { create(:commit_status, :running, project: project) }
|
||||||
|
|
||||||
|
it 'invalidates the cache after a transition' do
|
||||||
|
expect(ExpireJobCacheWorker).to receive(:perform_async).with(commit_status.id)
|
||||||
|
|
||||||
|
commit_status.success!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#started?' do
|
describe '#started?' do
|
||||||
subject { commit_status.started? }
|
subject { commit_status.started? }
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe ExpireJobCacheWorker do
|
||||||
|
set(:pipeline) { create(:ci_empty_pipeline) }
|
||||||
|
let(:project) { pipeline.project }
|
||||||
|
subject { described_class.new }
|
||||||
|
|
||||||
|
describe '#perform' do
|
||||||
|
context 'with a job in the pipeline' do
|
||||||
|
let(:job) { create(:ci_build, pipeline: pipeline) }
|
||||||
|
|
||||||
|
it 'invalidates Etag caching for the job path' do
|
||||||
|
pipeline_path = "/#{project.full_path}/pipelines/#{pipeline.id}.json"
|
||||||
|
job_path = "/#{project.full_path}/builds/#{job.id}.json"
|
||||||
|
|
||||||
|
expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(pipeline_path)
|
||||||
|
expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(job_path)
|
||||||
|
|
||||||
|
subject.perform(job.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when there is no job in the pipeline' do
|
||||||
|
it 'does not change the etag store' do
|
||||||
|
expect(Gitlab::EtagCaching::Store).not_to receive(:new)
|
||||||
|
|
||||||
|
subject.perform(9999)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,9 +10,11 @@ describe ExpirePipelineCacheWorker do
|
||||||
it 'invalidates Etag caching for project pipelines path' do
|
it 'invalidates Etag caching for project pipelines path' do
|
||||||
pipelines_path = "/#{project.full_path}/pipelines.json"
|
pipelines_path = "/#{project.full_path}/pipelines.json"
|
||||||
new_mr_pipelines_path = "/#{project.full_path}/merge_requests/new.json"
|
new_mr_pipelines_path = "/#{project.full_path}/merge_requests/new.json"
|
||||||
|
pipeline_path = "/#{project.full_path}/pipelines/#{pipeline.id}.json"
|
||||||
|
|
||||||
expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(pipelines_path)
|
expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(pipelines_path)
|
||||||
expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(new_mr_pipelines_path)
|
expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(new_mr_pipelines_path)
|
||||||
|
expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(pipeline_path)
|
||||||
|
|
||||||
subject.perform(pipeline.id)
|
subject.perform(pipeline.id)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue