Commit 336635f2 authored by Z.J. van de Weg's avatar Z.J. van de Weg
Browse files

Test the ExpireJobCacheWorker and related changes

These were untested by the cherry picked commit.
parent d78ce179788d
......@@ -89,7 +89,7 @@ class CommitStatus < ActiveRecord::Base
else
PipelineUpdateWorker.perform_async(pipeline.id)
end
ExpireJobCacheWorker.perform_async(pipeline.id, commit_status.id)
ExpireJobCacheWorker.perform_async(commit_status.id)
end
end
end
......
......@@ -2,15 +2,17 @@ class ExpireJobCacheWorker
include Sidekiq::Worker
include BuildQueue
def perform(pipeline_id, job_id)
job = CommitStatus.joins(:pipeline, :project).find_by(id: job)
def perform(job_id)
job = CommitStatus.joins(:pipeline, :project).find_by(id: job_id)
return unless job
pipeline = job.pipeline
project = job.project
store.touch(project_pipeline_path(project, pipeline))
store.touch(project_job_path(project, job))
Gitlab::EtagCaching::Store.new.tap do |store|
store.touch(project_pipeline_path(project, pipeline))
store.touch(project_job_path(project, job))
end
end
private
......@@ -30,8 +32,4 @@ def project_job_path(project, job)
job.id,
format: :json)
end
def store
@store ||= Gitlab::EtagCaching::Store.new
end
end
......@@ -36,6 +36,16 @@ def create_status(args = {})
it { is_expected.to eq(commit_status.user) }
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
subject { commit_status.started? }
......
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 @@
it 'invalidates Etag caching for project pipelines path' do
pipelines_path = "/#{project.full_path}/pipelines.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(new_mr_pipelines_path)
expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(pipeline_path)
subject.perform(pipeline.id)
end
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment