diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-14 12:06:14 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-14 12:06:14 +0000 |
commit | e464f195ff5debc3e9aad0f8c4537404b92019c6 (patch) | |
tree | 9efe381ffb9d8c9bceb3cced1e27b6b59dc6298b /spec | |
parent | 5ff1b520badaa2da217416964709f49f3ede350a (diff) | |
download | gitlab-ce-e464f195ff5debc3e9aad0f8c4537404b92019c6.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories/clusters/clusters.rb | 4 | ||||
-rw-r--r-- | spec/lib/gitlab/import_export/all_models.yml | 1 | ||||
-rw-r--r-- | spec/models/clusters/cluster_spec.rb | 15 | ||||
-rw-r--r-- | spec/models/clusters/clusters_hierarchy_spec.rb | 36 | ||||
-rw-r--r-- | spec/models/clusters/platforms/kubernetes_spec.rb | 17 | ||||
-rw-r--r-- | spec/models/concerns/deployment_platform_spec.rb | 49 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 1 | ||||
-rw-r--r-- | spec/services/projects/hashed_storage/migrate_repository_service_spec.rb | 1 | ||||
-rw-r--r-- | spec/services/projects/hashed_storage/rollback_repository_service_spec.rb | 1 | ||||
-rw-r--r-- | spec/workers/namespaceless_project_destroy_worker_spec.rb | 1 |
10 files changed, 120 insertions, 6 deletions
diff --git a/spec/factories/clusters/clusters.rb b/spec/factories/clusters/clusters.rb index 74c42c81399..b43a88b39e3 100644 --- a/spec/factories/clusters/clusters.rb +++ b/spec/factories/clusters/clusters.rb @@ -30,6 +30,10 @@ FactoryBot.define do end end + trait :management_project do + management_project factory: :project + end + trait :namespace_per_environment_disabled do namespace_per_environment { false } end diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index 0b00ed9575d..187a8a37179 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -256,6 +256,7 @@ project: - cycle_analytics_stages - group - namespace +- management_clusters - boards - last_event - services diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb index 06f454808e3..b2379283aa7 100644 --- a/spec/models/clusters/cluster_spec.rb +++ b/spec/models/clusters/cluster_spec.rb @@ -11,6 +11,7 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do subject { build(:cluster) } it { is_expected.to belong_to(:user) } + it { is_expected.to belong_to(:management_project).class_name('::Project') } it { is_expected.to have_many(:cluster_projects) } it { is_expected.to have_many(:projects) } it { is_expected.to have_many(:cluster_groups) } @@ -289,6 +290,20 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do it { is_expected.to be_valid } end end + + describe 'unique scope for management_project' do + let(:project) { create(:project) } + let!(:cluster_with_management_project) { create(:cluster, management_project: project) } + + context 'duplicate scopes for the same management project' do + let(:cluster) { build(:cluster, management_project: project) } + + it 'adds an error on environment_scope' do + expect(cluster).not_to be_valid + expect(cluster.errors[:environment_scope].first).to eq('cannot add duplicated environment scope') + end + end + end end describe '.ancestor_clusters_for_clusterable' do diff --git a/spec/models/clusters/clusters_hierarchy_spec.rb b/spec/models/clusters/clusters_hierarchy_spec.rb index 0470ebe17ea..fc35b8257e9 100644 --- a/spec/models/clusters/clusters_hierarchy_spec.rb +++ b/spec/models/clusters/clusters_hierarchy_spec.rb @@ -4,8 +4,8 @@ require 'spec_helper' describe Clusters::ClustersHierarchy do describe '#base_and_ancestors' do - def base_and_ancestors(clusterable) - described_class.new(clusterable).base_and_ancestors + def base_and_ancestors(clusterable, include_management_project: true) + described_class.new(clusterable, include_management_project: include_management_project).base_and_ancestors end context 'project in nested group with clusters at every level' do @@ -44,14 +44,44 @@ describe Clusters::ClustersHierarchy do end end + context 'cluster has management project' do + let!(:project_cluster) { create(:cluster, :project, projects: [project]) } + let!(:group_cluster) { create(:cluster, :group, groups: [group], management_project: management_project) } + + let(:group) { create(:group) } + let(:project) { create(:project, group: group) } + let(:management_project) { create(:project) } + + it 'returns clusters for management_project' do + expect(base_and_ancestors(management_project)).to eq([group_cluster]) + end + + it 'returns nothing if include_management_project is false' do + expect(base_and_ancestors(management_project, include_management_project: false)).to be_empty + end + + it 'returns clusters for project' do + expect(base_and_ancestors(project)).to eq([project_cluster, group_cluster]) + end + + it 'returns clusters for group' do + expect(base_and_ancestors(group)).to eq([group_cluster]) + end + end + context 'project in nested group with clusters at some levels' do - let!(:child) { create(:cluster, :group, groups: [child_group]) } + let!(:child) { create(:cluster, :group, groups: [child_group], management_project: management_project) } let!(:ancestor) { create(:cluster, :group, groups: [ancestor_group]) } let(:ancestor_group) { create(:group) } let(:parent_group) { create(:group, parent: ancestor_group) } let(:child_group) { create(:group, parent: parent_group) } let(:project) { create(:project, group: child_group) } + let(:management_project) { create(:project) } + + it 'returns clusters for management_project' do + expect(base_and_ancestors(management_project)).to eq([child]) + end it 'returns clusters for project' do expect(base_and_ancestors(project)).to eq([child, ancestor]) diff --git a/spec/models/clusters/platforms/kubernetes_spec.rb b/spec/models/clusters/platforms/kubernetes_spec.rb index 40ea248c448..d53fc32cfef 100644 --- a/spec/models/clusters/platforms/kubernetes_spec.rb +++ b/spec/models/clusters/platforms/kubernetes_spec.rb @@ -241,6 +241,23 @@ describe Clusters::Platforms::Kubernetes do it { is_expected.to include(key: 'KUBE_CA_PEM_FILE', value: ca_pem, public: true, file: true) } end + context 'cluster is managed by project' do + before do + allow(Gitlab::Kubernetes::DefaultNamespace).to receive(:new) + .with(cluster, project: project).and_return(double(from_environment_name: namespace)) + + allow(platform).to receive(:kubeconfig).with(namespace).and_return('kubeconfig') + end + + let(:cluster) { create(:cluster, :group, platform_kubernetes: platform, management_project: project) } + let(:namespace) { 'kubernetes-namespace' } + let(:kubeconfig) { 'kubeconfig' } + + it { is_expected.to include(key: 'KUBE_TOKEN', value: platform.token, public: false, masked: true) } + it { is_expected.to include(key: 'KUBE_NAMESPACE', value: namespace) } + it { is_expected.to include(key: 'KUBECONFIG', value: kubeconfig, public: false, file: true) } + end + context 'kubernetes namespace exists' do let(:variable) { Hash(key: :fake_key, value: 'fake_value') } let(:namespace_variables) { Gitlab::Ci::Variables::Collection.new([variable]) } diff --git a/spec/models/concerns/deployment_platform_spec.rb b/spec/models/concerns/deployment_platform_spec.rb index 220f244ad71..f99bf18768f 100644 --- a/spec/models/concerns/deployment_platform_spec.rb +++ b/spec/models/concerns/deployment_platform_spec.rb @@ -12,6 +12,26 @@ describe DeploymentPlatform do it { is_expected.to be_nil } end + context 'when project is the cluster\'s management project ' do + let!(:cluster_with_management_project) { create(:cluster, :provided_by_user, management_project: project) } + + context 'cluster_management_project feature is enabled' do + it 'returns the cluster with management project' do + is_expected.to eq(cluster_with_management_project.platform_kubernetes) + end + end + + context 'cluster_management_project feature is disabled' do + before do + stub_feature_flags(cluster_management_project: false) + end + + it 'returns nothing' do + is_expected.to be_nil + end + end + end + context 'when project has configured kubernetes from CI/CD > Clusters' do let!(:cluster) { create(:cluster, :provided_by_gcp, projects: [project]) } let(:platform_kubernetes) { cluster.platform_kubernetes } @@ -45,6 +65,35 @@ describe DeploymentPlatform do is_expected.to eq(group_cluster.platform_kubernetes) end + context 'when project is the cluster\'s management project ' do + let!(:cluster_with_management_project) { create(:cluster, :provided_by_user, management_project: project) } + + context 'cluster_management_project feature is enabled' do + it 'returns the cluster with management project' do + is_expected.to eq(cluster_with_management_project.platform_kubernetes) + end + end + + context 'cluster_management_project feature is disabled' do + before do + stub_feature_flags(cluster_management_project: false) + end + + it 'returns the group cluster' do + is_expected.to eq(group_cluster.platform_kubernetes) + end + end + end + + context 'when project is not the cluster\'s management project' do + let(:another_project) { create(:project, group: group) } + let!(:cluster_with_management_project) { create(:cluster, :provided_by_user, management_project: another_project) } + + it 'returns the group cluster' do + is_expected.to eq(group_cluster.platform_kubernetes) + end + end + context 'when child group has configured kubernetes cluster' do let(:child_group1) { create(:group, parent: group) } let!(:child_group1_cluster) { create(:cluster_for_group, groups: [child_group1]) } diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index ddba5fca12c..1490955f4a3 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -92,6 +92,7 @@ describe Project do it { is_expected.to have_many(:pipeline_schedules) } it { is_expected.to have_many(:members_and_requesters) } it { is_expected.to have_many(:clusters) } + it { is_expected.to have_many(:management_clusters).class_name('Clusters::Cluster') } it { is_expected.to have_many(:kubernetes_namespaces) } it { is_expected.to have_many(:custom_attributes).class_name('ProjectCustomAttribute') } it { is_expected.to have_many(:project_badges).class_name('ProjectBadge') } diff --git a/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb b/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb index f81d9af01ea..70785c606a5 100644 --- a/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb +++ b/spec/services/projects/hashed_storage/migrate_repository_service_spec.rb @@ -91,7 +91,6 @@ describe Projects::HashedStorage::MigrateRepositoryService do context 'when rollback fails' do before do - hashed_storage.ensure_storage_path_exists gitlab_shell.mv_repository(project.repository_storage, old_disk_path, new_disk_path) end diff --git a/spec/services/projects/hashed_storage/rollback_repository_service_spec.rb b/spec/services/projects/hashed_storage/rollback_repository_service_spec.rb index 48302e7a81b..3ca9ee5bee5 100644 --- a/spec/services/projects/hashed_storage/rollback_repository_service_spec.rb +++ b/spec/services/projects/hashed_storage/rollback_repository_service_spec.rb @@ -91,7 +91,6 @@ describe Projects::HashedStorage::RollbackRepositoryService, :clean_gitlab_redis context 'when rollback fails' do before do - legacy_storage.ensure_storage_path_exists gitlab_shell.mv_repository(project.repository_storage, old_disk_path, new_disk_path) end diff --git a/spec/workers/namespaceless_project_destroy_worker_spec.rb b/spec/workers/namespaceless_project_destroy_worker_spec.rb index 4fbda37e268..e6686328291 100644 --- a/spec/workers/namespaceless_project_destroy_worker_spec.rb +++ b/spec/workers/namespaceless_project_destroy_worker_spec.rb @@ -9,7 +9,6 @@ describe NamespacelessProjectDestroyWorker do before do # Stub after_save callbacks that will fail when Project has no namespace - allow_any_instance_of(Project).to receive(:ensure_storage_path_exists).and_return(nil) allow_any_instance_of(Project).to receive(:update_project_statistics).and_return(nil) end |