summaryrefslogtreecommitdiff
path: root/spec/models/clusters/cluster_spec.rb
diff options
context:
space:
mode:
authorTiger <twatson@gitlab.com>2019-06-14 10:18:50 +1000
committerTiger <twatson@gitlab.com>2019-06-17 21:21:13 +1000
commitddd271b6027b13bca02416ec3dda17d3ec7fd5be (patch)
tree4cd5f7e7347d8e94ec4720291083e229af6ec1a5 /spec/models/clusters/cluster_spec.rb
parentb05de5a583e35931967dcc70d2f26f568c9cf0db (diff)
downloadgitlab-ce-ddd271b6027b13bca02416ec3dda17d3ec7fd5be.tar.gz
Don't use Kubernetes namespaces with no token63079-exclude-k8s-namespaces-with-no-service-account-token
Whenever we are selecting a namespace to use for a deployment or to query a cluster we want to exclude Kubernetes namespace records that don't have a token set as they will not have the required permissions. However when configuring clusters, we want to use the original namespace record even if it has no token, as a namespace has to be unique on a cluster.
Diffstat (limited to 'spec/models/clusters/cluster_spec.rb')
-rw-r--r--spec/models/clusters/cluster_spec.rb57
1 files changed, 57 insertions, 0 deletions
diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb
index f206bb41f45..c302b7a15f4 100644
--- a/spec/models/clusters/cluster_spec.rb
+++ b/spec/models/clusters/cluster_spec.rb
@@ -555,6 +555,63 @@ describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
end
end
+ describe '#find_or_initialize_kubernetes_namespace_for_project' do
+ let(:cluster) { create(:cluster, :project, :provided_by_gcp) }
+ let(:project) { cluster.projects.first }
+
+ subject { cluster.find_or_initialize_kubernetes_namespace_for_project(project) }
+
+ context 'kubernetes namespace exists' do
+ context 'with no service account token' do
+ let!(:kubernetes_namespace) { create(:cluster_kubernetes_namespace, project: project, cluster: cluster) }
+
+ it { is_expected.to eq kubernetes_namespace }
+ end
+
+ context 'with a service account token' do
+ let!(:kubernetes_namespace) { create(:cluster_kubernetes_namespace, :with_token, project: project, cluster: cluster) }
+
+ it { is_expected.to eq kubernetes_namespace }
+ end
+ end
+
+ context 'kubernetes namespace does not exist' do
+ it 'initializes a new namespace and sets default values' do
+ expect(subject).to be_new_record
+ expect(subject.project).to eq project
+ expect(subject.cluster).to eq cluster
+ expect(subject.namespace).to be_present
+ expect(subject.service_account_name).to be_present
+ end
+ end
+
+ context 'a custom scope is provided' do
+ let(:scope) { cluster.kubernetes_namespaces.has_service_account_token }
+
+ subject { cluster.find_or_initialize_kubernetes_namespace_for_project(project, scope: scope) }
+
+ context 'kubernetes namespace exists' do
+ context 'with no service account token' do
+ let!(:kubernetes_namespace) { create(:cluster_kubernetes_namespace, project: project, cluster: cluster) }
+
+ it 'initializes a new namespace and sets default values' do
+ expect(subject).to be_new_record
+ expect(subject.project).to eq project
+ expect(subject.cluster).to eq cluster
+ expect(subject.namespace).to be_present
+ expect(subject.service_account_name).to be_present
+ end
+ end
+
+ context 'with a service account token' do
+ let!(:kubernetes_namespace) { create(:cluster_kubernetes_namespace, :with_token, project: project, cluster: cluster) }
+
+ it { is_expected.to eq kubernetes_namespace }
+ end
+ end
+ end
+ end
+
describe '#predefined_variables' do
subject { cluster.predefined_variables }