diff --git a/lib/elastic/transport/transport/http/manticore.rb b/lib/elastic/transport/transport/http/manticore.rb index 26aafe38..499c2ec6 100644 --- a/lib/elastic/transport/transport/http/manticore.rb +++ b/lib/elastic/transport/transport/http/manticore.rb @@ -90,11 +90,10 @@ def build_client(options = {}) def perform_request(method, path, params = {}, body = nil, headers = nil, opts = {}) super do |connection, url| body = body ? __convert_to_json(body) : nil - body, headers = compress_request(body, @request_options[:headers]) - + body, headers = compress_request(body, parse_headers(headers)) params[:body] = body if body params[:headers] = headers if headers - params = params.merge @request_options + case method when 'GET' resp = connection.connection.get(url, params) @@ -161,6 +160,12 @@ def host_unreachable_exceptions private + def parse_headers(headers) + request_headers = @request_options.fetch(:headers, {}) + headers = request_headers.merge(headers || {}) + headers.empty? ? nil : headers + end + def apply_headers(options) headers = options[:headers].clone || options.dig(:transport_options, :headers).clone || {} headers[CONTENT_TYPE_STR] = find_value(headers, CONTENT_TYPE_REGEX) || DEFAULT_CONTENT_TYPE diff --git a/spec/elastic/transport/http/manticore_spec.rb b/spec/elastic/transport/http/manticore_spec.rb index 7fbb7897..b65684ba 100644 --- a/spec/elastic/transport/http/manticore_spec.rb +++ b/spec/elastic/transport/http/manticore_spec.rb @@ -53,7 +53,7 @@ expect(perform_request).to be_kind_of(Elastic::Transport::Transport::Response) end - it 'run body with preper params' do + it 'runs body with proper params' do expect( client.transport.connections.first.connection ).to receive(:post).with( @@ -121,7 +121,7 @@ gzip.close.string end - it 'run body with preper params' do + it 'runs body with proper params' do expect( client.transport.connections.first.connection ).to receive(:post).with(*request_params).and_return(response) @@ -141,6 +141,24 @@ end end end + + context 'headers' do + it 'sends custom headers' do + client = Elastic::Transport::Client.new( + transport_class: described_class, + transport_options: { headers: { 'Elastic-Api-Version'=>'2023-10-31' } } + ) + expect( + client.transport.connections.first.connection + ).to receive(:get).with( + 'http://localhost:9200/', + { + headers: expected_headers.merge({ 'Elastic-Api-Version'=>'2023-10-31' }) + } + ).and_return(response) + client.perform_request('GET', '/', {}, nil, headers) + end + end end end end diff --git a/test/unit/transport_manticore_test.rb b/test/unit/transport_manticore_test.rb index 47739c6e..88e447f4 100644 --- a/test/unit/transport_manticore_test.rb +++ b/test/unit/transport_manticore_test.rb @@ -111,7 +111,7 @@ def common_headers { body: '{"foo":"bar"}', headers: { - 'Content-Type' => 'application/json', + 'Content-Type' => 'application/x-ndjson', 'User-Agent' => @transport.send(:user_agent_header) } }