From 9d68bf115cef67a3798da716c33c559ed7dc1b07 Mon Sep 17 00:00:00 2001 From: "bobaman@google.com" Date: Mon, 13 Sep 2010 21:54:18 +0000 Subject: [PATCH] Removing transport and OAuth code that is no longer needed. git-svn-id: https://google-api-ruby-client.googlecode.com/svn/trunk@28 c1d61fac-ed7f-fcc1-18f7-ff78120a04ef --- lib/google/api_client/auth/oauth_1.rb | 276 ------------------ .../api_client/transport/http_transport.rb | 184 ------------ spec/google/api_client/auth/oauth_1_spec.rb | 84 ------ .../auth/services/buzz_slow_spec.rb | 72 ----- .../transport/http_transport_slow_spec.rb | 104 ------- .../transport/http_transport_spec.rb | 102 ------- 6 files changed, 822 deletions(-) delete mode 100644 lib/google/api_client/auth/oauth_1.rb delete mode 100644 lib/google/api_client/transport/http_transport.rb delete mode 100644 spec/google/api_client/auth/oauth_1_spec.rb delete mode 100644 spec/google/api_client/auth/services/buzz_slow_spec.rb delete mode 100644 spec/google/api_client/transport/http_transport_slow_spec.rb delete mode 100644 spec/google/api_client/transport/http_transport_spec.rb diff --git a/lib/google/api_client/auth/oauth_1.rb b/lib/google/api_client/auth/oauth_1.rb deleted file mode 100644 index 1e9b47ac0..000000000 --- a/lib/google/api_client/auth/oauth_1.rb +++ /dev/null @@ -1,276 +0,0 @@ -# Copyright 2010 Google Inc. -# -# Licensed 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 'addressable/uri' -require 'oauth' - -module Google #:nodoc: - class APIClient #:nodoc: - ## - # An OAuth 1.0a handler. - class OAuth1 - - ## - # The default OAuth 1.0a configuration values. These may be overrided - # simply by passing in the same key to the constructor. - DEFAULTS = { - :request_token_uri => - 'https://www.google.com/accounts/OAuthGetRequestToken', - :authorization_uri => - 'https://www.google.com/accounts/OAuthAuthorizeToken', - :access_token_uri => - 'https://www.google.com/accounts/OAuthGetAccessToken', - :scopes => [], - :callback => OAuth::OUT_OF_BAND, - :display_name => nil, - :consumer_key => 'anonymous', - :consumer_secret => 'anonymous' - } - - ## - # A set of default configuration values specific to each service. These - # may be overrided simply by passing in the same key to the constructor. - SERVICE_DEFAULTS = { - :buzz => { - :authorization_uri => - 'https://www.google.com/buzz/api/auth/OAuthAuthorizeToken', - :scopes => ['https://www.googleapis.com/auth/buzz'] - }, - :latitude => { - :authorization_uri => - 'https://www.google.com/latitude/apps/OAuthAuthorizeToken', - :scopes => ['https://www.googleapis.com/auth/latitude'] - } - } - - ## - # Creates a new OAuth 1.0a handler. This object obtains the tokens from - # the provider and handles signing any requests to the API. - # - # @param [Hash] options - # The configuration options. - # :service:: - # The name of the service. - # :request_token_uri:: - # The OAuth endpoint for obtaining a request token. - # :authorization_uri:: - # The OAuth endpoint for obtaining user permission. - # :access_token_uri:: - # The OAuth endpoint for obtaining an access token. - # :scopes:: - # An Array of scopes that define the access being - # requested to the API. - # :callback:: - # The URI the user will be redirected to if access is granted to the - # API. For development purposes, the special value - # OAuth::OUT_OF_BAND may also be used. - # :display_name:: - # A human-readable service name to present to the user when they - # visit the :authorization_uri. - # :consumer_key:: - # The consumer key you registered with the Google Accounts API. - # :consumer_secret:: - # The consumer secret issued to you when you registered with the - # Google Accounts API. - # - # @return [Google::APIClient::OAuth1] The OAuth 1.0a handler. - def initialize(options={}) - if options[:service] && SERVICE_DEFAULTS[options[:service]] - @options = DEFAULTS.merge(SERVICE_DEFAULTS[options[:service]]) - else - @options = DEFAULTS.clone - end - @options.merge!(options) - @options[:request_token_uri] = - Addressable::URI.parse(@options[:request_token_uri]) - @options[:authorization_uri] = - Addressable::URI.parse(@options[:authorization_uri]) - @options[:access_token_uri] = - Addressable::URI.parse(@options[:access_token_uri]) - if (@options[:request_token_uri].site != - @options[:authorization_uri].site) || - (@options[:request_token_uri].site != - @options[:authorization_uri].site) - raise ArgumentError, 'All OAuth endpoints must be on the same site.' - end - @oauth_consumer = ::OAuth::Consumer.new( - @options[:consumer_key], @options[:consumer_secret], { - # This is an extremely unfortunate way to configure the consumer, - # but not worth forking or patching to resolve. Yet. - :site => @options[:request_token_uri].site, - :scheme => :header, - :http_method => :post, - :request_token_path => @options[:request_token_uri].request_uri, - :access_token_path => @options[:access_token_uri].request_uri, - :authorize_path => @options[:authorization_uri].request_uri - } - ) - end - - ## - # Returns the configuration of the handler. Configuration options that - # are not recognized by the handler are ignored. - # - # @return [Hash] The configuration options. - def options - return @options - end - - ## - # Returns the current request token. Obtains a new request token if - # one hasn't already been obtained. - # - # @return [OAuth::RequestToken] The request token. - def request_token - oauth_parameters = { - :oauth_callback => @options[:callback] - } - app_parameters = { - :scope => @options[:scopes].join(' ') - } - if @options[:display_name] - app_parameters[:xoauth_displayname] = @options[:display_name] - end - return @request_token ||= @oauth_consumer.get_request_token( - oauth_parameters, - app_parameters - ) - end - - ## - # Sets the request token for the handler. - # - # @param [OAuth::RequestToken] new_request_token The request token. - def request_token=(new_request_token) - if new_request_token.kind_of?(OAuth::RequestToken) - @request_token = new_request_token - else - raise TypeError, - "Expected OAuth::RequestToken, got #{new_request_token.class}." - end - end - - ## - # Returns the current access token. Obtains a new access token if - # one hasn't already been obtained. An request token must have already - # been obtained and authorized or this method will fail. - # - # @return [OAuth::AccessToken] The access token. - def access_token - return @access_token ||= - @oauth_consumer.get_access_token(self.request_token) - end - - ## - # Sets the access token for the handler. - # - # @param [OAuth::AccessToken] new_access_token The access token. - def access_token=(new_access_token) - if new_access_token.kind_of?(OAuth::AccessToken) - @access_token = new_access_token - else - raise TypeError, - "Expected OAuth::AccessToken, got #{new_access_token.class}." - end - end - - ## - # Returns the list of scopes for the handler. - # - # @return [Array] An Array of access scopes. - def scopes - return @options[:scopes] - end - - ## - # Returns the callback for the handler. - # - # @return [String] The OAuth 1.0a callback for the consumer. - def callback - return @options[:callback] - end - - ## - # Returns a human-readable service name to present to the user when they - # visit the :authorization_uri. - # - # @return [String] The display name for the consumer. - def display_name - return @options[:display_name] - end - - ## - # Returns the consumer key. - # - # @return [String] - # The consumer key you registered with the Google Accounts API. - def consumer_key - return @oauth_consumer.key - end - - ## - # Returns the consumer key. - # - # @return [String] - # The consumer secret issued to you when you registered with the - # Google Accounts API. - def consumer_secret - return @oauth_consumer.secret - end - - ## - # Returns the request token URI. - # - # @return [String] - # The OAuth endpoint for obtaining a request token. - def request_token_uri - return @oauth_consumer.request_token_url - end - - ## - # Returns the authorization endpoint URI. This URI is used to construct - # the {#authorization_uri}. - # - # @return [String] - # The OAuth endpoint for obtaining user permission. - def authorization_endpoint_uri - return @oauth_consumer.authorize_url - end - - ## - # Builds the authorization URI that the user will be redirected to. - # Note that this value is derived from the - # {#authorization_endpoint_uri}. - # - # @param [Hash] parameters - # The extra URI query parameters appended to the - # {#authorization_endpoint_uri}. - # - # @return [String] - # The URI to redirect the user to to obtain permission. - def authorization_uri(parameters={}) - return self.request_token.authorize_url(parameters) - end - - ## - # Returns the access token URI. - # - # @return [String] - # The OAuth endpoint for obtaining an access token. - def access_token_uri - return @oauth_consumer.access_token_url - end - end - end -end diff --git a/lib/google/api_client/transport/http_transport.rb b/lib/google/api_client/transport/http_transport.rb deleted file mode 100644 index 912d8265b..000000000 --- a/lib/google/api_client/transport/http_transport.rb +++ /dev/null @@ -1,184 +0,0 @@ -# Copyright 2010 Google Inc. -# -# Licensed 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 'net/http' -require 'net/https' -require 'addressable/uri' - -module Google #:nodoc: - class APIClient #:nodoc: - - ## - # Provides a consistent interface by which to make HTTP requests using the - # Net::HTTP class. - class HTTPTransport - ALLOWED_SCHEMES = ["http", "https"] - METHOD_MAPPING = { - # RFC 2616 - :options => Net::HTTP::Options, - :get => Net::HTTP::Get, - :head => Net::HTTP::Head, - :post => Net::HTTP::Post, - :put => Net::HTTP::Put, - :delete => Net::HTTP::Delete, - :trace => Net::HTTP::Trace, - # Other standards supported by Net::HTTP - :copy => Net::HTTP::Copy, - :lock => Net::HTTP::Lock, - :mkcol => Net::HTTP::Mkcol, - :move => Net::HTTP::Move, - :propfind => Net::HTTP::Propfind, - :proppatch => Net::HTTP::Proppatch, - :unlock => Net::HTTP::Unlock - } - - ## - # - def initialize(options={}) - # A mapping from authorities to Net::HTTP objects. - @connection_pool = options[:connection_pool] || {} - if options[:cert_store] - @cert_store = options[:cert_store] - else - @cert_store = OpenSSL::X509::Store.new - @cert_store.set_default_paths - end - end - - attr_reader :connection_pool - attr_reader :cert_store - - def build_request(method, uri, options={}) - # No type-checking here, but OK because we check against a whitelist - method = method.to_s.downcase.to_sym - uri = Addressable::URI.parse(uri).normalize - if !METHOD_MAPPING.keys.include?(method) - raise ArgumentError, "Unsupported HTTP method: #{method}" - end - headers = { - "Accept" => "application/json;q=1.0, */*;q=0.5" - }.merge(options[:headers] || {}) - - # TODO(bobaman) More stuff here to handle optional parameters like - # form data. - - body = options[:body] || "" - if body != "" - entity_body_defaults = { - "Content-Length" => body.size.to_s, - "Content-Type" => "application/json" - } - headers = entity_body_defaults.merge(headers) - end - return [method.to_s.upcase, uri.to_s, headers, [body]] - end - - def send_request(request) - retried = false - begin - method, uri, headers, body_wrapper = request - body = "" - body_wrapper.each do |chunk| - body += chunk - end - - uri = Addressable::URI.parse(uri).normalize - connection = self.connect_to(uri) - - # Translate to Net::HTTP request - request_class = METHOD_MAPPING[method.to_s.downcase.to_sym] - if !request_class - raise ArgumentError, - "Unsupported HTTP method: #{method.to_s.downcase.to_sym}" - end - net_http_request = request_class.new(uri.request_uri) - for key, value in headers - net_http_request[key] = value - end - net_http_request.body = body - response = connection.request(net_http_request) - - response_headers = {} - # We want the canonical header name. - # Note that Net::HTTP is lossy in that it downcases header names and - # then capitalizes them afterwards. - # This results in less-than-ideal behavior for headers like 'ETag'. - # Not much we can do about it. - response.canonical_each do |header, value| - response_headers[header] = value - end - # We use the Rack spec to trivially abstract the response format - return [response.code.to_i, response_headers, [response.body]] - rescue Errno::EPIPE, IOError, EOFError => e - # If there's a problem with the connection, finish and restart - if !retried && connection.started? - retried = true - connection.finish - connection.start - retry - else - raise e - end - end - end - - ## - # Builds a connection to the authority given in the URI using the - # appropriate protocol. - # - # @param [Addressable::URI, #to_str] uri The URI to connect to. - def connect_to(uri) - uri = Addressable::URI.parse(uri).normalize - if !ALLOWED_SCHEMES.include?(uri.scheme) - raise ArgumentError, "Unsupported protocol: #{uri.scheme}" - end - connection = @connection_pool[uri.site] - unless connection - connection = Net::HTTP.new(uri.host, uri.inferred_port) - end - retried = false - begin - if uri.scheme == 'https' && !connection.started? - connection.use_ssl = true - if connection.respond_to?(:enable_post_connection_check=) - # Deals with a security vulnerability - connection.enable_post_connection_check = true - end - connection.verify_mode = OpenSSL::SSL::VERIFY_PEER - connection.cert_store = @cert_store - end - unless connection.started? - # Since we allow a connection pool to be passed in, we don't - # actually know this connection has been started yet. - connection.start - end - rescue Errno::EPIPE, IOError, EOFError => e - # If there's a problem with the connection, finish and restart - if !retried && connection.started? - retried = true - connection.finish - connection.start - retry - else - raise e - end - end - # Keep a reference to the connection around - @connection_pool[uri.site] = connection - return connection - end - protected :connect_to - end - end -end diff --git a/spec/google/api_client/auth/oauth_1_spec.rb b/spec/google/api_client/auth/oauth_1_spec.rb deleted file mode 100644 index f1b280f0d..000000000 --- a/spec/google/api_client/auth/oauth_1_spec.rb +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright 2010 Google Inc. -# -# Licensed 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' - -require 'oauth' -require 'google/api_client/auth/oauth_1' - -describe Google::APIClient::OAuth1, 'in the default configuration' do - before do - @oauth = Google::APIClient::OAuth1.new - end - - it 'should have the correct request_token_uri' do - @oauth.request_token_uri.should == - 'https://www.google.com/accounts/OAuthGetRequestToken' - end - - it 'should have the correct authorization_uri' do - @oauth.authorization_endpoint_uri.should == - 'https://www.google.com/accounts/OAuthAuthorizeToken' - end - - it 'should have the correct access_token_uri' do - @oauth.access_token_uri.should == - 'https://www.google.com/accounts/OAuthGetAccessToken' - end - - it 'should have the correct consumer_key' do - @oauth.consumer_key.should == 'anonymous' - end - - it 'should have the correct consumer_secret' do - @oauth.consumer_secret.should == 'anonymous' - end - - it 'should allow the request_token to be set manually' do - @oauth.request_token = OAuth::RequestToken.new(@oauth, 'key', 'secret') - @oauth.request_token.token.should == 'key' - @oauth.request_token.secret.should == 'secret' - end - - it 'should not allow the request_token to be set to bogus value' do - (lambda do - @oauth.request_token = 42 - end).should raise_error(TypeError) - end -end - -describe Google::APIClient::OAuth1, 'configured for use with bogus service' do - before do - @oauth = Google::APIClient::OAuth1.new(:service => :bogus) - end - - it 'should have the default configuration' do - @oauth.request_token_uri.should == - Google::APIClient::OAuth1::DEFAULTS[:request_token_uri] - @oauth.authorization_endpoint_uri.should == - Google::APIClient::OAuth1::DEFAULTS[:authorization_uri] - @oauth.access_token_uri.should == - Google::APIClient::OAuth1::DEFAULTS[:access_token_uri] - @oauth.scopes.should == - Google::APIClient::OAuth1::DEFAULTS[:scopes] - @oauth.callback.should == - Google::APIClient::OAuth1::DEFAULTS[:callback] - @oauth.display_name.should == - Google::APIClient::OAuth1::DEFAULTS[:display_name] - @oauth.consumer_key.should == - Google::APIClient::OAuth1::DEFAULTS[:consumer_key] - @oauth.consumer_secret.should == - Google::APIClient::OAuth1::DEFAULTS[:consumer_secret] - end -end diff --git a/spec/google/api_client/auth/services/buzz_slow_spec.rb b/spec/google/api_client/auth/services/buzz_slow_spec.rb deleted file mode 100644 index 74d0f4a0c..000000000 --- a/spec/google/api_client/auth/services/buzz_slow_spec.rb +++ /dev/null @@ -1,72 +0,0 @@ -# Copyright 2010 Google Inc. -# -# Licensed 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' - -require 'oauth' -require 'google/api_client/auth/oauth_1' -require 'addressable/uri' - -describe Google::APIClient::OAuth1, 'configured for use with Buzz' do - before do - @oauth = Google::APIClient::OAuth1.new(:service => :buzz) - end - - it 'should not have the default configuration' do - @oauth.authorization_endpoint_uri.should_not == - Google::APIClient::OAuth1::DEFAULTS[:authorization_uri] - @oauth.scopes.should_not == - Google::APIClient::OAuth1::DEFAULTS[:scopes] - end - - it 'should have the correct authorization_uri' do - @oauth.authorization_endpoint_uri.should == - 'https://www.google.com/buzz/api/auth/OAuthAuthorizeToken' - end - - it 'should have the correct scope' do - @oauth.scopes.should include('https://www.googleapis.com/auth/buzz') - end - - it 'should be able to get a request token' do - @oauth.request_token.token.should =~ /^[a-zA-Z0-9\/\-\_\+]+$/ - @oauth.request_token.secret.should =~ /^[a-zA-Z0-9\/\-\_\+]+$/ - end - - it 'should issue only a single request token' do - @oauth.request_token.token.should == @oauth.request_token.token - @oauth.request_token.secret.should == @oauth.request_token.secret - end - - it 'should build the correct authorization URI' do - icon_uri = 'http://www.google.com/images/icons/feature/padlock-g128.png' - uri = @oauth.authorization_uri( - :domain => @oauth.consumer_key, - :iconUrl => icon_uri, - :scope => @oauth.scopes.join(' ') - ) - uri.should =~ - /^https:\/\/www.google.com\/buzz\/api\/auth\/OAuthAuthorizeToken/ - Addressable::URI.unencode(uri).should =~ - Regexp.new(Regexp.escape(@oauth.request_token.token)) - Addressable::URI.unencode(uri).should =~ - Regexp.new(Regexp.escape(icon_uri)) - for scope in @oauth.scopes - Addressable::URI.unencode(uri).should =~ - Regexp.new(Regexp.escape(scope)) - end - end - - # Not much we can do to test any further into the OAuth flow -end diff --git a/spec/google/api_client/transport/http_transport_slow_spec.rb b/spec/google/api_client/transport/http_transport_slow_spec.rb deleted file mode 100644 index 5d48c2ae4..000000000 --- a/spec/google/api_client/transport/http_transport_slow_spec.rb +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright 2010 Google Inc. -# -# Licensed 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' - -require 'net/http' -require 'net/https' -require 'google/api_client/transport/http_transport' - -class AlwaysFail - def initialize(*args) - raise IOError, "This would never work." - end -end - -Google::APIClient::HTTPTransport::METHOD_MAPPING[:fail] = AlwaysFail - -describe Google::APIClient::HTTPTransport, 'in the default configuration' do - before do - @http = Google::APIClient::HTTPTransport.new - end - - it 'should send a GET request' do - request = @http.build_request(:get, "http://www.google.com/") - response = @http.send_request(request) - status, headers, body = response - status.should >= 100 - body.size.should > 0 - headers.size.should > 0 - end - - it 'should send a GET request using SSL' do - request = @http.build_request(:get, "https://www.google.com/") - response = @http.send_request(request) - status, headers, body = response - status.should >= 100 - body.size.should > 0 - headers.size.should > 0 - end - - it 'should send a POST request' do - request = @http.build_request( - :post, "http://www.google.com/", :body => "A Body." - ) - response = @http.send_request(request) - status, headers, body = response - status.should >= 100 - body.size.should > 0 - headers.size.should > 0 - end - - it 'should send a PUT request' do - request = @http.build_request( - :put, "http://www.google.com/", :body => "A Body." - ) - response = @http.send_request(request) - status, headers, body = response - status.should >= 100 - body.size.should > 0 - headers.size.should > 0 - end - - it 'should send a DELETE request' do - request = @http.build_request(:delete, "http://www.google.com/") - response = @http.send_request(request) - status, headers, body = response - status.should >= 100 - body.size.should > 0 - headers.size.should > 0 - end - - it 'should fail to send a FAIL request' do - (lambda do - request = @http.build_request(:fail, "http://www.google.com/") - response = @http.send_request(request) - end).should raise_error(IOError) - end - - it 'should fail to send a BOGUS request' do - (lambda do - response = @http.send_request( - ["BOGUS", "http://www.google.com/", {}, [""]] - ) - end).should raise_error(ArgumentError) - end - - it 'should fail to connect to a non-addressable URI' do - (lambda do - request = @http.build_request(:get, "bogus://www.google.com/") - response = @http.send_request(request) - end).should raise_error(ArgumentError) - end -end diff --git a/spec/google/api_client/transport/http_transport_spec.rb b/spec/google/api_client/transport/http_transport_spec.rb deleted file mode 100644 index e970e8196..000000000 --- a/spec/google/api_client/transport/http_transport_spec.rb +++ /dev/null @@ -1,102 +0,0 @@ -# Copyright 2010 Google Inc. -# -# Licensed 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' - -require 'net/http' -require 'net/https' -require 'google/api_client/transport/http_transport' - -def assemble_body_string(body) - body_string = "" - body.each do |chunk| - body_string += chunk - end - return body_string -end - -describe Google::APIClient::HTTPTransport, 'in the default configuration' do - before do - @http = Google::APIClient::HTTPTransport.new - end - - it 'should build a valid GET request' do - method, uri, headers, body = - @http.build_request(:get, "http://www.example.com/") - body_string = assemble_body_string(body) - method.should == "GET" - uri.should === "http://www.example.com/" - headers.keys.should_not include("Content-Length") - body_string.should == "" - end - - it 'should build a valid POST request' do - method, uri, headers, body = @http.build_request( - :post, "http://www.example.com/", :body => "A body." - ) - body_string = assemble_body_string(body) - method.should == "POST" - uri.should === "http://www.example.com/" - headers["Content-Length"].should == "7" - body_string.should == "A body." - end - - it 'should build a valid PUT request' do - method, uri, headers, body = @http.build_request( - :put, "http://www.example.com/", :body => "A body." - ) - body_string = assemble_body_string(body) - method.should == "PUT" - uri.should === "http://www.example.com/" - headers["Content-Length"].should == "7" - body_string.should == "A body." - end - - it 'should build a valid DELETE request' do - method, uri, headers, body = - @http.build_request(:delete, "http://www.example.com/") - body_string = assemble_body_string(body) - method.should == "DELETE" - uri.should === "http://www.example.com/" - headers.keys.should_not include("Content-Length") - body_string.should == "" - end - - it 'should not build a BOGUS request' do - (lambda do - @http.build_request(:bogus, "http://www.example.com/") - end).should raise_error(ArgumentError) - end -end - -describe Google::APIClient::HTTPTransport, - 'with a certificate store and connection pool' do - before do - @http = Google::APIClient::HTTPTransport.new( - :cert_store => OpenSSL::X509::Store.new, - :connection_pool => { - "http://www.example.com" => Net::HTTP.new("www.example.com", 80) - } - ) - end - - it 'should have the correct certificate store' do - # TODO(bobaman) Write a real test - @http.cert_store.should_not == nil - end - - it 'should have the correct connection pool' do - @http.connection_pool.keys.should include("http://www.example.com") - end -end