summaryrefslogtreecommitdiff
path: root/spec/workers/clusters
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-12-20 09:07:57 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2019-12-20 09:07:57 +0000
commit7881eb30eaa8b01dbcfe87faa09927c75c7d6e45 (patch)
tree298bc8d2c62b2f2c29cb8ecbcf3de3eaaa6466d9 /spec/workers/clusters
parent64b66e0cb6d1bfd27abf24e06653f00bddb60597 (diff)
downloadgitlab-ce-7881eb30eaa8b01dbcfe87faa09927c75c7d6e45.tar.gz
Add latest changes from gitlab-org/gitlab@12-6-stable-ee
Diffstat (limited to 'spec/workers/clusters')
-rw-r--r--spec/workers/clusters/applications/activate_service_worker_spec.rb52
-rw-r--r--spec/workers/clusters/applications/deactivate_service_worker_spec.rb68
-rw-r--r--spec/workers/clusters/cleanup/app_worker_spec.rb41
-rw-r--r--spec/workers/clusters/cleanup/project_namespace_worker_spec.rb52
-rw-r--r--spec/workers/clusters/cleanup/service_account_worker_spec.rb27
5 files changed, 240 insertions, 0 deletions
diff --git a/spec/workers/clusters/applications/activate_service_worker_spec.rb b/spec/workers/clusters/applications/activate_service_worker_spec.rb
new file mode 100644
index 00000000000..09f4c536edf
--- /dev/null
+++ b/spec/workers/clusters/applications/activate_service_worker_spec.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Clusters::Applications::ActivateServiceWorker, '#perform' do
+ context 'cluster exists' do
+ describe 'prometheus service' do
+ let(:service_name) { 'prometheus' }
+
+ before do
+ create(:clusters_applications_prometheus, :installed, cluster: cluster)
+ end
+
+ context 'cluster type: group' do
+ let(:group) { create(:group) }
+ let(:project) { create(:project, group: group) }
+ let(:cluster) { create(:cluster_for_group, :with_installed_helm, groups: [group]) }
+
+ it 'ensures Prometheus service is activated' do
+ expect { described_class.new.perform(cluster.id, service_name) }
+ .to change { project.reload.prometheus_service&.active }.from(nil).to(true)
+ end
+ end
+
+ context 'cluster type: project' do
+ let(:project) { create(:project) }
+ let(:cluster) { create(:cluster, :with_installed_helm, projects: [project]) }
+
+ it 'ensures Prometheus service is activated' do
+ expect { described_class.new.perform(cluster.id, service_name) }
+ .to change { project.reload.prometheus_service&.active }.from(nil).to(true)
+ end
+ end
+
+ context 'cluster type: instance' do
+ let(:project) { create(:project) }
+ let(:cluster) { create(:cluster, :instance) }
+
+ it 'ensures Prometheus service is activated' do
+ expect { described_class.new.perform(cluster.id, service_name) }
+ .to change { project.reload.prometheus_service&.active }.from(nil).to(true)
+ end
+ end
+ end
+ end
+
+ context 'cluster does not exist' do
+ it 'does not raise Record Not Found error' do
+ expect { described_class.new.perform(0, 'ignored in this context') }.not_to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+end
diff --git a/spec/workers/clusters/applications/deactivate_service_worker_spec.rb b/spec/workers/clusters/applications/deactivate_service_worker_spec.rb
new file mode 100644
index 00000000000..809843a1bc8
--- /dev/null
+++ b/spec/workers/clusters/applications/deactivate_service_worker_spec.rb
@@ -0,0 +1,68 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Clusters::Applications::DeactivateServiceWorker, '#perform' do
+ context 'cluster exists' do
+ describe 'prometheus service' do
+ let(:service_name) { 'prometheus' }
+ let!(:application) { create(:clusters_applications_prometheus, :installed, cluster: cluster) }
+
+ context 'prometheus service exists' do
+ let!(:prometheus_service) { create(:prometheus_service, project: project, manual_configuration: false, active: true) }
+
+ before do
+ application.delete # prometheus service before save synchronises active stated with application existance.
+ end
+
+ context 'cluster type: group' do
+ let(:group) { create(:group) }
+ let(:project) { create(:project, group: group) }
+ let(:cluster) { create(:cluster_for_group, :with_installed_helm, groups: [group]) }
+
+ it 'ensures Prometheus service is deactivated' do
+ expect { described_class.new.perform(cluster.id, service_name) }
+ .to change { prometheus_service.reload.active }.from(true).to(false)
+ end
+ end
+
+ context 'cluster type: project' do
+ let(:project) { create(:project) }
+ let(:cluster) { create(:cluster, :with_installed_helm, projects: [project]) }
+
+ it 'ensures Prometheus service is deactivated' do
+ expect { described_class.new.perform(cluster.id, service_name) }
+ .to change { prometheus_service.reload.active }.from(true).to(false)
+ end
+ end
+
+ context 'cluster type: instance' do
+ let(:project) { create(:project) }
+ let(:cluster) { create(:cluster, :with_installed_helm, :instance) }
+
+ it 'ensures Prometheus service is deactivated' do
+ expect { described_class.new.perform(cluster.id, service_name) }
+ .to change { prometheus_service.reload.active }.from(true).to(false)
+ end
+ end
+ end
+
+ context 'prometheus service does not exist' do
+ context 'cluster type: project' do
+ let(:project) { create(:project) }
+ let(:cluster) { create(:cluster, :with_installed_helm, projects: [project]) }
+
+ it 'does not raise errors' do
+ expect { described_class.new.perform(cluster.id, service_name) }.not_to raise_error
+ end
+ end
+ end
+ end
+ end
+
+ context 'cluster does not exist' do
+ it 'raises Record Not Found error' do
+ expect { described_class.new.perform(0, 'ignored in this context') }.to raise_error(ActiveRecord::RecordNotFound)
+ end
+ end
+end
diff --git a/spec/workers/clusters/cleanup/app_worker_spec.rb b/spec/workers/clusters/cleanup/app_worker_spec.rb
new file mode 100644
index 00000000000..29c00db8079
--- /dev/null
+++ b/spec/workers/clusters/cleanup/app_worker_spec.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Clusters::Cleanup::AppWorker do
+ describe '#perform' do
+ subject { worker_instance.perform(cluster.id) }
+
+ let!(:worker_instance) { described_class.new }
+ let!(:cluster) { create(:cluster, :project, :cleanup_uninstalling_applications, provider_type: :gcp) }
+ let!(:logger) { worker_instance.send(:logger) }
+
+ it_behaves_like 'cluster cleanup worker base specs'
+
+ context 'when exceeded the execution limit' do
+ subject { worker_instance.perform(cluster.id, worker_instance.send(:execution_limit)) }
+
+ let(:worker_instance) { described_class.new }
+ let(:logger) { worker_instance.send(:logger) }
+ let!(:helm) { create(:clusters_applications_helm, :installed, cluster: cluster) }
+ let!(:ingress) { create(:clusters_applications_ingress, :scheduled, cluster: cluster) }
+
+ it 'logs the error' do
+ expect(logger).to receive(:error)
+ .with(
+ hash_including(
+ exception: 'ClusterCleanupMethods::ExceededExecutionLimitError',
+ cluster_id: kind_of(Integer),
+ class_name: described_class.name,
+ applications: "helm:installed,ingress:scheduled",
+ cleanup_status: cluster.cleanup_status_name,
+ event: :failed_to_remove_cluster_and_resources,
+ message: "exceeded execution limit of 10 tries"
+ )
+ )
+
+ subject
+ end
+ end
+ end
+end
diff --git a/spec/workers/clusters/cleanup/project_namespace_worker_spec.rb b/spec/workers/clusters/cleanup/project_namespace_worker_spec.rb
new file mode 100644
index 00000000000..8b6f22e9a61
--- /dev/null
+++ b/spec/workers/clusters/cleanup/project_namespace_worker_spec.rb
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Clusters::Cleanup::ProjectNamespaceWorker do
+ describe '#perform' do
+ context 'when cluster.cleanup_status is cleanup_removing_project_namespaces' do
+ let!(:cluster) { create(:cluster, :with_environments, :cleanup_removing_project_namespaces) }
+ let!(:worker_instance) { described_class.new }
+ let!(:logger) { worker_instance.send(:logger) }
+
+ it_behaves_like 'cluster cleanup worker base specs'
+
+ it 'calls Clusters::Cleanup::ProjectNamespaceService' do
+ expect_any_instance_of(Clusters::Cleanup::ProjectNamespaceService).to receive(:execute).once
+
+ subject.perform(cluster.id)
+ end
+
+ context 'when exceeded the execution limit' do
+ subject { worker_instance.perform(cluster.id, worker_instance.send(:execution_limit))}
+
+ it 'logs the error' do
+ expect(logger).to receive(:error)
+ .with(
+ hash_including(
+ exception: 'ClusterCleanupMethods::ExceededExecutionLimitError',
+ cluster_id: kind_of(Integer),
+ class_name: described_class.name,
+ applications: "",
+ cleanup_status: cluster.cleanup_status_name,
+ event: :failed_to_remove_cluster_and_resources,
+ message: "exceeded execution limit of 10 tries"
+ )
+ )
+
+ subject
+ end
+ end
+ end
+
+ context 'when cluster.cleanup_status is not cleanup_removing_project_namespaces' do
+ let!(:cluster) { create(:cluster, :with_environments) }
+
+ it 'does not call Clusters::Cleanup::ProjectNamespaceService' do
+ expect(Clusters::Cleanup::ProjectNamespaceService).not_to receive(:new)
+
+ subject.perform(cluster.id)
+ end
+ end
+ end
+end
diff --git a/spec/workers/clusters/cleanup/service_account_worker_spec.rb b/spec/workers/clusters/cleanup/service_account_worker_spec.rb
new file mode 100644
index 00000000000..9af53dd63c1
--- /dev/null
+++ b/spec/workers/clusters/cleanup/service_account_worker_spec.rb
@@ -0,0 +1,27 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Clusters::Cleanup::ServiceAccountWorker do
+ describe '#perform' do
+ let!(:cluster) { create(:cluster, :cleanup_removing_service_account) }
+
+ context 'when cluster.cleanup_status is cleanup_removing_service_account' do
+ it 'calls Clusters::Cleanup::ServiceAccountService' do
+ expect_any_instance_of(Clusters::Cleanup::ServiceAccountService).to receive(:execute).once
+
+ subject.perform(cluster.id)
+ end
+ end
+
+ context 'when cluster.cleanup_status is not cleanup_removing_service_account' do
+ let!(:cluster) { create(:cluster, :with_environments) }
+
+ it 'does not call Clusters::Cleanup::ServiceAccountService' do
+ expect(Clusters::Cleanup::ServiceAccountService).not_to receive(:new)
+
+ subject.perform(cluster.id)
+ end
+ end
+ end
+end