From fe7c535db33f3ebdac2523507d8e11843ee73583 Mon Sep 17 00:00:00 2001
From: Andy McCrae <andy.mccrae@gmail.com>
Date: Wed, 19 Sep 2012 15:47:36 +0000
Subject: [PATCH] Resolves issue with empty os_options for swift-bench &
 swift-dispersion-report

Fixes Bug 1044204

Change-Id: I5f0863776bc4e2953548bc7a3958141378a032a0
---
 swiftclient/client.py     | 17 +++++++++--------
 tests/test_swiftclient.py |  8 ++++++++
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/swiftclient/client.py b/swiftclient/client.py
index cac480b9..1e4b73f8 100644
--- a/swiftclient/client.py
+++ b/swiftclient/client.py
@@ -267,6 +267,7 @@ def get_auth(auth_url, user, key, **kwargs):
     client to be running on Rackspace's ServiceNet network.
     """
     auth_version = kwargs.get('auth_version', '1')
+    os_options = kwargs.get('os_options', {})
 
     if auth_version in ['1.0', '1', 1]:
         return get_auth_1_0(auth_url,
@@ -278,28 +279,28 @@ def get_auth(auth_url, user, key, **kwargs):
 
         # We are allowing to specify a token/storage-url to re-use
         # without having to re-authenticate.
-        if (kwargs['os_options'].get('object_storage_url') and
-                kwargs['os_options'].get('auth_token')):
-            return(kwargs['os_options'].get('object_storage_url'),
-                   kwargs['os_options'].get('auth_token'))
+        if (os_options.get('object_storage_url') and
+                os_options.get('auth_token')):
+            return(os_options.get('object_storage_url'),
+                   os_options.get('auth_token'))
 
         # We are handling a special use case here when we were
         # allowing specifying the account/tenant_name with the -U
         # argument
         if not kwargs.get('tenant_name') and ':' in user:
-            (kwargs['os_options']['tenant_name'],
+            (os_options['tenant_name'],
              user) = user.split(':')
 
         # We are allowing to have an tenant_name argument in get_auth
         # directly without having os_options
         if kwargs.get('tenant_name'):
-            kwargs['os_options']['tenant_name'] = kwargs['tenant_name']
+            os_options['tenant_name'] = kwargs['tenant_name']
 
-        if (not 'tenant_name' in kwargs['os_options']):
+        if (not 'tenant_name' in os_options):
             raise ClientException('No tenant specified')
 
         (auth_url, token) = get_keystoneclient_2_0(auth_url, user,
-                                                   key, kwargs['os_options'])
+                                                   key, os_options)
         return (auth_url, token)
 
     raise ClientException('Unknown auth_version %s specified.'
diff --git a/tests/test_swiftclient.py b/tests/test_swiftclient.py
index 08bf6cc8..53d09fc3 100644
--- a/tests/test_swiftclient.py
+++ b/tests/test_swiftclient.py
@@ -220,6 +220,14 @@ class TestGetAuth(MockHttpTest):
         self.assertTrue(url.startswith("http"))
         self.assertTrue(token)
 
+    def test_auth_v2_with_tenant_user_in_user_no_os_options(self):
+        tenant_option = {'tenant_name': 'foo'}
+        c.get_keystoneclient_2_0 = fake_get_keystoneclient_2_0(tenant_option)
+        url, token = c.get_auth('http://www.test.com', 'foo:bar', 'asdf',
+                                 auth_version="2.0")
+        self.assertTrue(url.startswith("http"))
+        self.assertTrue(token)
+
     def test_auth_v2_with_os_region_name(self):
         os_options={'region_name': 'good-region',
                     'tenant_name': 'asdf'}