diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories/clusters/applications/helm.rb | 4 | ||||
-rw-r--r-- | spec/factories/clusters/clusters.rb | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/kubernetes/config_map_spec.rb | 16 | ||||
-rw-r--r-- | spec/lib/gitlab/kubernetes/helm/pod_spec.rb | 2 | ||||
-rw-r--r-- | spec/models/clusters/applications/knative_spec.rb | 13 | ||||
-rw-r--r-- | spec/models/clusters/applications/prometheus_spec.rb | 349 | ||||
-rw-r--r-- | spec/models/clusters/cluster_spec.rb | 20 |
7 files changed, 12 insertions, 394 deletions
diff --git a/spec/factories/clusters/applications/helm.rb b/spec/factories/clusters/applications/helm.rb index 200eebfa7ae..99110a9b841 100644 --- a/spec/factories/clusters/applications/helm.rb +++ b/spec/factories/clusters/applications/helm.rb @@ -98,10 +98,6 @@ FactoryBot.define do cluster factory: %i(cluster with_installed_helm provided_by_gcp) end - factory :clusters_applications_prometheus, class: 'Clusters::Applications::Prometheus' do - cluster factory: %i(cluster with_installed_helm provided_by_gcp) - end - factory :clusters_applications_runner, class: 'Clusters::Applications::Runner' do cluster factory: %i(cluster with_installed_helm provided_by_gcp) end diff --git a/spec/factories/clusters/clusters.rb b/spec/factories/clusters/clusters.rb index 8ae277af637..d92ee6dcbe7 100644 --- a/spec/factories/clusters/clusters.rb +++ b/spec/factories/clusters/clusters.rb @@ -87,14 +87,12 @@ FactoryBot.define do end trait :with_installed_prometheus do - application_prometheus factory: %i(clusters_applications_prometheus installed) integration_prometheus factory: %i(clusters_integrations_prometheus) end trait :with_all_applications do application_helm factory: %i(clusters_applications_helm installed) application_ingress factory: %i(clusters_applications_ingress installed) - application_prometheus factory: %i(clusters_applications_prometheus installed) application_runner factory: %i(clusters_applications_runner installed) application_jupyter factory: %i(clusters_applications_jupyter installed) application_knative factory: %i(clusters_applications_knative installed) diff --git a/spec/lib/gitlab/kubernetes/config_map_spec.rb b/spec/lib/gitlab/kubernetes/config_map_spec.rb index 2d0d205ffb1..ebc2202921b 100644 --- a/spec/lib/gitlab/kubernetes/config_map_spec.rb +++ b/spec/lib/gitlab/kubernetes/config_map_spec.rb @@ -4,20 +4,23 @@ require 'spec_helper' RSpec.describe Gitlab::Kubernetes::ConfigMap do let(:kubeclient) { double('kubernetes client') } - let(:application) { create(:clusters_applications_prometheus) } - let(:config_map) { described_class.new(application.name, application.files) } + let(:name) { 'my-name' } + let(:files) { [] } + let(:config_map) { described_class.new(name, files) } let(:namespace) { Gitlab::Kubernetes::Helm::NAMESPACE } let(:metadata) do { - name: "values-content-configuration-#{application.name}", + name: "values-content-configuration-#{name}", namespace: namespace, - labels: { name: "values-content-configuration-#{application.name}" } + labels: { name: "values-content-configuration-#{name}" } } end describe '#generate' do - let(:resource) { ::Kubeclient::Resource.new(metadata: metadata, data: application.files) } + let(:resource) do + ::Kubeclient::Resource.new(metadata: metadata, data: files) + end subject { config_map.generate } @@ -28,7 +31,8 @@ RSpec.describe Gitlab::Kubernetes::ConfigMap do describe '#config_map_name' do it 'returns the config_map name' do - expect(config_map.config_map_name).to eq("values-content-configuration-#{application.name}") + expect(config_map.config_map_name) + .to eq("values-content-configuration-#{name}") end end end diff --git a/spec/lib/gitlab/kubernetes/helm/pod_spec.rb b/spec/lib/gitlab/kubernetes/helm/pod_spec.rb index e3763977add..8aa755bffce 100644 --- a/spec/lib/gitlab/kubernetes/helm/pod_spec.rb +++ b/spec/lib/gitlab/kubernetes/helm/pod_spec.rb @@ -13,7 +13,7 @@ RSpec.describe Gitlab::Kubernetes::Helm::Pod do with_them do let(:cluster) { create(:cluster, helm_major_version: helm_major_version) } - let(:app) { create(:clusters_applications_prometheus, cluster: cluster) } + let(:app) { create(:clusters_applications_knative, cluster: cluster) } let(:command) { app.install_command } let(:namespace) { Gitlab::Kubernetes::Helm::NAMESPACE } let(:service_account_name) { nil } diff --git a/spec/models/clusters/applications/knative_spec.rb b/spec/models/clusters/applications/knative_spec.rb index a95cb672d9e..91e90de02c0 100644 --- a/spec/models/clusters/applications/knative_spec.rb +++ b/spec/models/clusters/applications/knative_spec.rb @@ -131,19 +131,6 @@ RSpec.describe Clusters::Applications::Knative do it 'does not install metrics for prometheus' do expect(subject.postinstall).to be_empty end - - context 'with prometheus installed' do - let(:prometheus) { create(:clusters_applications_prometheus, :installed) } - let(:knative) { create(:clusters_applications_knative, cluster: prometheus.cluster) } - - subject { knative.install_command } - - it 'installs metrics' do - expect(subject.postinstall).not_to be_empty - expect(subject.postinstall.length).to be(1) - expect(subject.postinstall[0]).to eql("kubectl apply -f #{Clusters::Applications::Knative::METRICS_CONFIG}") - end - end end describe '#install_command' do diff --git a/spec/models/clusters/applications/prometheus_spec.rb b/spec/models/clusters/applications/prometheus_spec.rb deleted file mode 100644 index 15c3162270e..00000000000 --- a/spec/models/clusters/applications/prometheus_spec.rb +++ /dev/null @@ -1,349 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -RSpec.describe Clusters::Applications::Prometheus do - include KubernetesHelpers - include StubRequests - - include_examples 'cluster application core specs', :clusters_applications_prometheus - include_examples 'cluster application status specs', :clusters_applications_prometheus - include_examples 'cluster application version specs', :clusters_applications_prometheus - include_examples 'cluster application helm specs', :clusters_applications_prometheus - include_examples 'cluster application initial status specs' - - describe 'default values' do - subject(:prometheus) { build(:clusters_applications_prometheus) } - - it { expect(prometheus.alert_manager_token).to be_an_instance_of(String) } - it { expect(prometheus.version).to eq(described_class::VERSION) } - end - - describe 'after_destroy' do - let(:cluster) { create(:cluster, :with_installed_helm) } - let(:application) { create(:clusters_applications_prometheus, :installed, cluster: cluster) } - - it 'disables the corresponding integration' do - application.destroy! - - expect(cluster.integration_prometheus).not_to be_enabled - end - end - - describe 'transition to installed' do - let(:project) { create(:project) } - let(:cluster) { create(:cluster, :with_installed_helm) } - let(:application) { create(:clusters_applications_prometheus, :installing, cluster: cluster) } - - it 'enables the corresponding integration' do - application.make_installed - - expect(cluster.integration_prometheus).to be_enabled - end - end - - describe 'transition to externally_installed' do - let(:project) { create(:project) } - let(:cluster) { create(:cluster, :with_installed_helm) } - let(:application) { create(:clusters_applications_prometheus, :installing, cluster: cluster) } - - it 'enables the corresponding integration' do - application.make_externally_installed! - - expect(cluster.integration_prometheus).to be_enabled - end - end - - describe 'transition to updating' do - let(:project) { create(:project) } - let(:cluster) { create(:cluster, projects: [project]) } - - subject { create(:clusters_applications_prometheus, :installed, cluster: cluster) } - - it 'sets last_update_started_at to now' do - freeze_time do - expect { subject.make_updating }.to change { subject.reload.last_update_started_at }.to be_within(1.second).of(Time.current) - end - end - end - - describe '#managed_prometheus?' do - subject { prometheus.managed_prometheus? } - - let(:prometheus) { build(:clusters_applications_prometheus) } - - it { is_expected.to be_truthy } - - context 'externally installed' do - let(:prometheus) { build(:clusters_applications_prometheus, :externally_installed) } - - it { is_expected.to be_falsey } - end - - context 'uninstalled' do - let(:prometheus) { build(:clusters_applications_prometheus, :uninstalled) } - - it { is_expected.to be_falsey } - end - end - - describe '#can_uninstall?' do - let(:prometheus) { create(:clusters_applications_prometheus) } - - subject { prometheus.can_uninstall? } - - it { is_expected.to be_truthy } - end - - describe '#prometheus_client' do - include_examples '#prometheus_client shared' do - let(:factory) { :clusters_applications_prometheus } - end - end - - describe '#install_command' do - let(:prometheus) { create(:clusters_applications_prometheus) } - - subject { prometheus.install_command } - - it { is_expected.to be_an_instance_of(Gitlab::Kubernetes::Helm::V3::InstallCommand) } - - it 'is initialized with 3 arguments' do - expect(subject.name).to eq('prometheus') - expect(subject.chart).to eq('prometheus/prometheus') - expect(subject.version).to eq('10.4.1') - expect(subject).to be_rbac - expect(subject.files).to eq(prometheus.files) - end - - context 'on a non rbac enabled cluster' do - before do - prometheus.cluster.platform_kubernetes.abac! - end - - it { is_expected.not_to be_rbac } - end - - context 'application failed to install previously' do - let(:prometheus) { create(:clusters_applications_prometheus, :errored, version: '2.0.0') } - - it 'is initialized with the locked version' do - expect(subject.version).to eq('10.4.1') - end - end - - it 'does not install knative metrics' do - expect(subject.postinstall).to be_empty - end - - context 'with knative installed' do - let(:knative) { create(:clusters_applications_knative, :updated) } - let(:prometheus) { create(:clusters_applications_prometheus, cluster: knative.cluster) } - - subject { prometheus.install_command } - - it 'installs knative metrics' do - expect(subject.postinstall).to include("kubectl apply -f #{Clusters::Applications::Knative::METRICS_CONFIG}") - end - end - end - - describe '#uninstall_command' do - let(:prometheus) { create(:clusters_applications_prometheus) } - - subject { prometheus.uninstall_command } - - it { is_expected.to be_an_instance_of(Gitlab::Kubernetes::Helm::V3::DeleteCommand) } - - it 'has the application name' do - expect(subject.name).to eq('prometheus') - end - - it 'has files' do - expect(subject.files).to eq(prometheus.files) - end - - it 'is rbac' do - expect(subject).to be_rbac - end - - describe '#predelete' do - let(:knative) { create(:clusters_applications_knative, :updated) } - let(:prometheus) { create(:clusters_applications_prometheus, cluster: knative.cluster) } - - subject { prometheus.uninstall_command.predelete } - - it 'deletes knative metrics' do - metrics_config = Clusters::Applications::Knative::METRICS_CONFIG - is_expected.to include("kubectl delete -f #{metrics_config} --ignore-not-found") - end - end - - context 'on a non rbac enabled cluster' do - before do - prometheus.cluster.platform_kubernetes.abac! - end - - it { is_expected.not_to be_rbac } - end - end - - describe '#patch_command' do - subject(:patch_command) { prometheus.patch_command(values) } - - let(:prometheus) { build(:clusters_applications_prometheus) } - let(:values) { prometheus.values } - - it { is_expected.to be_an_instance_of(::Gitlab::Kubernetes::Helm::V3::PatchCommand) } - - it 'is initialized with 3 arguments' do - expect(patch_command.name).to eq('prometheus') - expect(patch_command.chart).to eq('prometheus/prometheus') - expect(patch_command.version).to eq('10.4.1') - expect(patch_command.files).to eq(prometheus.files) - end - end - - describe '#update_in_progress?' do - context 'when app is updating' do - it 'returns true' do - cluster = create(:cluster) - prometheus_app = build(:clusters_applications_prometheus, :updating, cluster: cluster) - - expect(prometheus_app.update_in_progress?).to be true - end - end - end - - describe '#update_errored?' do - context 'when app errored' do - it 'returns true' do - cluster = create(:cluster) - prometheus_app = build(:clusters_applications_prometheus, :update_errored, cluster: cluster) - - expect(prometheus_app.update_errored?).to be true - end - end - end - - describe '#files' do - let(:application) { create(:clusters_applications_prometheus) } - let(:values) { subject[:'values.yaml'] } - - subject { application.files } - - it 'includes prometheus valid values' do - expect(values).to include('alertmanager') - expect(values).to include('kubeStateMetrics') - expect(values).to include('nodeExporter') - expect(values).to include('pushgateway') - expect(values).to include('serverFiles') - end - end - - describe '#files_with_replaced_values' do - let(:application) { build(:clusters_applications_prometheus) } - let(:files) { application.files } - - subject { application.files_with_replaced_values({ hello: :world }) } - - it 'does not modify #files' do - expect(subject[:'values.yaml']).not_to eq(files[:'values.yaml']) - - expect(files[:'values.yaml']).to eq(application.values) - end - - it 'returns values.yaml with replaced values' do - expect(subject[:'values.yaml']).to eq({ hello: :world }) - end - - it 'uses values from #files, except for values.yaml' do - allow(application).to receive(:files).and_return({ - 'values.yaml': 'some value specific to files', - 'file_a.txt': 'file_a', - 'file_b.txt': 'file_b' - }) - - expect(subject.except(:'values.yaml')).to eq({ - 'file_a.txt': 'file_a', - 'file_b.txt': 'file_b' - }) - end - end - - describe '#configured?' do - let(:prometheus) { create(:clusters_applications_prometheus, :installed, cluster: cluster) } - - subject { prometheus.configured? } - - context 'when a kubenetes client is present' do - let(:cluster) { create(:cluster, :project, :provided_by_gcp) } - - it { is_expected.to be_truthy } - - context 'when it is not availalble' do - let(:prometheus) { create(:clusters_applications_prometheus, cluster: cluster) } - - it { is_expected.to be_falsey } - end - - context 'when the kubernetes URL is blocked' do - before do - blocked_ip = '127.0.0.1' # localhost addresses are blocked by default - - stub_all_dns(cluster.platform.api_url, ip_address: blocked_ip) - end - - it { is_expected.to be_falsey } - end - end - - context 'when a kubenetes client is not present' do - let(:cluster) { create(:cluster) } - - it { is_expected.to be_falsy } - end - end - - describe '#updated_since?' do - let(:cluster) { create(:cluster) } - let(:prometheus_app) { build(:clusters_applications_prometheus, cluster: cluster) } - let(:timestamp) { Time.current - 5.minutes } - - around do |example| - freeze_time { example.run } - end - - before do - prometheus_app.last_update_started_at = Time.current - end - - context 'when app does not have status failed' do - it 'returns true when last update started after the timestamp' do - expect(prometheus_app.updated_since?(timestamp)).to be true - end - - it 'returns false when last update started before the timestamp' do - expect(prometheus_app.updated_since?(Time.current + 5.minutes)).to be false - end - end - - context 'when app has status failed' do - it 'returns false when last update started after the timestamp' do - prometheus_app.status = 6 - - expect(prometheus_app.updated_since?(timestamp)).to be false - end - end - end - - describe 'alert manager token' do - subject { create(:clusters_applications_prometheus) } - - it 'is autogenerated on creation' do - expect(subject.alert_manager_token).to match(/\A\h{32}\z/) - expect(subject.encrypted_alert_manager_token).not_to be_nil - expect(subject.encrypted_alert_manager_token_iv).not_to be_nil - end - end -end diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb index 2a2e2899d24..2d46714eb22 100644 --- a/spec/models/clusters/cluster_spec.rb +++ b/spec/models/clusters/cluster_spec.rb @@ -25,7 +25,6 @@ feature_category: :kubernetes_management do it { is_expected.to have_one(:integration_prometheus) } it { is_expected.to have_one(:application_helm) } it { is_expected.to have_one(:application_ingress) } - it { is_expected.to have_one(:application_prometheus) } it { is_expected.to have_one(:application_runner) } it { is_expected.to have_many(:kubernetes_namespaces) } it { is_expected.to have_one(:cluster_project) } @@ -714,13 +713,12 @@ feature_category: :kubernetes_management do context 'when all applications are created' do let!(:helm) { create(:clusters_applications_helm, cluster: cluster) } let!(:ingress) { create(:clusters_applications_ingress, cluster: cluster) } - let!(:prometheus) { create(:clusters_applications_prometheus, cluster: cluster) } let!(:runner) { create(:clusters_applications_runner, cluster: cluster) } let!(:jupyter) { create(:clusters_applications_jupyter, cluster: cluster) } let!(:knative) { create(:clusters_applications_knative, cluster: cluster) } it 'returns a list of created applications' do - is_expected.to contain_exactly(helm, ingress, prometheus, runner, jupyter, knative) + is_expected.to contain_exactly(helm, ingress, runner, jupyter, knative) end end @@ -1342,22 +1340,6 @@ feature_category: :kubernetes_management do expect(cluster.prometheus_adapter).to eq(integration) end end - - context 'has application_prometheus' do - let_it_be(:application) { create(:clusters_applications_prometheus, :no_helm_installed, cluster: cluster) } - - it 'returns nil' do - expect(cluster.prometheus_adapter).to be_nil - end - - context 'also has a integration_prometheus' do - let_it_be(:integration) { create(:clusters_integrations_prometheus, cluster: cluster) } - - it 'returns the integration' do - expect(cluster.prometheus_adapter).to eq(integration) - end - end - end end describe '#delete_cached_resources!' do |