diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 12:26:25 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-07-20 12:26:25 +0000 |
commit | a09983ae35713f5a2bbb100981116d31ce99826e (patch) | |
tree | 2ee2af7bd104d57086db360a7e6d8c9d5d43667a /spec/lib/quality | |
parent | 18c5ab32b738c0b6ecb4d0df3994000482f34bd8 (diff) | |
download | gitlab-ce-a09983ae35713f5a2bbb100981116d31ce99826e.tar.gz |
Add latest changes from gitlab-org/gitlab@13-2-stable-ee
Diffstat (limited to 'spec/lib/quality')
-rw-r--r-- | spec/lib/quality/helm3_client_spec.rb | 133 | ||||
-rw-r--r-- | spec/lib/quality/kubernetes_client_spec.rb | 111 | ||||
-rw-r--r-- | spec/lib/quality/test_level_spec.rb | 4 |
3 files changed, 2 insertions, 246 deletions
diff --git a/spec/lib/quality/helm3_client_spec.rb b/spec/lib/quality/helm3_client_spec.rb deleted file mode 100644 index 1144ee9369d..00000000000 --- a/spec/lib/quality/helm3_client_spec.rb +++ /dev/null @@ -1,133 +0,0 @@ -# frozen_string_literal: true - -require 'fast_spec_helper' - -RSpec.describe Quality::Helm3Client do - let(:namespace) { 'review-apps-ee' } - let(:release_name) { 'my-release' } - let(:raw_helm_list_page1) do - <<~OUTPUT - [ - {"name":"review-qa-60-reor-1mugd1","namespace":"#{namespace}","revision":1,"updated":"2020-04-03 17:27:10.245952 +0800 +08","status":"failed","chart":"gitlab-1.1.3","app_version":"12.9.2"}, - {"name":"review-7846-fix-s-261vd6","namespace":"#{namespace}","revision":2,"updated":"2020-04-02 17:27:12.245952 +0800 +08","status":"deployed","chart":"gitlab-1.1.3","app_version":"12.9.2"}, - {"name":"review-7867-snowp-lzo3iy","namespace":"#{namespace}","revision":1,"updated":"2020-04-02 15:27:12.245952 +0800 +08","status":"deployed","chart":"gitlab-1.1.3","app_version":"12.9.1"}, - {"name":"review-6709-group-2pzeec","namespace":"#{namespace}","revision":2,"updated":"2020-04-01 21:27:12.245952 +0800 +08","status":"failed","chart":"gitlab-1.1.3","app_version":"12.9.1"} - ] - OUTPUT - end - let(:raw_helm_list_page2) do - <<~OUTPUT - [ - {"name":"review-6709-group-t40qbv","namespace":"#{namespace}","revision":2,"updated":"2020-04-01 11:27:12.245952 +0800 +08","status":"deployed","chart":"gitlab-1.1.3","app_version":"12.9.1"} - ] - OUTPUT - end - let(:raw_helm_list_empty) do - <<~OUTPUT - [] - OUTPUT - end - - subject { described_class.new(namespace: namespace) } - - describe '#releases' do - it 'raises an error if the Helm command fails' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(helm list --namespace "#{namespace}" --max 256 --offset 0 --output json)]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: false))) - - expect { subject.releases.to_a }.to raise_error(described_class::CommandFailedError) - end - - it 'calls helm list with default arguments' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(helm list --namespace "#{namespace}" --max 256 --offset 0 --output json)]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) - - subject.releases.to_a - end - - it 'calls helm list with extra arguments' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(helm list --namespace "#{namespace}" --max 256 --offset 0 --output json --deployed)]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) - - subject.releases(args: ['--deployed']).to_a - end - - it 'returns a list of Release objects' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(helm list --namespace "#{namespace}" --max 256 --offset 0 --output json --deployed)]) - .and_return(Gitlab::Popen::Result.new([], raw_helm_list_page2, '', double(success?: true))) - expect(Gitlab::Popen).to receive(:popen_with_detail).ordered - .and_return(Gitlab::Popen::Result.new([], raw_helm_list_empty, '', double(success?: true))) - - releases = subject.releases(args: ['--deployed']).to_a - - expect(releases.size).to eq(1) - expect(releases[0]).to have_attributes( - name: 'review-6709-group-t40qbv', - revision: 2, - last_update: Time.parse('2020-04-01 11:27:12.245952 +0800 +08'), - status: 'deployed', - chart: 'gitlab-1.1.3', - app_version: '12.9.1', - namespace: namespace - ) - end - - it 'automatically paginates releases' do - expect(Gitlab::Popen).to receive(:popen_with_detail).ordered - .with([%(helm list --namespace "#{namespace}" --max 256 --offset 0 --output json)]) - .and_return(Gitlab::Popen::Result.new([], raw_helm_list_page1, '', double(success?: true))) - expect(Gitlab::Popen).to receive(:popen_with_detail).ordered - .with([%(helm list --namespace "#{namespace}" --max 256 --offset 256 --output json)]) - .and_return(Gitlab::Popen::Result.new([], raw_helm_list_page2, '', double(success?: true))) - expect(Gitlab::Popen).to receive(:popen_with_detail).ordered - .with([%(helm list --namespace "#{namespace}" --max 256 --offset 512 --output json)]) - .and_return(Gitlab::Popen::Result.new([], raw_helm_list_empty, '', double(success?: true))) - releases = subject.releases.to_a - - expect(releases.size).to eq(5) - expect(releases.last.name).to eq('review-6709-group-t40qbv') - end - end - - describe '#delete' do - it 'raises an error if the Helm command fails' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(helm uninstall --namespace "#{namespace}" #{release_name})]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: false))) - - expect { subject.delete(release_name: release_name) }.to raise_error(described_class::CommandFailedError) - end - - it 'calls helm uninstall with default arguments' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(helm uninstall --namespace "#{namespace}" #{release_name})]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) - - expect(subject.delete(release_name: release_name)).to eq('') - end - - context 'with multiple release names' do - let(:release_name) { %w[my-release my-release-2] } - - it 'raises an error if the Helm command fails' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(helm uninstall --namespace "#{namespace}" #{release_name.join(' ')})]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: false))) - - expect { subject.delete(release_name: release_name) }.to raise_error(described_class::CommandFailedError) - end - - it 'calls helm uninstall with multiple release names' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .with([%(helm uninstall --namespace "#{namespace}" #{release_name.join(' ')})]) - .and_return(Gitlab::Popen::Result.new([], '', '', double(success?: true))) - - expect(subject.delete(release_name: release_name)).to eq('') - end - end - end -end diff --git a/spec/lib/quality/kubernetes_client_spec.rb b/spec/lib/quality/kubernetes_client_spec.rb deleted file mode 100644 index 1cfee5200f3..00000000000 --- a/spec/lib/quality/kubernetes_client_spec.rb +++ /dev/null @@ -1,111 +0,0 @@ -# frozen_string_literal: true - -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 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) - end - - it 'calls kubectl with the correct arguments' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .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}" --ignore-not-found #{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 - end - - context 'with multiple releases' do - let(:release_name) { %w[my-release my-release-2] } - - it 'raises an error if the Kubernetes command fails' do - expect(Gitlab::Popen).to receive(:popen_with_detail) - .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 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}" --ignore-not-found #{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 - end - end - - 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 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 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}" --ignore-not-found #{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 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 diff --git a/spec/lib/quality/test_level_spec.rb b/spec/lib/quality/test_level_spec.rb index ad29c80b07a..0b113e8b63a 100644 --- a/spec/lib/quality/test_level_spec.rb +++ b/spec/lib/quality/test_level_spec.rb @@ -28,7 +28,7 @@ RSpec.describe Quality::TestLevel do context 'when level is migration' do it 'returns a pattern' do expect(subject.pattern(:migration)) - .to eq("spec/{migrations}{,/**/}*_spec.rb") + .to eq("spec/{migrations,lib/gitlab/background_migration,lib/ee/gitlab/background_migration}{,/**/}*_spec.rb") end end @@ -96,7 +96,7 @@ RSpec.describe Quality::TestLevel do context 'when level is migration' do it 'returns a regexp' do expect(subject.regexp(:migration)) - .to eq(%r{spec/(migrations)}) + .to eq(%r{spec/(migrations|lib/gitlab/background_migration|lib/ee/gitlab/background_migration)}) end end |