Commit 3a565b3f authored by Imre Farkas's avatar Imre Farkas

Add worker to refresh user's authorized project with low urgency

It does the same job as AuthorizedProjectWorker but not marked as high
urgency. Not every authorization calculation need to completed with such
priority. This worker will be used for low priority recalculation.
parent f8e8d27a
......@@ -927,6 +927,13 @@
:resource_boundary: :unknown
:weight: 2
:idempotent: true
- :name: authorized_project_update_user_refresh_with_low_urgency
:feature_category: :authentication_and_authorization
:has_external_dependencies:
:urgency: :low
:resource_boundary: :unknown
:weight: 1
:idempotent: true
- :name: authorized_projects
:feature_category: :authentication_and_authorization
:has_external_dependencies:
......
# frozen_string_literal: true
module AuthorizedProjectUpdate
class UserRefreshWithLowUrgencyWorker < ::AuthorizedProjectsWorker
feature_category :authentication_and_authorization
urgency :low
idempotent!
end
end
......@@ -32,6 +32,8 @@
- 1
- - authorized_keys
- 2
- - authorized_project_update_user_refresh_with_low_urgency
- 1
- - authorized_projects
- 2
- - auto_devops
......
# frozen_string_literal: true
require 'spec_helper'
RSpec.shared_examples "refreshes user's project authorizations" do
describe '#perform' do
let(:user) { create(:user) }
subject(:job) { described_class.new }
it "refreshes user's authorized projects" do
expect_any_instance_of(User).to receive(:refresh_authorized_projects)
job.perform(user.id)
end
context "when the user is not found" do
it "does nothing" do
expect_any_instance_of(User).not_to receive(:refresh_authorized_projects)
job.perform(-1)
end
end
it_behaves_like "an idempotent worker" do
let(:job_args) { user.id }
it "does not change authorizations when run twice" do
group = create(:group)
create(:project, namespace: group)
group.add_developer(user)
# Delete the authorization created by the after save hook of the member
# created above.
user.project_authorizations.delete_all
expect { job.perform(user.id) }.to change { user.project_authorizations.reload.size }.by(1)
expect { job.perform(user.id) }.not_to change { user.project_authorizations.reload.size }
end
end
end
end
# frozen_string_literal: true
require 'spec_helper'
describe AuthorizedProjectUpdate::UserRefreshWithLowUrgencyWorker do
it 'is labeled as low urgency' do
expect(described_class.get_urgency).to eq(:low)
end
it_behaves_like "refreshes user's project authorizations"
end
......@@ -3,40 +3,5 @@
require 'spec_helper'
describe AuthorizedProjectsWorker do
describe '#perform' do
let(:user) { create(:user) }
subject(:job) { described_class.new }
it "refreshes user's authorized projects" do
expect_any_instance_of(User).to receive(:refresh_authorized_projects)
job.perform(user.id)
end
context "when the user is not found" do
it "does nothing" do
expect_any_instance_of(User).not_to receive(:refresh_authorized_projects)
job.perform(-1)
end
end
it_behaves_like "an idempotent worker" do
let(:job_args) { user.id }
it "does not change authorizations when run twice" do
group = create(:group)
create(:project, namespace: group)
group.add_developer(user)
# Delete the authorization created by the after save hook of the member
# created above.
user.project_authorizations.delete_all
expect { job.perform(user.id) }.to change { user.project_authorizations.reload.size }.by(1)
expect { job.perform(user.id) }.not_to change { user.project_authorizations.reload.size }
end
end
end
it_behaves_like "refreshes user's project authorizations"
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