mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* The warnings are shown by Thread.report_on_exception defaulting to true. [Feature #14143] [ruby-core:83979] * Improves tests by narrowing down the scope where an exception is expected. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
require 'rubygems/test_case'
 | 
						|
require 'rubygems/request'
 | 
						|
require 'timeout'
 | 
						|
 | 
						|
class TestGemRequestConnectionPool < Gem::TestCase
 | 
						|
  class FakeHttp
 | 
						|
    def initialize *args
 | 
						|
    end
 | 
						|
 | 
						|
    def start
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def setup
 | 
						|
    super
 | 
						|
    @old_client = Gem::Request::ConnectionPools.client
 | 
						|
    Gem::Request::ConnectionPools.client = FakeHttp
 | 
						|
 | 
						|
    @proxy = URI 'http://proxy.example'
 | 
						|
  end
 | 
						|
 | 
						|
  def teardown
 | 
						|
    Gem::Request::ConnectionPools.client = @old_client
 | 
						|
    super
 | 
						|
  end
 | 
						|
 | 
						|
  def test_checkout_same_connection
 | 
						|
    uri = URI.parse('http://example/some_endpoint')
 | 
						|
 | 
						|
    pools = Gem::Request::ConnectionPools.new nil, []
 | 
						|
    pool = pools.pool_for uri
 | 
						|
    conn = pool.checkout
 | 
						|
    pool.checkin conn
 | 
						|
 | 
						|
    assert_equal conn, pool.checkout
 | 
						|
  end
 | 
						|
 | 
						|
  def test_to_proxy_eh
 | 
						|
    pools = Gem::Request::ConnectionPools.new nil, []
 | 
						|
 | 
						|
    env_no_proxy = %w[
 | 
						|
      1.no-proxy.example
 | 
						|
      2.no-proxy.example
 | 
						|
    ]
 | 
						|
 | 
						|
    no_proxy = pools.send :no_proxy?, '2.no-proxy.example', env_no_proxy
 | 
						|
 | 
						|
    assert no_proxy, 'match'
 | 
						|
 | 
						|
    no_proxy = pools.send :no_proxy?, 'proxy.example', env_no_proxy
 | 
						|
 | 
						|
    refute no_proxy, 'mismatch'
 | 
						|
  end
 | 
						|
 | 
						|
  def test_to_proxy_eh_wildcard
 | 
						|
    pools = Gem::Request::ConnectionPools.new nil, []
 | 
						|
 | 
						|
    env_no_proxy = %w[
 | 
						|
      .no-proxy.example
 | 
						|
    ]
 | 
						|
 | 
						|
    no_proxy = pools.send :no_proxy?, '2.no-proxy.example', env_no_proxy
 | 
						|
 | 
						|
    assert no_proxy, 'wildcard matching subdomain'
 | 
						|
 | 
						|
    no_proxy = pools.send :no_proxy?, 'no-proxy.example', env_no_proxy
 | 
						|
 | 
						|
    assert no_proxy, 'wildcard matching dotless domain'
 | 
						|
 | 
						|
    no_proxy = pools.send :no_proxy?, 'proxy.example', env_no_proxy
 | 
						|
 | 
						|
    refute no_proxy, 'wildcard mismatch'
 | 
						|
  end
 | 
						|
 | 
						|
  def test_net_http_args
 | 
						|
    pools = Gem::Request::ConnectionPools.new nil, []
 | 
						|
 | 
						|
    net_http_args = pools.send :net_http_args, URI('http://example'), nil
 | 
						|
 | 
						|
    assert_equal ['example', 80], net_http_args
 | 
						|
  end
 | 
						|
 | 
						|
  def test_net_http_args_ipv6
 | 
						|
    pools = Gem::Request::ConnectionPools.new nil, []
 | 
						|
 | 
						|
    net_http_args = pools.send :net_http_args, URI('http://[::1]'), nil
 | 
						|
 | 
						|
    expected_host = RUBY_VERSION >= "1.9.3" ? "::1" : "[::1]"
 | 
						|
    assert_equal [expected_host, 80], net_http_args
 | 
						|
  end
 | 
						|
 | 
						|
  def test_net_http_args_proxy
 | 
						|
    pools = Gem::Request::ConnectionPools.new nil, []
 | 
						|
 | 
						|
    net_http_args = pools.send :net_http_args, URI('http://example'), @proxy
 | 
						|
 | 
						|
    assert_equal ['example', 80, 'proxy.example', 80, nil, nil], net_http_args
 | 
						|
  end
 | 
						|
 | 
						|
  def test_net_http_args_no_proxy
 | 
						|
    orig_no_proxy, ENV['no_proxy'] = ENV['no_proxy'], 'example'
 | 
						|
 | 
						|
    pools = Gem::Request::ConnectionPools.new nil, []
 | 
						|
 | 
						|
    net_http_args = pools.send :net_http_args, URI('http://example'), @proxy
 | 
						|
 | 
						|
    assert_equal ['example', 80, nil, nil], net_http_args
 | 
						|
 | 
						|
  ensure
 | 
						|
    ENV['no_proxy'] = orig_no_proxy
 | 
						|
  end
 | 
						|
 | 
						|
  def test_thread_waits_for_connection
 | 
						|
    uri = URI.parse('http://example/some_endpoint')
 | 
						|
    pools = Gem::Request::ConnectionPools.new nil, []
 | 
						|
    pool  = pools.pool_for uri
 | 
						|
 | 
						|
    pool.checkout
 | 
						|
 | 
						|
    Thread.new {
 | 
						|
      assert_raises(Timeout::Error) do
 | 
						|
        Timeout.timeout(1) do
 | 
						|
          pool.checkout
 | 
						|
        end
 | 
						|
      end
 | 
						|
    }.join
 | 
						|
  end
 | 
						|
end
 |