require File.dirname(__FILE__) + '/test_helper.rb' class NetHTTPClientTest < Test::Unit::TestCase def setup @consumer = OAuth::Consumer.new('consumer_key_86cad9', '5888bf0345e5d237') @token = OAuth::Token.new('token_411a7f', '3196ffd991c8ebdb') @request_uri = URI.parse('http://example.com/test?key=value') @request_parameters = { 'key' => 'value' } @nonce = 225579211881198842005988698334675835446 @timestamp = "1199645624" @http = Net::HTTP.new(@request_uri.host, @request_uri.port) end def test_that_using_auth_headers_on_get_requests_works request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s) request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp}) assert_equal 'GET', request.method assert_equal '/test?key=value', request.path assert_equal "OAuth oauth_nonce=\"225579211881198842005988698334675835446\", oauth_signature_method=\"HMAC-SHA1\", oauth_token=\"token_411a7f\", oauth_timestamp=\"1199645624\", oauth_consumer_key=\"consumer_key_86cad9\", oauth_signature=\"1oO2izFav1GP4kEH2EskwXkCRFg%3D\", oauth_version=\"1.0\"".split(', ').sort, request['authorization'].split(', ').sort end def test_that_using_auth_headers_on_post_requests_works request = Net::HTTP::Post.new(@request_uri.path) request.set_form_data( @request_parameters ) request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp}) assert_equal 'POST', request.method assert_equal '/test', request.path assert_equal 'key=value', request.body assert_equal "OAuth oauth_nonce=\"225579211881198842005988698334675835446\", oauth_signature_method=\"HMAC-SHA1\", oauth_token=\"token_411a7f\", oauth_timestamp=\"1199645624\", oauth_consumer_key=\"consumer_key_86cad9\", oauth_signature=\"26g7wHTtNO6ZWJaLltcueppHYiI%3D\", oauth_version=\"1.0\"".split(', ').sort, request['authorization'].split(', ').sort end def test_that_version_is_added_to_existing_user_agent request = Net::HTTP::Post.new(@request_uri.path) request['User-Agent'] = "MyApp" request.set_form_data( @request_parameters ) request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp}) assert_equal "MyApp (OAuth gem v#{OAuth::VERSION})", request['User-Agent'] end def test_that_version_is_set_when_no_user_agent request = Net::HTTP::Post.new(@request_uri.path) request.set_form_data( @request_parameters ) request.oauth!(@http, @consumer, @token, {:nonce => @nonce, :timestamp => @timestamp}) assert_equal "OAuth gem v#{OAuth::VERSION}", request['User-Agent'] end def test_that_using_get_params_works request = Net::HTTP::Get.new(@request_uri.path + "?" + request_parameters_to_s) request.oauth!(@http, @consumer, @token, {:scheme => 'query_string', :nonce => @nonce, :timestamp => @timestamp}) assert_equal 'GET', request.method uri = URI.parse(request.path) assert_equal '/test', uri.path assert_equal nil, uri.fragment assert_equal "key=value&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=1oO2izFav1GP4kEH2EskwXkCRFg%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0", uri.query.split("&").sort.join("&") assert_equal nil, request['authorization'] end def test_that_using_post_params_works request = Net::HTTP::Post.new(@request_uri.path) request.set_form_data( @request_parameters ) request.oauth!(@http, @consumer, @token, {:scheme => 'body', :nonce => @nonce, :timestamp => @timestamp}) assert_equal 'POST', request.method assert_equal '/test', request.path assert_equal "key=value&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=26g7wHTtNO6ZWJaLltcueppHYiI%3d&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0", request.body.split("&").sort.join("&") assert_equal nil, request['authorization'] end def test_that_using_post_with_uri_params_works request = Net::HTTP::Post.new(@request_uri.path + "?" + request_parameters_to_s) request.oauth!(@http, @consumer, @token, {:scheme => 'query_string', :nonce => @nonce, :timestamp => @timestamp}) assert_equal 'POST', request.method uri = URI.parse(request.path) assert_equal '/test', uri.path assert_equal nil, uri.fragment assert_equal "key=value&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=26g7wHTtNO6ZWJaLltcueppHYiI%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0", uri.query.split("&").sort.join('&') assert_equal nil, request.body assert_equal nil, request['authorization'] end def test_that_using_post_with_uri_and_form_params_works request = Net::HTTP::Post.new(@request_uri.path + "?" + request_parameters_to_s) request.set_form_data( { 'key2' => 'value2' } ) request.oauth!(@http, @consumer, @token, {:scheme => :query_string, :nonce => @nonce, :timestamp => @timestamp}) assert_equal 'POST', request.method uri = URI.parse(request.path) assert_equal '/test', uri.path assert_equal nil, uri.fragment assert_equal "key=value&oauth_consumer_key=consumer_key_86cad9&oauth_nonce=225579211881198842005988698334675835446&oauth_signature=4kSU8Zd1blWo3W6qJH7eaRTMkg0%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1199645624&oauth_token=token_411a7f&oauth_version=1.0", uri.query.split("&").sort.join('&') assert_equal "key2=value2", request.body assert_equal nil, request['authorization'] end def test_example_from_specs consumer=OAuth::Consumer.new("dpf43f3p2l4k3l03","kd94hf93k423kf44") token = OAuth::Token.new('nnch734d00sl2jdk', 'pfkkdhi9sl3r4s00') request_uri = URI.parse('http://photos.example.net/photos?file=vacation.jpg&size=original') nonce = 'kllo9940pd9333jh' timestamp = "1191242096" http = Net::HTTP.new(request_uri.host, request_uri.port) request = Net::HTTP::Get.new(request_uri.path + "?" + request_uri.query) signature_base_string=request.signature_base_string(http, consumer, token, {:nonce => nonce, :timestamp => timestamp}) assert_equal 'GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal',signature_base_string # request = Net::HTTP::Get.new(request_uri.path + "?" + request_uri.query) request.oauth!(http, consumer, token, {:nonce => nonce, :timestamp => timestamp,:realm=>"http://photos.example.net/"}) assert_equal 'GET', request.method assert_equal 'OAuth realm="http://photos.example.net/", oauth_nonce="kllo9940pd9333jh", oauth_signature_method="HMAC-SHA1", oauth_token="nnch734d00sl2jdk", oauth_timestamp="1191242096", oauth_consumer_key="dpf43f3p2l4k3l03", oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D", oauth_version="1.0"'.split(', ').sort, request['authorization'].split(', ').sort end def test_step_by_step_token_request consumer=OAuth::Consumer.new( "key", "secret") request_uri = URI.parse('http://term.ie/oauth/example/request_token.php') nonce = rand(2**128).to_s timestamp = Time.now.to_i.to_s http = Net::HTTP.new(request_uri.host, request_uri.port) request = Net::HTTP::Get.new(request_uri.path) signature_base_string=request.signature_base_string(http, consumer, nil, {:scheme=>:query_string,:nonce => nonce, :timestamp => timestamp}) assert_equal "GET&http%3A%2F%2Fterm.ie%2Foauth%2Fexample%2Frequest_token.php&oauth_consumer_key%3Dkey%26oauth_nonce%3D#{nonce}%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D#{timestamp}%26oauth_version%3D1.0",signature_base_string # request = Net::HTTP::Get.new(request_uri.path) request.oauth!(http, consumer, nil, {:scheme=>:query_string,:nonce => nonce, :timestamp => timestamp}) assert_equal 'GET', request.method assert_nil request.body assert_nil request['authorization'] # assert_equal 'OAuth oauth_nonce="kllo9940pd9333jh", oauth_signature_method="HMAC-SHA1", oauth_token="", oauth_timestamp="'+timestamp+'", oauth_consumer_key="key", oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D", oauth_version="1.0"', request['authorization'] response=http.request(request) assert_equal "200",response.code # assert_equal request['authorization'],response.body assert_equal "oauth_token=requestkey&oauth_token_secret=requestsecret",response.body end def test_that_put_bodies_not_signed request = Net::HTTP::Put.new(@request_uri.path) request.body = "baz" request["Content-Type"] = "application/xml" signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp }) assert_equal "PUT&http%3A%2F%2Fexample.com%2Ftest&oauth_consumer_key%3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0", signature_base_string end def test_that_put_bodies_not_signed_even_if_form_urlencoded request = Net::HTTP::Put.new(@request_uri.path) request.set_form_data( { 'key2' => 'value2' } ) signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp }) assert_equal "PUT&http%3A%2F%2Fexample.com%2Ftest&oauth_consumer_key%3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0", signature_base_string end def test_that_post_bodies_signed_if_form_urlencoded request = Net::HTTP::Post.new(@request_uri.path) request.set_form_data( { 'key2' => 'value2' } ) signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp }) assert_equal "POST&http%3A%2F%2Fexample.com%2Ftest&key2%3Dvalue2%26oauth_consumer_key%3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0", signature_base_string end def test_that_post_bodies_not_signed_if_other_content_type request = Net::HTTP::Post.new(@request_uri.path) request.body = "baz" request["Content-Type"] = "application/xml" signature_base_string=request.signature_base_string(@http, @consumer, nil, { :nonce => @nonce, :timestamp => @timestamp }) assert_equal "POST&http%3A%2F%2Fexample.com%2Ftest&oauth_consumer_key%3Dconsumer_key_86cad9%26oauth_nonce%3D225579211881198842005988698334675835446%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1199645624%26oauth_version%3D1.0", signature_base_string end protected def request_parameters_to_s @request_parameters.map { |k,v| "#{k}=#{v}" }.join("&") end end