diff options
author | Alessio Caiazza <acaiazza@gitlab.com> | 2017-10-26 16:38:10 +0200 |
---|---|---|
committer | Alessio Caiazza <acaiazza@gitlab.com> | 2017-10-26 18:18:11 +0200 |
commit | 3aafcc16fbdde08bf333eab97c5b1b3c4249a5cf (patch) | |
tree | 31ba13811ff498a1508d33754d6035e12e2d09be | |
parent | 6798bab12a0faabf43f61eb65561b9f058824e4d (diff) | |
download | gitlab-ce-ac-k8s-namespace-validator.tar.gz |
Add KubernetesService#default_namespace testsac-k8s-namespace-validator
-rw-r--r-- | app/models/project_services/kubernetes_service.rb | 11 | ||||
-rw-r--r-- | spec/models/project_services/kubernetes_service_spec.rb | 27 |
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 |