diff options
author | Davide Guerri <davide.guerri@hp.com> | 2013-11-25 10:42:56 +0000 |
---|---|---|
committer | Davide Guerri <davide.guerri@hp.com> | 2013-12-10 12:12:28 +0000 |
commit | 716b4e722c98396dc1477a04120eb0fedf388799 (patch) | |
tree | ab6e0ebde0c7b3972d72445f0a2dd6ec04751bcf /tests | |
parent | 04e0cb27839cec474bce383d4364fd76dcb6e4b2 (diff) | |
download | python-swiftclient-716b4e722c98396dc1477a04120eb0fedf388799.tar.gz |
Enable usage of proxies defined in environment (http(s)_proxy).
As far as proxies usage is concerned, keystone-client API and swift-client API behave differently because the former uses python Request library while the latter uses raw httplib. As a result, Keystone authentication honors environment variables http_proxy, https_proxy and no_proxy while Swift doesn't.
This patch, which code is mainly borrowed from Python Requests, makes Swift
data connections and Swift authentication connections behaving homogeneously.
Change-Id: Ic8a0089c35c458d7ed96e572e22429014298fe4c
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_utils.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/tests/test_utils.py b/tests/test_utils.py index b47d231..e64d29d 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -14,6 +14,7 @@ # limitations under the License. import testtools +import os from swiftclient import utils as u @@ -117,3 +118,82 @@ class TestPrtBytes(testtools.TestCase): def test_overflow(self): bytes_ = 2 ** 90 self.assertEquals('1024Y', u.prt_bytes(bytes_, True).lstrip()) + + +class TestGetEnvironProxy(testtools.TestCase): + + ENV_VARS = ('http_proxy', 'https_proxy', 'no_proxy', + 'HTTP_PROXY', 'HTTPS_PROXY', 'NO_PROXY') + + def setUp(self): + self.proxy_dict = {} + super(TestGetEnvironProxy, self).setUp() + for proxy_s in TestGetEnvironProxy.ENV_VARS: + # Save old env value + self.proxy_dict[proxy_s] = os.environ.get(proxy_s, None) + + def tearDown(self): + super(TestGetEnvironProxy, self).tearDown() + for proxy_s in TestGetEnvironProxy.ENV_VARS: + if self.proxy_dict[proxy_s]: + os.environ[proxy_s] = self.proxy_dict[proxy_s] + elif os.environ.get(proxy_s): + del os.environ[proxy_s] + + def setup_env(self, new_env={}): + for proxy_s in TestGetEnvironProxy.ENV_VARS: + # Set new env value + if new_env.get(proxy_s): + os.environ[proxy_s] = new_env.get(proxy_s) + elif os.environ.get(proxy_s): + del os.environ[proxy_s] + + def test_http_proxy(self): + self.setup_env({'http_proxy': 'http://proxy.tests.com:8080'}) + proxy_dict = u.get_environ_proxies('www.tests.com:81') + self.assertEquals(proxy_dict['http'], 'http://proxy.tests.com:8080') + self.assertEquals(proxy_dict.get('https'), None) + self.assertEquals(len(proxy_dict), 1) + self.setup_env({'HTTP_PROXY': 'http://proxy.tests.com:8080'}) + proxy_dict = u.get_environ_proxies('www.tests.com:81') + self.assertEquals(proxy_dict['http'], 'http://proxy.tests.com:8080') + self.assertEquals(proxy_dict.get('https'), None) + self.assertEquals(len(proxy_dict), 1) + + def test_https_proxy(self): + self.setup_env({'https_proxy': 'http://proxy.tests.com:8080'}) + proxy_dict = u.get_environ_proxies('www.tests.com:81') + self.assertEquals(proxy_dict['https'], 'http://proxy.tests.com:8080') + self.assertEquals(proxy_dict.get('http'), None) + self.assertEquals(len(proxy_dict), 1) + self.setup_env({'HTTPS_PROXY': 'http://proxy.tests.com:8080'}) + proxy_dict = u.get_environ_proxies('www.tests.com:81') + self.assertEquals(proxy_dict['https'], 'http://proxy.tests.com:8080') + self.assertEquals(proxy_dict.get('http'), None) + self.assertEquals(len(proxy_dict), 1) + + def test_http_https_proxy(self): + self.setup_env({'http_proxy': 'http://proxy1.tests.com:8081', + 'https_proxy': 'http://proxy2.tests.com:8082'}) + proxy_dict = u.get_environ_proxies('www.tests.com:81') + self.assertEquals(proxy_dict['http'], 'http://proxy1.tests.com:8081') + self.assertEquals(proxy_dict['https'], 'http://proxy2.tests.com:8082') + self.assertEquals(len(proxy_dict), 2) + self.setup_env({'http_proxy': 'http://proxy1.tests.com:8081', + 'HTTPS_PROXY': 'http://proxy2.tests.com:8082'}) + proxy_dict = u.get_environ_proxies('www.tests.com:81') + self.assertEquals(proxy_dict['http'], 'http://proxy1.tests.com:8081') + self.assertEquals(proxy_dict['https'], 'http://proxy2.tests.com:8082') + self.assertEquals(len(proxy_dict), 2) + + def test_proxy_exclusion(self): + self.setup_env({'http_proxy': 'http://proxy1.tests.com:8081', + 'https_proxy': 'http://proxy2.tests.com:8082', + 'no_proxy': 'www.tests.com'}) + proxy_dict = u.get_environ_proxies('www.tests.com:81') + self.assertEquals(len(proxy_dict), 0) + self.setup_env({'http_proxy': 'http://proxy1.tests.com:8081', + 'HTTPS_PROXY': 'http://proxy2.tests.com:8082', + 'NO_PROXY': 'www.tests.com'}) + proxy_dict = u.get_environ_proxies('www.tests.com:81') + self.assertEquals(len(proxy_dict), 0) |