summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClay Gerrard <clay.gerrard@gmail.com>2015-01-21 17:20:53 -0800
committerClay Gerrard <clay.gerrard@gmail.com>2015-01-21 17:20:53 -0800
commiteef91b35139411fcef31855ce0ebe4407a2de70b (patch)
tree958d9d384d4dc4785f002af4e599ff1f9e77a318
parent7709fea51e71084163cf56c4d11a280ca4388357 (diff)
downloadpython-swiftclient-eef91b35139411fcef31855ce0ebe4407a2de70b.tar.gz
Fix environment sanitization for TestServiceUtils
I'm not sure how test_process_options_defaults ever passed for anyone that had all the ST_(AUTH|USER|KEY) set in their environment when they ran it. Despite our efforts to patch os.environ swiftclient.servce was acctually importing environ from os and then sticking the results into some global state. The tests seemed to work fine on infra, but for me locally until I `unset ST_AUTH` the test would always fail. Seems to work now and looks fairly reasonable on the surface. Change-Id: Id68590d6af16040a2877e719bc38d1e126603e42
-rw-r--r--swiftclient/service.py74
-rw-r--r--tests/unit/test_service.py4
2 files changed, 42 insertions, 36 deletions
diff --git a/swiftclient/service.py b/swiftclient/service.py
index df1ffb3..630ec8d 100644
--- a/swiftclient/service.py
+++ b/swiftclient/service.py
@@ -109,41 +109,45 @@ def process_options(options):
'region_name': options['os_region_name'],
}
-_default_global_options = {
- "snet": False,
- "verbose": 1,
- "debug": False,
- "info": False,
- "auth": environ.get('ST_AUTH'),
- "auth_version": environ.get('ST_AUTH_VERSION', '1.0'),
- "user": environ.get('ST_USER'),
- "key": environ.get('ST_KEY'),
- "retries": 5,
- "os_username": environ.get('OS_USERNAME'),
- "os_user_id": environ.get('OS_USER_ID'),
- "os_user_domain_name": environ.get('OS_USER_DOMAIN_NAME'),
- "os_user_domain_id": environ.get('OS_USER_DOMAIN_ID'),
- "os_password": environ.get('OS_PASSWORD'),
- "os_tenant_id": environ.get('OS_TENANT_ID'),
- "os_tenant_name": environ.get('OS_TENANT_NAME'),
- "os_project_name": environ.get('OS_PROJECT_NAME'),
- "os_project_id": environ.get('OS_PROJECT_ID'),
- "os_project_domain_name": environ.get('OS_PROJECT_DOMAIN_NAME'),
- "os_project_domain_id": environ.get('OS_PROJECT_DOMAIN_ID'),
- "os_auth_url": environ.get('OS_AUTH_URL'),
- "os_auth_token": environ.get('OS_AUTH_TOKEN'),
- "os_storage_url": environ.get('OS_STORAGE_URL'),
- "os_region_name": environ.get('OS_REGION_NAME'),
- "os_service_type": environ.get('OS_SERVICE_TYPE'),
- "os_endpoint_type": environ.get('OS_ENDPOINT_TYPE'),
- "os_cacert": environ.get('OS_CACERT'),
- "insecure": config_true_value(environ.get('SWIFTCLIENT_INSECURE')),
- "ssl_compression": False,
- 'segment_threads': 10,
- 'object_dd_threads': 10,
- 'object_uu_threads': 10,
- 'container_threads': 10
-}
+
+def _build_default_global_options():
+ return {
+ "snet": False,
+ "verbose": 1,
+ "debug": False,
+ "info": False,
+ "auth": environ.get('ST_AUTH'),
+ "auth_version": environ.get('ST_AUTH_VERSION', '1.0'),
+ "user": environ.get('ST_USER'),
+ "key": environ.get('ST_KEY'),
+ "retries": 5,
+ "os_username": environ.get('OS_USERNAME'),
+ "os_user_id": environ.get('OS_USER_ID'),
+ "os_user_domain_name": environ.get('OS_USER_DOMAIN_NAME'),
+ "os_user_domain_id": environ.get('OS_USER_DOMAIN_ID'),
+ "os_password": environ.get('OS_PASSWORD'),
+ "os_tenant_id": environ.get('OS_TENANT_ID'),
+ "os_tenant_name": environ.get('OS_TENANT_NAME'),
+ "os_project_name": environ.get('OS_PROJECT_NAME'),
+ "os_project_id": environ.get('OS_PROJECT_ID'),
+ "os_project_domain_name": environ.get('OS_PROJECT_DOMAIN_NAME'),
+ "os_project_domain_id": environ.get('OS_PROJECT_DOMAIN_ID'),
+ "os_auth_url": environ.get('OS_AUTH_URL'),
+ "os_auth_token": environ.get('OS_AUTH_TOKEN'),
+ "os_storage_url": environ.get('OS_STORAGE_URL'),
+ "os_region_name": environ.get('OS_REGION_NAME'),
+ "os_service_type": environ.get('OS_SERVICE_TYPE'),
+ "os_endpoint_type": environ.get('OS_ENDPOINT_TYPE'),
+ "os_cacert": environ.get('OS_CACERT'),
+ "insecure": config_true_value(environ.get('SWIFTCLIENT_INSECURE')),
+ "ssl_compression": False,
+ 'segment_threads': 10,
+ 'object_dd_threads': 10,
+ 'object_uu_threads': 10,
+ 'container_threads': 10
+ }
+
+_default_global_options = _build_default_global_options()
_default_local_options = {
'sync_to': None,
diff --git a/tests/unit/test_service.py b/tests/unit/test_service.py
index c478351..3267cd6 100644
--- a/tests/unit/test_service.py
+++ b/tests/unit/test_service.py
@@ -390,11 +390,13 @@ class TestSwiftError(testtools.TestCase):
self.assertEqual(str(se), '5 container:con object:obj segment:seg')
-@mock.patch.dict(os.environ, clean_os_environ)
class TestServiceUtils(testtools.TestCase):
def setUp(self):
super(TestServiceUtils, self).setUp()
+ with mock.patch.dict(swiftclient.service.environ, clean_os_environ):
+ swiftclient.service._default_global_options = \
+ swiftclient.service._build_default_global_options()
self.opts = swiftclient.service._default_global_options.copy()
def test_process_options_defaults(self):