summaryrefslogtreecommitdiff
path: root/spec/models/clusters/cluster_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/clusters/cluster_spec.rb')
-rw-r--r--spec/models/clusters/cluster_spec.rb83
1 files changed, 72 insertions, 11 deletions
diff --git a/spec/models/clusters/cluster_spec.rb b/spec/models/clusters/cluster_spec.rb
index 4807957152c..2d0b5af0e77 100644
--- a/spec/models/clusters/cluster_spec.rb
+++ b/spec/models/clusters/cluster_spec.rb
@@ -1153,6 +1153,57 @@ RSpec.describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
end
end
+ describe '#connection_error' do
+ let(:cluster) { create(:cluster) }
+ let(:error) { :unknown_error }
+
+ subject { cluster.connection_error }
+
+ it { is_expected.to be_nil }
+
+ context 'with a cached status' do
+ before do
+ stub_reactive_cache(cluster, connection_error: error)
+ end
+
+ it { is_expected.to eq(error) }
+ end
+ end
+
+ describe '#node_connection_error' do
+ let(:cluster) { create(:cluster) }
+ let(:error) { :unknown_error }
+
+ subject { cluster.node_connection_error }
+
+ it { is_expected.to be_nil }
+
+ context 'with a cached status' do
+ before do
+ stub_reactive_cache(cluster, node_connection_error: error)
+ end
+
+ it { is_expected.to eq(error) }
+ end
+ end
+
+ describe '#metrics_connection_error' do
+ let(:cluster) { create(:cluster) }
+ let(:error) { :unknown_error }
+
+ subject { cluster.metrics_connection_error }
+
+ it { is_expected.to be_nil }
+
+ context 'with a cached status' do
+ before do
+ stub_reactive_cache(cluster, metrics_connection_error: error)
+ end
+
+ it { is_expected.to eq(error) }
+ end
+ end
+
describe '#nodes' do
let(:cluster) { create(:cluster) }
@@ -1186,43 +1237,49 @@ RSpec.describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
context 'cluster is enabled' do
let(:cluster) { create(:cluster, :provided_by_user, :group) }
let(:gl_k8s_node_double) { double(Gitlab::Kubernetes::Node) }
- let(:expected_nodes) { nil }
+ let(:expected_nodes) { {} }
before do
stub_kubeclient_discover(cluster.platform.api_url)
allow(Gitlab::Kubernetes::Node).to receive(:new).with(cluster).and_return(gl_k8s_node_double)
- allow(gl_k8s_node_double).to receive(:all).and_return([])
+ allow(gl_k8s_node_double).to receive(:all).and_return(expected_nodes)
end
context 'connection to the cluster is successful' do
+ let(:expected_nodes) { { nodes: [kube_node.merge(kube_node_metrics)] } }
+ let(:connection_status) { { connection_status: :connected } }
+
before do
allow(gl_k8s_node_double).to receive(:all).and_return(expected_nodes)
end
- let(:expected_nodes) { [kube_node.merge(kube_node_metrics)] }
-
- it { is_expected.to eq(connection_status: :connected, nodes: expected_nodes) }
+ it { is_expected.to eq(**connection_status, **expected_nodes) }
end
context 'cluster cannot be reached' do
+ let(:connection_status) { { connection_status: :unreachable, connection_error: :connection_error } }
+
before do
allow(cluster.kubeclient.core_client).to receive(:discover)
.and_raise(SocketError)
end
- it { is_expected.to eq(connection_status: :unreachable, nodes: expected_nodes) }
+ it { is_expected.to eq(**connection_status, **expected_nodes) }
end
context 'cluster cannot be authenticated to' do
+ let(:connection_status) { { connection_status: :authentication_failure, connection_error: :authentication_error } }
+
before do
allow(cluster.kubeclient.core_client).to receive(:discover)
.and_raise(OpenSSL::X509::CertificateError.new("Certificate error"))
end
- it { is_expected.to eq(connection_status: :authentication_failure, nodes: expected_nodes) }
+ it { is_expected.to eq(**connection_status, **expected_nodes) }
end
describe 'Kubeclient::HttpError' do
+ let(:connection_status) { { connection_status: :authentication_failure, connection_error: :http_error } }
let(:error_code) { 403 }
let(:error_message) { "Forbidden" }
@@ -1231,28 +1288,32 @@ RSpec.describe Clusters::Cluster, :use_clean_rails_memory_store_caching do
.and_raise(Kubeclient::HttpError.new(error_code, error_message, nil))
end
- it { is_expected.to eq(connection_status: :authentication_failure, nodes: expected_nodes) }
+ it { is_expected.to eq(**connection_status, **expected_nodes) }
context 'generic timeout' do
+ let(:connection_status) { { connection_status: :unreachable, connection_error: :http_error } }
let(:error_message) { 'Timed out connecting to server'}
- it { is_expected.to eq(connection_status: :unreachable, nodes: expected_nodes) }
+ it { is_expected.to eq(**connection_status, **expected_nodes) }
end
context 'gateway timeout' do
+ let(:connection_status) { { connection_status: :unreachable, connection_error: :http_error } }
let(:error_message) { '504 Gateway Timeout for GET https://kubernetes.example.com/api/v1'}
- it { is_expected.to eq(connection_status: :unreachable, nodes: expected_nodes) }
+ it { is_expected.to eq(**connection_status, **expected_nodes) }
end
end
context 'an uncategorised error is raised' do
+ let(:connection_status) { { connection_status: :unknown_failure, connection_error: :unknown_error } }
+
before do
allow(cluster.kubeclient.core_client).to receive(:discover)
.and_raise(StandardError)
end
- it { is_expected.to eq(connection_status: :unknown_failure, nodes: expected_nodes) }
+ it { is_expected.to eq(**connection_status, **expected_nodes) }
it 'notifies Sentry' do
expect(Gitlab::ErrorTracking).to receive(:track_exception)