Пример #1
0
 def testProxyInfoFromEnvironmentVar(self):
   """Tests ProxyInfoFromEnvironmentVar for various cases."""
   valid_variables = ['http_proxy', 'https_proxy']
   if not system_util.IS_WINDOWS:
     # Dynamically set Windows environment variables are case-insensitive.
     valid_variables.append('HTTPS_PROXY')
   # Clear any existing environment variables for the duration of the test.
   clear_dict = {}
   for key in valid_variables:
     clear_dict[key] = None
   with SetEnvironmentForTest(clear_dict):
     for env_var in valid_variables:
       for url_string in ['hostname', 'http://hostname', 'https://hostname']:
         with SetEnvironmentForTest({env_var: url_string}):
           self._AssertProxyInfosEqual(
               boto_util.ProxyInfoFromEnvironmentVar(env_var),
               httplib2.ProxyInfo(
                   httplib2.socks.PROXY_TYPE_HTTP, 'hostname',
                   443 if env_var.lower().startswith('https') else 80))
           # Shouldn't populate info for other variables
           for other_env_var in valid_variables:
             if other_env_var == env_var: continue
             self._AssertProxyInfosEqual(
                 boto_util.ProxyInfoFromEnvironmentVar(other_env_var),
                 httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, None, 0))
       for url_string in ['1.2.3.4:50', 'http://1.2.3.4:50',
                          'https://1.2.3.4:50']:
         with SetEnvironmentForTest({env_var: url_string}):
           self._AssertProxyInfosEqual(
               boto_util.ProxyInfoFromEnvironmentVar(env_var),
               httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, '1.2.3.4',
                                  50))
       for url_string in ['foo:[email protected]:50', 'http://*****:*****@1.2.3.4:50',
                          'https://*****:*****@1.2.3.4:50']:
         with SetEnvironmentForTest({env_var: url_string}):
           self._AssertProxyInfosEqual(
               boto_util.ProxyInfoFromEnvironmentVar(env_var),
               httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP,
                                  '1.2.3.4', 50, proxy_user='******',
                                  proxy_pass='******'))
       for url_string in ['[email protected]:50', 'http://[email protected]:50',
                          'https://[email protected]:50']:
         with SetEnvironmentForTest({env_var: url_string}):
           self._AssertProxyInfosEqual(
               boto_util.ProxyInfoFromEnvironmentVar(env_var),
               httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, '1.2.3.4',
                                  50, proxy_pass='******'))
     for env_var in ['proxy', 'noproxy', 'garbage']:
       for url_string in ['1.2.3.4:50', 'http://1.2.3.4:50']:
         with SetEnvironmentForTest({env_var: url_string}):
           self._AssertProxyInfosEqual(
               boto_util.ProxyInfoFromEnvironmentVar(env_var),
               httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, None, 0))
Пример #2
0
def _CheckAndWarnForProxyDifferences():
    # If there are both boto config and environment variable config present for
    # proxies, unset the environment variable and warn if it differs.
    boto_port = boto.config.getint('Boto', 'proxy_port', 0)
    if boto.config.get('Boto', 'proxy', None) or boto_port:
        for proxy_env_var in ['http_proxy', 'https_proxy', 'HTTPS_PROXY']:
            if proxy_env_var in os.environ and os.environ[proxy_env_var]:
                differing_values = []
                proxy_info = boto_util.ProxyInfoFromEnvironmentVar(
                    proxy_env_var)
                if proxy_info.proxy_host != boto.config.get(
                        'Boto', 'proxy', None):
                    differing_values.append(
                        'Boto proxy host: "%s" differs from %s proxy host: "%s"'
                        % (boto.config.get('Boto', 'proxy', None),
                           proxy_env_var, proxy_info.proxy_host))
                if (proxy_info.proxy_user != boto.config.get(
                        'Boto', 'proxy_user', None)):
                    differing_values.append(
                        'Boto proxy user: "******" differs from %s proxy user: "******"'
                        % (boto.config.get('Boto', 'proxy_user', None),
                           proxy_env_var, proxy_info.proxy_user))
                if (proxy_info.proxy_pass != boto.config.get(
                        'Boto', 'proxy_pass', None)):
                    differing_values.append(
                        'Boto proxy password differs from %s proxy password' %
                        proxy_env_var)
                # Only compare ports if at least one is present, since the
                # boto logic for selecting default ports has not yet executed.
                if ((proxy_info.proxy_port or boto_port)
                        and proxy_info.proxy_port != boto_port):
                    differing_values.append(
                        'Boto proxy port: "%s" differs from %s proxy port: "%s"'
                        % (boto_port, proxy_env_var, proxy_info.proxy_port))
                if differing_values:
                    sys.stderr.write('\n'.join(
                        textwrap.wrap(
                            'WARNING: Proxy configuration is present in both the %s '
                            'environment variable and boto configuration, but '
                            'configuration differs. boto configuration proxy values will '
                            'be used. Differences detected:' % proxy_env_var)))
                    sys.stderr.write('\n%s\n' % '\n'.join(differing_values))
                # Regardless of whether the proxy configuration values matched,
                # delete the environment variable so as not to confuse boto.
                del os.environ[proxy_env_var]