summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2019-10-14 12:06:14 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2019-10-14 12:06:14 +0000
commite464f195ff5debc3e9aad0f8c4537404b92019c6 (patch)
tree9efe381ffb9d8c9bceb3cced1e27b6b59dc6298b /spec
parent5ff1b520badaa2da217416964709f49f3ede350a (diff)
downloadgitlab-ce-e464f195ff5debc3e9aad0f8c4537404b92019c6.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/factories/clusters/clusters.rb4
-rw-r--r--spec/lib/gitlab/import_export/all_models.yml1
-rw-r--r--spec/models/clusters/cluster_spec.rb15
-rw-r--r--spec/models/clusters/clusters_hierarchy_spec.rb36
-rw-r--r--spec/models/clusters/platforms/kubernetes_spec.rb17
-rw-r--r--spec/models/concerns/deployment_platform_spec.rb49
-rw-r--r--spec/models/project_spec.rb1
-rw-r--r--spec/services/projects/hashed_storage/migrate_repository_service_spec.rb1
-rw-r--r--spec/services/projects/hashed_storage/rollback_repository_service_spec.rb1
-rw-r--r--spec/workers/namespaceless_project_destroy_worker_spec.rb1
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