text: '''Warning: these tests modify os.environ global state.
  Each test must be run in separate process.
  Must use pytest --forked or similar technique.
  '''
  import httplib2
  import mock
  import os
  import socket
  import tests
  
  
  def test_from_url():
      pi = httplib2.proxy_info_from_url('http://myproxy.example.com')
      assert pi.proxy_host == 'myproxy.example.com'
      assert pi.proxy_port == 80
      assert pi.proxy_user is None
  
  
  def test_from_url_ident():
      pi = httplib2.proxy_info_from_url('http://zoidberg:fish@someproxy:99')
      assert pi.proxy_host == 'someproxy'
      assert pi.proxy_port == 99
      assert pi.proxy_user == 'zoidberg'
      assert pi.proxy_pass == 'fish'
  
  
  def test_from_env():
      os.environ['http_proxy'] = 'http://myproxy.example.com:8080'
      pi = httplib2.proxy_info_from_environment()
      assert pi.proxy_host == 'myproxy.example.com'
      assert pi.proxy_port == 8080
  
  
  def test_from_env_https():
      os.environ['http_proxy'] = 'http://myproxy.example.com:80'
      os.environ['https_proxy'] = 'http://myproxy.example.com:81'
      pi = httplib2.proxy_info_from_environment('https')
      assert pi.proxy_host == 'myproxy.example.com'
      assert pi.proxy_port == 81
  
  
  def test_from_env_none():
      os.environ.clear()
      pi = httplib2.proxy_info_from_environment()
      assert pi is None
  
  
  def test_applies_to():
      os.environ['http_proxy'] = 'http://myproxy.example.com:80'
      os.environ['https_proxy'] = 'http://myproxy.example.com:81'
      os.environ['no_proxy'] = 'localhost,example.com,.wildcard'
      pi = httplib2.proxy_info_from_environment()
      assert not pi.applies_to('localhost')
      assert pi.applies_to('www.google.com')
      assert pi.applies_to('prefixlocalhost')
      assert pi.applies_to('www.example.com')
      assert pi.applies_to('sub.example.com')
      assert not pi.applies_to('sub.wildcard')
      assert not pi.applies_to('pub.sub.wildcard')
  
  
  def test_noproxy_trailing_comma():
      os.environ['http_proxy'] = 'http://myproxy.example.com:80'
      os.environ['no_proxy'] = 'localhost,other.host,'
      pi = httplib2.proxy_info_from_environment()
      assert not pi.applies_to('localhost')
      assert not pi.applies_to('other.host')
      assert pi.applies_to('example.domain')
  
  
  def test_noproxy_star():
      os.environ['http_proxy'] = 'http://myproxy.example.com:80'
      os.environ['NO_PROXY'] = '*'
      pi = httplib2.proxy_info_from_environment()
      for host in ('localhost', '169.254.38.192', 'www.google.com'):
          assert not pi.applies_to(host)
  
  
  def test_headers():
      headers = {'key0': 'val0', 'key1': 'val1'}
      pi = httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, 'localhost', 1234, proxy_headers=headers)
      assert pi.proxy_headers == headers
  
  
  def test_github_100_socks_basestring():
      # https://github.com/httplib2/httplib2/pull/100
      # NameError: name 'basestring' is not defined
      # TODO: replace invalid address with dummy local server
      http = httplib2.Http(proxy_info=httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, '255.255.255.255', 8001))
      with tests.assert_raises(httplib2.ServerNotFoundError):
          with mock.patch('socket.socket.connect', side_effect=socket.gaierror):
              http.request('http://255.255.255.255/', 'GET')
  