feat: send x-goog-api-client header in all requests
This commit is contained in:
parent
eea7d16b5e
commit
8cf4330494
|
@ -52,6 +52,7 @@ module Google
|
|||
#
|
||||
# @return [void]
|
||||
def prepare!
|
||||
set_xgac
|
||||
if options && options.api_format_version
|
||||
header['X-Goog-Api-Format-Version'] = options.api_format_version.to_s
|
||||
end
|
||||
|
@ -125,6 +126,17 @@ module Google
|
|||
|
||||
private
|
||||
|
||||
def set_xgac
|
||||
old_xgac = header
|
||||
.find_all { |k, v| k.downcase == 'x-goog-api-client' }
|
||||
.map { |(a, b)| b }
|
||||
.join(' ')
|
||||
xgac = "gl-ruby/#{RUBY_VERSION} gdcl/#{Google::Apis::VERSION}"
|
||||
xgac = old_xgac.empty? ? xgac : "#{old_xgac} #{xgac}"
|
||||
header.delete_if { |k, v| k.downcase == 'x-goog-api-client' }
|
||||
header['X-Goog-Api-Client'] = xgac
|
||||
end
|
||||
|
||||
# Attempt to parse a JSON error message
|
||||
# @param [String] body
|
||||
# HTTP response body
|
||||
|
|
|
@ -32,6 +32,33 @@ RSpec.describe Google::Apis::Core::ApiCommand do
|
|||
end
|
||||
end
|
||||
|
||||
let(:x_goog_api_client_value) { "gl-ruby/#{RUBY_VERSION} gdcl/#{Google::Apis::VERSION}" }
|
||||
|
||||
context('with preparation') do
|
||||
let(:command) do
|
||||
Google::Apis::Core::ApiCommand.new(:get, 'https://www.googleapis.com/zoo/animals')
|
||||
end
|
||||
|
||||
it 'should set X-Goog-Api-Client header if none is set' do
|
||||
command.prepare!
|
||||
expect(command.header['X-Goog-Api-Client']).to eql x_goog_api_client_value
|
||||
end
|
||||
|
||||
it 'should append to x-goog-api-client header with case difference' do
|
||||
command.header['x-goog-api-client'] = "foo/1.2.3"
|
||||
command.prepare!
|
||||
expect(command.header['X-Goog-Api-Client']).to eql "foo/1.2.3 #{x_goog_api_client_value}"
|
||||
end
|
||||
|
||||
it 'should append to multiple x-goog-api-client headers' do
|
||||
command.header['x-goog-api-client'] = "foo/1.2.3"
|
||||
command.header['X-Goog-Api-Client'] = "bar/4.5.6"
|
||||
command.prepare!
|
||||
expect(command.header['X-Goog-Api-Client']).to eql "foo/1.2.3 bar/4.5.6 #{x_goog_api_client_value}"
|
||||
expect(command.header['x-goog-api-client']).to be nil
|
||||
end
|
||||
end
|
||||
|
||||
context('with a request body') do
|
||||
let(:command) do
|
||||
request = model_class.new
|
||||
|
|
|
@ -21,6 +21,7 @@ RSpec.describe Google::Apis::Core::BaseService do
|
|||
include TestHelpers
|
||||
|
||||
let(:service) { Google::Apis::Core::BaseService.new('https://www.googleapis.com/', '') }
|
||||
let(:x_goog_api_client_value) { "gl-ruby/#{RUBY_VERSION} gdcl/#{Google::Apis::VERSION}" }
|
||||
|
||||
before do
|
||||
Google::Apis::ClientOptions.default.application_name = 'test'
|
||||
|
@ -122,6 +123,13 @@ RSpec.describe Google::Apis::Core::BaseService do
|
|||
expect(url).to eql 'https://www.googleapis.com/zoo/animals'
|
||||
end
|
||||
|
||||
it 'should send the command with x-goog-api-client header' do
|
||||
stub_request(:get, 'https://www.googleapis.com/zoo/animals').to_return(body: '')
|
||||
service.send(:execute_or_queue_command, command)
|
||||
expected_headers = {'X-Goog-Api-Client': x_goog_api_client_value}
|
||||
expect(a_request(:get, 'https://www.googleapis.com/zoo/animals').with(headers: expected_headers)).to have_been_made
|
||||
end
|
||||
|
||||
include_examples 'with options'
|
||||
end
|
||||
|
||||
|
@ -269,10 +277,11 @@ EOF
|
|||
--outer
|
||||
Content-Type: application/http
|
||||
Content-Id: <b1981e17-f622-49af-b2eb-203308b1b17d+0>
|
||||
Content-Length: 303
|
||||
Content-Length: 349
|
||||
Content-Transfer-Encoding: binary
|
||||
|
||||
POST /upload/zoo/animals? HTTP/1.1
|
||||
X-Goog-Api-Client: #{x_goog_api_client_value}
|
||||
Content-Type: multipart/related; boundary=inner
|
||||
X-Goog-Upload-Protocol: multipart
|
||||
Host: www.googleapis.com
|
||||
|
|
Loading…
Reference in New Issue