diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-27 18:06:30 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-11-27 18:06:30 +0000 |
commit | 20758bc3b33c04121d214cb89646baf880037a27 (patch) | |
tree | 66b821724d9e050002a956acefc1111c2ef0feab /spec/lib/quality | |
parent | a98649b71085bcd21af674a47d6a746336c56a65 (diff) | |
download | gitlab-ce-20758bc3b33c04121d214cb89646baf880037a27.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/quality')
-rw-r--r-- | spec/lib/quality/kubernetes_client_spec.rb | 74 |
1 files changed, 52 insertions, 22 deletions
diff --git a/spec/lib/quality/kubernetes_client_spec.rb b/spec/lib/quality/kubernetes_client_spec.rb index 5bac102ac41..59d4a977d5e 100644 --- a/spec/lib/quality/kubernetes_client_spec.rb +++ b/spec/lib/quality/kubernetes_client_spec.rb @@ -5,15 +5,27 @@ require 'fast_spec_helper' RSpec.describe Quality::KubernetesClient do let(:namespace) { 'review-apps-ee' } let(:release_name) { 'my-release' } + let(:pod_for_release) { "pod-my-release-abcd" } + let(:raw_resource_names_str) { "NAME\nfoo\n#{pod_for_release}\nbar" } + let(:raw_resource_names) { raw_resource_names_str.lines.map(&:strip) } subject { described_class.new(namespace: namespace) } + describe 'RESOURCE_LIST' do + it 'returns the correct list of resources separated by commas' do + expect(described_class::RESOURCE_LIST).to eq('ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa,crd') + end + end + describe '#cleanup' do + before do + allow(subject).to receive(:raw_resource_names).and_return(raw_resource_names) + end + it 'raises an error if the Kubernetes command fails' do expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(kubectl --namespace "#{namespace}" delete ) \ - 'ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa ' \ - "--now --ignore-not-found --include-uninitialized --wait=true -l release=\"#{release_name}\""]) + .with(["kubectl delete #{described_class::RESOURCE_LIST} " + + %(--namespace "#{namespace}" --now --ignore-not-found --include-uninitialized --wait=true -l release="#{release_name}")]) .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: false))) expect { subject.cleanup(release_name: release_name) }.to raise_error(described_class::CommandFailedError) @@ -21,9 +33,12 @@ RSpec.describe Quality::KubernetesClient do it 'calls kubectl with the correct arguments' do expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(kubectl --namespace "#{namespace}" delete ) \ - 'ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa ' \ - "--now --ignore-not-found --include-uninitialized --wait=true -l release=\"#{release_name}\""]) + .with(["kubectl delete #{described_class::RESOURCE_LIST} " + + %(--namespace "#{namespace}" --now --ignore-not-found --include-uninitialized --wait=true -l release="#{release_name}")]) + .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) + + expect(Gitlab::Popen).to receive(:popen_with_detail) + .with([%(kubectl delete --namespace "#{namespace}" #{pod_for_release})]) .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) # We're not verifying the output here, just silencing it @@ -35,20 +50,22 @@ RSpec.describe Quality::KubernetesClient do it 'raises an error if the Kubernetes command fails' do expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(kubectl --namespace "#{namespace}" delete ) \ - 'ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa ' \ - "--now --ignore-not-found --include-uninitialized --wait=true -l 'release in (#{release_name.join(', ')})'"]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: false))) + .with(["kubectl delete #{described_class::RESOURCE_LIST} " + + %(--namespace "#{namespace}" --now --ignore-not-found --include-uninitialized --wait=true -l 'release in (#{release_name.join(', ')})')]) + .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: false))) expect { subject.cleanup(release_name: release_name) }.to raise_error(described_class::CommandFailedError) end it 'calls kubectl with the correct arguments' do expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(kubectl --namespace "#{namespace}" delete ) \ - 'ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa ' \ - "--now --ignore-not-found --include-uninitialized --wait=true -l 'release in (#{release_name.join(', ')})'"]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) + .with(["kubectl delete #{described_class::RESOURCE_LIST} " + + %(--namespace "#{namespace}" --now --ignore-not-found --include-uninitialized --wait=true -l 'release in (#{release_name.join(', ')})')]) + .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) + + expect(Gitlab::Popen).to receive(:popen_with_detail) + .with([%(kubectl delete --namespace "#{namespace}" #{pod_for_release})]) + .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) # We're not verifying the output here, just silencing it expect { subject.cleanup(release_name: release_name) }.to output.to_stdout @@ -58,24 +75,37 @@ RSpec.describe Quality::KubernetesClient do context 'with `wait: false`' do it 'raises an error if the Kubernetes command fails' do expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(kubectl --namespace "#{namespace}" delete ) \ - 'ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa ' \ - "--now --ignore-not-found --include-uninitialized --wait=false -l release=\"#{release_name}\""]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: false))) + .with(["kubectl delete #{described_class::RESOURCE_LIST} " + + %(--namespace "#{namespace}" --now --ignore-not-found --include-uninitialized --wait=false -l release="#{release_name}")]) + .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: false))) expect { subject.cleanup(release_name: release_name, wait: false) }.to raise_error(described_class::CommandFailedError) end it 'calls kubectl with the correct arguments' do expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(kubectl --namespace "#{namespace}" delete ) \ - 'ingress,svc,pdb,hpa,deploy,statefulset,job,pod,secret,configmap,pvc,secret,clusterrole,clusterrolebinding,role,rolebinding,sa ' \ - "--now --ignore-not-found --include-uninitialized --wait=false -l release=\"#{release_name}\""]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) + .with(["kubectl delete #{described_class::RESOURCE_LIST} " + + %(--namespace "#{namespace}" --now --ignore-not-found --include-uninitialized --wait=false -l release="#{release_name}")]) + .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) + + expect(Gitlab::Popen).to receive(:popen_with_detail) + .with([%(kubectl delete --namespace "#{namespace}" #{pod_for_release})]) + .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) # We're not verifying the output here, just silencing it expect { subject.cleanup(release_name: release_name, wait: false) }.to output.to_stdout end end end + + describe '#raw_resource_names' do + it 'calls kubectl to retrieve the resource names' do + expect(Gitlab::Popen).to receive(:popen_with_detail) + .with(["kubectl get #{described_class::RESOURCE_LIST} " + + %(--namespace "#{namespace}" -o custom-columns=NAME:.metadata.name)]) + .and_return(Gitlab::Popen::Result.new([], raw_resource_names_str, '', double(success?: true))) + + expect(subject.__send__(:raw_resource_names)).to eq(raw_resource_names) + end + end end |