Test Prometheus proxy client generation
This commit is contained in:
parent
ae9c8277d9
commit
09473b192c
2 changed files with 58 additions and 2 deletions
|
@ -40,15 +40,20 @@ module Clusters
|
||||||
end
|
end
|
||||||
|
|
||||||
def proxy_client
|
def proxy_client
|
||||||
return unless cluster.kubeclient
|
return unless kube_client
|
||||||
|
|
||||||
kube_client = cluster.kubeclient
|
|
||||||
proxy_url = kube_client.proxy_url('service', service_name, service_port, Gitlab::Kubernetes::Helm::NAMESPACE)
|
proxy_url = kube_client.proxy_url('service', service_name, service_port, Gitlab::Kubernetes::Helm::NAMESPACE)
|
||||||
|
|
||||||
# ensures headers containing auth data are appended to original k8s client options
|
# ensures headers containing auth data are appended to original k8s client options
|
||||||
options = kube_client.rest_client.options.merge(headers: kube_client.headers)
|
options = kube_client.rest_client.options.merge(headers: kube_client.headers)
|
||||||
RestClient::Resource.new(proxy_url, options)
|
RestClient::Resource.new(proxy_url, options)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def kube_client
|
||||||
|
cluster&.kubeclient
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,4 +31,55 @@ describe Clusters::Applications::Prometheus do
|
||||||
expect(subject).to eq("#{Rails.root}/vendor/prometheus/values.yaml")
|
expect(subject).to eq("#{Rails.root}/vendor/prometheus/values.yaml")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#proxy_client' do
|
||||||
|
context 'cluster is nil' do
|
||||||
|
it 'returns nil' do
|
||||||
|
expect(subject.cluster).to be_nil
|
||||||
|
expect(subject.proxy_client).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "cluster doesn't have kubeclient" do
|
||||||
|
let(:cluster) { create(:cluster) }
|
||||||
|
subject { create(:clusters_applications_prometheus, cluster: cluster) }
|
||||||
|
|
||||||
|
it 'returns nil' do
|
||||||
|
expect(subject.proxy_client).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'cluster has kubeclient' do
|
||||||
|
let(:kubernetes_url) { 'http://example.com' }
|
||||||
|
let(:k8s_discover_response) { {
|
||||||
|
resources: [
|
||||||
|
{
|
||||||
|
name: 'service',
|
||||||
|
kind: 'Service'
|
||||||
|
}]
|
||||||
|
} }
|
||||||
|
|
||||||
|
let(:kube_client) { Kubeclient::Client.new(kubernetes_url) }
|
||||||
|
|
||||||
|
let(:cluster) { create(:cluster) }
|
||||||
|
subject { create(:clusters_applications_prometheus, cluster: cluster) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(kube_client.rest_client).to receive(:get).and_return(k8s_discover_response.to_json)
|
||||||
|
allow(subject.cluster).to receive(:kubeclient).and_return(kube_client)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates proxy prometheus rest client' do
|
||||||
|
expect(subject.proxy_client).to be_instance_of(RestClient::Resource)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates proper url' do
|
||||||
|
expect(subject.proxy_client.url).to eq('http://example.com/api/v1/proxy/namespaces/gitlab-managed-apps/service/prometheus-prometheus-server:80')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'copies options and headers from kube client to proxy client' do
|
||||||
|
expect(subject.proxy_client.options).to eq(kube_client.rest_client.options.merge(headers: kube_client.headers))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue