summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDavide Guerri <davide.guerri@hp.com>2013-11-25 10:42:56 +0000
committerDavide Guerri <davide.guerri@hp.com>2013-12-10 12:12:28 +0000
commit716b4e722c98396dc1477a04120eb0fedf388799 (patch)
treeab6e0ebde0c7b3972d72445f0a2dd6ec04751bcf /tests
parent04e0cb27839cec474bce383d4364fd76dcb6e4b2 (diff)
downloadpython-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.py80
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)