Skip to content

Commit 5381d72

Browse files
committed
[GEM] Test for YAML response in validation
1 parent bd796ea commit 5381d72

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

elasticsearch/lib/elasticsearch.rb

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,40 +45,50 @@ def method_missing(name, *args, &block)
4545

4646
def verify_elasticsearch
4747
begin
48-
response = @transport.perform_request('GET', '/')
48+
response = elasticsearch_validation_request
4949
rescue Elasticsearch::Transport::Transport::Errors::Unauthorized,
5050
Elasticsearch::Transport::Transport::Errors::Forbidden
5151
@verified = true
5252
warn(SECURITY_PRIVILEGES_VALIDATION_WARNING)
5353
return
5454
end
5555

56-
verify_with_version_or_header(response)
56+
body = if response.headers['content-type'] == 'application/yaml'
57+
require 'yaml'
58+
YAML.load(response.body)
59+
else
60+
response.body
61+
end
62+
version = body.dig('version', 'number')
63+
verify_with_version_or_header(body, version, response.headers)
5764
end
5865

59-
def verify_with_version_or_header(response)
60-
version = response.body.dig('version', 'number')
66+
def verify_with_version_or_header(body, version, headers)
6167
raise Elasticsearch::NotElasticsearchError if version.nil? || version < '6.0.0'
6268

6369
if version == '7.x-SNAPSHOT' || Gem::Version.new(version) >= Gem::Version.new('7.14-SNAPSHOT')
64-
raise Elasticsearch::NotElasticsearchError unless response.headers['x-elastic-product'] == 'Elasticsearch'
70+
raise Elasticsearch::NotElasticsearchError unless headers['x-elastic-product'] == 'Elasticsearch'
6571

6672
@verified = true
6773
elsif Gem::Version.new(version) > Gem::Version.new('6.0.0') &&
68-
Gem::Version.new(version) < Gem::Version.new('7.0.0')
74+
Gem::Version.new(version) < Gem::Version.new('7.0.0')
6975
raise Elasticsearch::NotElasticsearchError unless
70-
response.body.dig('version', 'tagline') == YOU_KNOW_FOR_SEARCH
76+
body.dig('version', 'tagline') == YOU_KNOW_FOR_SEARCH
7177

7278
@verified = true
7379
elsif Gem::Version.new(version) >= Gem::Version.new('7.0.0') &&
7480
Gem::Version.new(version) < Gem::Version.new('7.14-SNAPSHOT')
7581
raise Elasticsearch::NotElasticsearchError unless
76-
response.body.dig('version', 'tagline') == YOU_KNOW_FOR_SEARCH &&
77-
response.body.dig('version', 'build_flavor') == 'default'
82+
body.dig('version', 'tagline') == YOU_KNOW_FOR_SEARCH &&
83+
body.dig('version', 'build_flavor') == 'default'
7884

7985
@verified = true
8086
end
8187
end
88+
89+
def elasticsearch_validation_request
90+
@transport.perform_request('GET', '/')
91+
end
8292
end
8393

8494
class NotElasticsearchError < StandardError

elasticsearch/spec/unit/elasticsearch_product_validation_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,4 +368,19 @@ def valid_requests_and_expectations
368368
end
369369
end
370370
end
371+
372+
context 'When doing a yaml content-type request' do
373+
let(:client) do
374+
Elasticsearch::Client.new(transport_options: {headers: { accept: 'application/yaml', content_type: 'application/yaml' }})
375+
end
376+
377+
let(:headers) { { 'content-type' => 'application/yaml', 'X-Elastic-Product' => 'Elasticsearch' } }
378+
let(:body) { "---\nversion:\n number: \"7.14.0-SNAPSHOT\"\n" }
379+
380+
it 'validates' do
381+
verify_request_stub
382+
count_request_stub
383+
valid_requests_and_expectations
384+
end
385+
end
371386
end

0 commit comments

Comments
 (0)