elasticsearch/spec/unit/cloud_credentials_spec.rb (129 lines of code) (raw):

# Licensed to Elasticsearch B.V. under one or more contributor # license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright # ownership. Elasticsearch B.V. licenses this file to you under # the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. require 'spec_helper' describe Elasticsearch::Client do context 'when cloud credentials are provided' do let(:client) do described_class.new( cloud_id: 'name:bG9jYWxob3N0JGFiY2QkZWZnaA==', user: 'elastic', password: 'changeme' ) end let(:hosts) do client.transport.hosts end it 'extracts the cloud credentials' do expect(hosts[0][:host]).to eq('abcd.localhost') expect(hosts[0][:protocol]).to eq('https') expect(hosts[0][:user]).to eq('elastic') expect(hosts[0][:password]).to eq('changeme') expect(hosts[0][:port]).to eq(443) end it 'creates the correct full url' do expect( client.transport.__full_url(client.transport.hosts[0]) ).to eq('https://elastic:changeme@abcd.localhost:443') end context 'when a port is specified' do let(:client) do described_class.new(cloud_id: 'name:bG9jYWxob3N0JGFiY2QkZWZnaA==', user: 'elastic', password: 'changeme', port: 9250) end it 'sets the specified port along with the cloud credentials' do expect(hosts[0][:host]).to eq('abcd.localhost') expect(hosts[0][:protocol]).to eq('https') expect(hosts[0][:user]).to eq('elastic') expect(hosts[0][:password]).to eq('changeme') expect(hosts[0][:port]).to eq(9250) end it 'creates the correct full url' do expect(client.transport.__full_url(client.transport.hosts[0])).to eq('https://elastic:changeme@abcd.localhost:9250') end end context 'when the cluster has alternate names' do let(:client) do described_class.new( cloud_id: 'myCluster:bG9jYWxob3N0JGFiY2QkZWZnaA==', user: 'elasticfantastic', password: 'tobechanged' ) end let(:hosts) do client.transport.hosts end it 'extracts the cloud credentials' do expect(hosts[0][:host]).to eq('abcd.localhost') expect(hosts[0][:protocol]).to eq('https') expect(hosts[0][:user]).to eq('elasticfantastic') expect(hosts[0][:password]).to eq('tobechanged') expect(hosts[0][:port]).to eq(443) end it 'creates the correct full url' do expect( client.transport.__full_url(client.transport.hosts[0]) ).to eq('https://elasticfantastic:tobechanged@abcd.localhost:443') end end context 'when decoded cloud id has a trailing dollar sign' do let(:client) do described_class.new( cloud_id: 'a_cluster:bG9jYWxob3N0JGFiY2Qk', user: 'elasticfantastic', password: 'changeme' ) end let(:hosts) do client.transport.hosts end it 'extracts the cloud credentials' do expect(hosts[0][:host]).to eq('abcd.localhost') expect(hosts[0][:protocol]).to eq('https') expect(hosts[0][:user]).to eq('elasticfantastic') expect(hosts[0][:password]).to eq('changeme') expect(hosts[0][:port]).to eq(443) end it 'creates the correct full url' do expect( client.transport.__full_url(client.transport.hosts[0]) ).to eq('https://elasticfantastic:changeme@abcd.localhost:443') end end context 'when the cloud host provides a port' do let(:client) do described_class.new( cloud_id: 'name:ZWxhc3RpY19zZXJ2ZXI6OTI0MyRlbGFzdGljX2lk', user: 'elastic', password: 'changeme' ) end let(:hosts) do client.transport.hosts end it 'creates the correct full url' do expect(hosts[0][:host]).to eq('elastic_id.elastic_server') expect(hosts[0][:protocol]).to eq('https') expect(hosts[0][:user]).to eq('elastic') expect(hosts[0][:password]).to eq('changeme') expect(hosts[0][:port]).to eq(9243) end end context 'when the cloud host provides a port and the port is also specified' do let(:client) do described_class.new( cloud_id: 'name:ZWxhc3RpY19zZXJ2ZXI6OTI0MyRlbGFzdGljX2lk', user: 'elastic', password: 'changeme', port: 9200 ) end let(:hosts) do client.transport.hosts end it 'creates the correct full url' do expect(hosts[0][:host]).to eq('elastic_id.elastic_server') expect(hosts[0][:protocol]).to eq('https') expect(hosts[0][:user]).to eq('elastic') expect(hosts[0][:password]).to eq('changeme') expect(hosts[0][:port]).to eq(9243) end end end end