summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessio Caiazza <acaiazza@gitlab.com>2017-10-26 16:38:10 +0200
committerAlessio Caiazza <acaiazza@gitlab.com>2017-10-26 18:18:11 +0200
commit3aafcc16fbdde08bf333eab97c5b1b3c4249a5cf (patch)
tree31ba13811ff498a1508d33754d6035e12e2d09be
parent6798bab12a0faabf43f61eb65561b9f058824e4d (diff)
downloadgitlab-ce-ac-k8s-namespace-validator.tar.gz
Add KubernetesService#default_namespace testsac-k8s-namespace-validator
-rw-r--r--app/models/project_services/kubernetes_service.rb11
-rw-r--r--spec/models/project_services/kubernetes_service_spec.rb27
2 files changed, 24 insertions, 14 deletions
diff --git a/app/models/project_services/kubernetes_service.rb b/app/models/project_services/kubernetes_service.rb
index 45a544e3674..5c0b3338a62 100644
--- a/app/models/project_services/kubernetes_service.rb
+++ b/app/models/project_services/kubernetes_service.rb
@@ -155,15 +155,8 @@ class KubernetesService < DeploymentService
def default_namespace
return unless project
- # 1. lowercase
- # 2. replace non kubernetes characters with dash
- # 3. trim dash from the beginning and end
-
- slugified = "#{project.path}-#{project.id}"
- slugified.downcase!
- slugified.gsub!(/[^a-z0-9]/, '-')
- slugified.gsub!(/^-+|-+$/, '')
- slugified
+ slug = "#{project.path}-#{project.id}".downcase
+ slug.gsub(/[^-a-z0-9]/, '-').gsub(/^-+/, '')
end
def build_kubeclient!(api_path: 'api', api_version: 'v1')
diff --git a/spec/models/project_services/kubernetes_service_spec.rb b/spec/models/project_services/kubernetes_service_spec.rb
index 69da4375245..fa478a22cf4 100644
--- a/spec/models/project_services/kubernetes_service_spec.rb
+++ b/spec/models/project_services/kubernetes_service_spec.rb
@@ -99,8 +99,25 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
describe '#actual_namespace' do
subject { service.actual_namespace }
- it "returns the default namespace" do
- is_expected.to eq(service.send(:default_namespace))
+ shared_examples 'a correctly formatted namespace' do
+ it 'returns a valid Kubernetes namespace name' do
+ expect(subject).to match(Gitlab::Regex.kubernetes_namespace_regex)
+ expect(subject).to eq(expected_namespace)
+ end
+ end
+
+ it_behaves_like 'a correctly formatted namespace' do
+ let(:expected_namespace) { service.send(:default_namespace) }
+ end
+
+ context 'when the project path contains forbidden characters' do
+ before do
+ project.path = '-a_Strange.Path--forSure'
+ end
+
+ it_behaves_like 'a correctly formatted namespace' do
+ let(:expected_namespace) { "a-strange-path--forsure-#{project.id}" }
+ end
end
context 'when namespace is specified' do
@@ -108,8 +125,8 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
service.namespace = 'my-namespace'
end
- it "returns the user-namespace" do
- is_expected.to eq('my-namespace')
+ it_behaves_like 'a correctly formatted namespace' do
+ let(:expected_namespace) { 'my-namespace' }
end
end
@@ -118,7 +135,7 @@ describe KubernetesService, :use_clean_rails_memory_store_caching do
service.project = nil
end
- it "does not return namespace" do
+ it 'does not return namespace' do
is_expected.to be_nil
end
end