summaryrefslogtreecommitdiff
path: root/test/rubygems/test_gem_request.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/rubygems/test_gem_request.rb')
-rw-r--r--test/rubygems/test_gem_request.rb69
1 files changed, 69 insertions, 0 deletions
diff --git a/test/rubygems/test_gem_request.rb b/test/rubygems/test_gem_request.rb
index 04ff50786f..bcbbcf1f99 100644
--- a/test/rubygems/test_gem_request.rb
+++ b/test/rubygems/test_gem_request.rb
@@ -1,9 +1,16 @@
require 'rubygems/test_case'
require 'rubygems/request'
require 'ostruct'
+require 'base64'
class TestGemRequest < Gem::TestCase
+ CA_CERT_FILE = cert_path 'ca'
+ CHILD_CERT = load_cert 'child'
+ PUBLIC_CERT = load_cert 'public'
+ PUBLIC_CERT_FILE = cert_path 'public'
+ SSL_CERT = load_cert 'ssl'
+
def setup
@proxies = %w[http_proxy HTTP_PROXY http_proxy_user HTTP_PROXY_USER http_proxy_pass HTTP_PROXY_PASS no_proxy NO_PROXY]
@old_proxies = @proxies.map {|k| ENV[k] }
@@ -62,6 +69,44 @@ class TestGemRequest < Gem::TestCase
assert_equal URI(@proxy_uri), proxy
end
+ def test_configure_connection_for_https
+ connection = Net::HTTP.new 'localhost', 443
+
+ request = Gem::Request.new URI('https://example'), nil, nil, nil
+
+ def request.add_rubygems_trusted_certs store
+ store.add_cert TestGemRequest::PUBLIC_CERT
+ end
+
+ request.configure_connection_for_https connection
+
+ cert_store = connection.cert_store
+
+ assert cert_store.verify CHILD_CERT
+ end
+
+ def test_configure_connection_for_https_ssl_ca_cert
+ ssl_ca_cert, Gem.configuration.ssl_ca_cert =
+ Gem.configuration.ssl_ca_cert, CA_CERT_FILE
+
+ connection = Net::HTTP.new 'localhost', 443
+
+ request = Gem::Request.new URI('https://example'), nil, nil, nil
+
+ def request.add_rubygems_trusted_certs store
+ store.add_cert TestGemRequest::PUBLIC_CERT
+ end
+
+ request.configure_connection_for_https connection
+
+ cert_store = connection.cert_store
+
+ assert cert_store.verify CHILD_CERT
+ assert cert_store.verify SSL_CERT
+ ensure
+ Gem.configuration.ssl_ca_cert = ssl_ca_cert
+ end
+
def test_get_proxy_from_env_fallback
ENV['http_proxy'] = @proxy_uri
@@ -124,6 +169,30 @@ class TestGemRequest < Gem::TestCase
assert_equal :junk, response.body
end
+ def test_fetch_basic_auth
+ uri = URI.parse "https://user:pass@example.rubygems/specs.#{Gem.marshal_version}"
+ @request = Gem::Request.new(uri, Net::HTTP::Get, nil, nil)
+ conn = util_stub_connection_for :body => :junk, :code => 200
+
+ @request.fetch
+
+ auth_header = conn.payload['Authorization']
+
+ assert_equal "Basic #{Base64.encode64('user:pass')}".strip, auth_header
+ end
+
+ def test_fetch_basic_auth_encoded
+ uri = URI.parse "https://user:%7BDEScede%7Dpass@example.rubygems/specs.#{Gem.marshal_version}"
+ @request = Gem::Request.new(uri, Net::HTTP::Get, nil, nil)
+ conn = util_stub_connection_for :body => :junk, :code => 200
+
+ @request.fetch
+
+ auth_header = conn.payload['Authorization']
+
+ assert_equal "Basic #{Base64.encode64('user:{DEScede}pass')}".strip, auth_header
+ end
+
def test_fetch_head
uri = URI.parse "#{@gem_repo}/specs.#{Gem.marshal_version}"
@request = Gem::Request.new(uri, Net::HTTP::Get, nil, nil)