summaryrefslogtreecommitdiff
path: root/tests/unit/test_swiftclient.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/test_swiftclient.py')
-rw-r--r--tests/unit/test_swiftclient.py355
1 files changed, 222 insertions, 133 deletions
diff --git a/tests/unit/test_swiftclient.py b/tests/unit/test_swiftclient.py
index 09d8e76..7e753e9 100644
--- a/tests/unit/test_swiftclient.py
+++ b/tests/unit/test_swiftclient.py
@@ -336,79 +336,84 @@ class TestGetAuth(MockHttpTest):
def test_auth_v2_with_tenant_name(self):
os_options = {'tenant_name': 'asdf'}
req_args = {'auth_version': '2.0'}
- c.get_auth_keystone = fake_get_auth_keystone(os_options,
- required_kwargs=req_args)
- url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
- os_options=os_options,
- auth_version="2.0")
+ ks = fake_get_auth_keystone(os_options, required_kwargs=req_args)
+ with mock.patch('swiftclient.client.get_auth_keystone', ks):
+ url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
+ os_options=os_options,
+ auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)
def test_auth_v2_with_tenant_id(self):
os_options = {'tenant_id': 'asdf'}
req_args = {'auth_version': '2.0'}
- c.get_auth_keystone = fake_get_auth_keystone(os_options,
- required_kwargs=req_args)
- url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
- os_options=os_options,
- auth_version="2.0")
+ ks = fake_get_auth_keystone(os_options, required_kwargs=req_args)
+ with mock.patch('swiftclient.client.get_auth_keystone', ks):
+ url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
+ os_options=os_options,
+ auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)
def test_auth_v2_with_project_name(self):
os_options = {'project_name': 'asdf'}
req_args = {'auth_version': '2.0'}
- c.get_auth_keystone = fake_get_auth_keystone(os_options,
- required_kwargs=req_args)
- url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
- os_options=os_options,
- auth_version="2.0")
+ ks = fake_get_auth_keystone(os_options, required_kwargs=req_args)
+ with mock.patch('swiftclient.client.get_auth_keystone', ks):
+ url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
+ os_options=os_options,
+ auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)
def test_auth_v2_with_project_id(self):
os_options = {'project_id': 'asdf'}
req_args = {'auth_version': '2.0'}
- c.get_auth_keystone = fake_get_auth_keystone(os_options,
- required_kwargs=req_args)
- url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
- os_options=os_options,
- auth_version="2.0")
+
+ ks = fake_get_auth_keystone(os_options, required_kwargs=req_args)
+ with mock.patch('swiftclient.client.get_auth_keystone', ks):
+ url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
+ os_options=os_options,
+ auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)
def test_auth_v2_no_tenant_name_or_tenant_id(self):
- c.get_auth_keystone = fake_get_auth_keystone({})
- self.assertRaises(c.ClientException, c.get_auth,
- 'http://www.tests.com', 'asdf', 'asdf',
- os_options={},
- auth_version='2.0')
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone({})):
+ self.assertRaises(c.ClientException, c.get_auth,
+ 'http://www.tests.com', 'asdf', 'asdf',
+ os_options={},
+ auth_version='2.0')
def test_auth_v2_with_tenant_name_none_and_tenant_id_none(self):
os_options = {'tenant_name': None,
'tenant_id': None}
- c.get_auth_keystone = fake_get_auth_keystone(os_options)
- self.assertRaises(c.ClientException, c.get_auth,
- 'http://www.tests.com', 'asdf', 'asdf',
- os_options=os_options,
- auth_version='2.0')
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(os_options)):
+ self.assertRaises(c.ClientException, c.get_auth,
+ 'http://www.tests.com', 'asdf', 'asdf',
+ os_options=os_options,
+ auth_version='2.0')
def test_auth_v2_with_tenant_user_in_user(self):
tenant_option = {'tenant_name': 'foo'}
- c.get_auth_keystone = fake_get_auth_keystone(tenant_option)
- url, token = c.get_auth('http://www.test.com', 'foo:bar', 'asdf',
- os_options={},
- auth_version="2.0")
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(tenant_option)):
+ url, token = c.get_auth('http://www.test.com', 'foo:bar', 'asdf',
+ os_options={},
+ auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)
def test_auth_v2_tenant_name_no_os_options(self):
tenant_option = {'tenant_name': 'asdf'}
- c.get_auth_keystone = fake_get_auth_keystone(tenant_option)
- url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
- tenant_name='asdf',
- os_options={},
- auth_version="2.0")
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(tenant_option)):
+ url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
+ tenant_name='asdf',
+ os_options={},
+ auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)
@@ -416,138 +421,141 @@ class TestGetAuth(MockHttpTest):
os_options = {'service_type': 'object-store',
'endpoint_type': 'internalURL',
'tenant_name': 'asdf'}
- c.get_auth_keystone = fake_get_auth_keystone(os_options)
- url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
- os_options=os_options,
- auth_version="2.0")
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(os_options)):
+ url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
+ os_options=os_options,
+ auth_version="2.0")
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_auth_keystone = fake_get_auth_keystone(tenant_option)
- url, token = c.get_auth('http://www.test.com', 'foo:bar', 'asdf',
- auth_version="2.0")
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(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'}
- c.get_auth_keystone = fake_get_auth_keystone(os_options)
- url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
- os_options=os_options,
- auth_version="2.0")
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(os_options)):
+ url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
+ os_options=os_options,
+ auth_version="2.0")
self.assertTrue(url.startswith("http"))
self.assertTrue(token)
def test_auth_v2_no_endpoint(self):
os_options = {'region_name': 'unknown_region',
'tenant_name': 'asdf'}
- c.get_auth_keystone = fake_get_auth_keystone(
- os_options, c.ClientException)
- self.assertRaises(c.ClientException, c.get_auth,
- 'http://www.tests.com', 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0')
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(os_options, c.ClientException)):
+ self.assertRaises(c.ClientException, c.get_auth,
+ 'http://www.tests.com', 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0')
def test_auth_v2_ks_exception(self):
- c.get_auth_keystone = fake_get_auth_keystone(
- {}, c.ClientException)
- self.assertRaises(c.ClientException, c.get_auth,
- 'http://www.tests.com', 'asdf', 'asdf',
- os_options={},
- auth_version='2.0')
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone({}, c.ClientException)):
+ self.assertRaises(c.ClientException, c.get_auth,
+ 'http://www.tests.com', 'asdf', 'asdf',
+ os_options={},
+ auth_version='2.0')
def test_auth_v2_cacert(self):
os_options = {'tenant_name': 'foo'}
- c.get_auth_keystone = fake_get_auth_keystone(
- os_options, None)
-
auth_url_secure = 'https://www.tests.com'
auth_url_insecure = 'https://www.tests.com/self-signed-certificate'
- url, token = c.get_auth(auth_url_secure, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0',
- insecure=False)
- self.assertTrue(url.startswith("http"))
- self.assertTrue(token)
-
- url, token = c.get_auth(auth_url_insecure, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0',
- cacert='ca.pem', insecure=False)
- self.assertTrue(url.startswith("http"))
- self.assertTrue(token)
-
- self.assertRaises(c.ClientException, c.get_auth,
- auth_url_insecure, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0')
- self.assertRaises(c.ClientException, c.get_auth,
- auth_url_insecure, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0',
- insecure=False)
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(os_options, None)):
+ url, token = c.get_auth(auth_url_secure, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0',
+ insecure=False)
+ self.assertTrue(url.startswith("http"))
+ self.assertTrue(token)
+
+ url, token = c.get_auth(auth_url_insecure, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0',
+ cacert='ca.pem', insecure=False)
+ self.assertTrue(url.startswith("http"))
+ self.assertTrue(token)
+
+ self.assertRaises(c.ClientException, c.get_auth,
+ auth_url_insecure, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0')
+ self.assertRaises(c.ClientException, c.get_auth,
+ auth_url_insecure, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0',
+ insecure=False)
def test_auth_v2_insecure(self):
os_options = {'tenant_name': 'foo'}
- c.get_auth_keystone = fake_get_auth_keystone(
- os_options, None)
-
auth_url_secure = 'https://www.tests.com'
auth_url_insecure = 'https://www.tests.com/invalid-certificate'
- url, token = c.get_auth(auth_url_secure, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0')
- self.assertTrue(url.startswith("http"))
- self.assertTrue(token)
-
- url, token = c.get_auth(auth_url_insecure, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0',
- insecure=True)
- self.assertTrue(url.startswith("http"))
- self.assertTrue(token)
-
- self.assertRaises(c.ClientException, c.get_auth,
- auth_url_insecure, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0')
- self.assertRaises(c.ClientException, c.get_auth,
- auth_url_insecure, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0',
- insecure=False)
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(os_options, None)):
+ url, token = c.get_auth(auth_url_secure, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0')
+ self.assertTrue(url.startswith("http"))
+ self.assertTrue(token)
+
+ url, token = c.get_auth(auth_url_insecure, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0',
+ insecure=True)
+ self.assertTrue(url.startswith("http"))
+ self.assertTrue(token)
+
+ self.assertRaises(c.ClientException, c.get_auth,
+ auth_url_insecure, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0')
+ self.assertRaises(c.ClientException, c.get_auth,
+ auth_url_insecure, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0',
+ insecure=False)
def test_auth_v2_cert(self):
os_options = {'tenant_name': 'foo'}
- c.get_auth_keystone = fake_get_auth_keystone(os_options, None)
-
auth_url_no_sslauth = 'https://www.tests.com'
auth_url_sslauth = 'https://www.tests.com/client-certificate'
- url, token = c.get_auth(auth_url_no_sslauth, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0')
- self.assertTrue(url.startswith("http"))
- self.assertTrue(token)
-
- url, token = c.get_auth(auth_url_sslauth, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0',
- cert='minnie', cert_key='mickey')
- self.assertTrue(url.startswith("http"))
- self.assertTrue(token)
-
- self.assertRaises(c.ClientException, c.get_auth,
- auth_url_sslauth, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0')
- self.assertRaises(c.ClientException, c.get_auth,
- auth_url_sslauth, 'asdf', 'asdf',
- os_options=os_options, auth_version='2.0',
- cert='minnie')
+ with mock.patch('swiftclient.client.get_auth_keystone',
+ fake_get_auth_keystone(os_options, None)):
+ url, token = c.get_auth(auth_url_no_sslauth, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0')
+ self.assertTrue(url.startswith("http"))
+ self.assertTrue(token)
+
+ url, token = c.get_auth(auth_url_sslauth, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0',
+ cert='minnie', cert_key='mickey')
+ self.assertTrue(url.startswith("http"))
+ self.assertTrue(token)
+
+ self.assertRaises(c.ClientException, c.get_auth,
+ auth_url_sslauth, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0')
+ self.assertRaises(c.ClientException, c.get_auth,
+ auth_url_sslauth, 'asdf', 'asdf',
+ os_options=os_options, auth_version='2.0',
+ cert='minnie')
def test_auth_v3_with_tenant_name(self):
# check the correct auth version is passed to get_auth_keystone
os_options = {'tenant_name': 'asdf'}
req_args = {'auth_version': '3'}
- c.get_auth_keystone = fake_get_auth_keystone(os_options,
- required_kwargs=req_args)
- url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
- os_options=os_options,
- auth_version="3")
+
+ ks = fake_get_auth_keystone(os_options, required_kwargs=req_args)
+ with mock.patch('swiftclient.client.get_auth_keystone', ks):
+ url, token = c.get_auth('http://www.test.com', 'asdf', 'asdf',
+ os_options=os_options,
+ auth_version="3")
+
self.assertTrue(url.startswith("http"))
self.assertTrue(token)
@@ -555,10 +563,13 @@ class TestGetAuth(MockHttpTest):
# check the correct auth version is passed to get_auth_keystone
os_options = {'tenant_name': 'asdf'}
req_args = {'auth_version': '2.0'}
- c.get_auth_keystone = fake_get_auth_keystone(os_options,
- required_kwargs=req_args)
- url, token = c.get_keystoneclient_2_0('http://www.test.com', 'asdf',
- 'asdf', os_options=os_options)
+
+ ks = fake_get_auth_keystone(os_options, required_kwargs=req_args)
+ with mock.patch('swiftclient.client.get_auth_keystone', ks):
+ url, token = c.get_keystoneclient_2_0('http://www.test.com',
+ 'asdf', 'asdf',
+ os_options=os_options)
+
self.assertTrue(url.startswith("http"))
self.assertTrue(token)
@@ -2692,6 +2703,84 @@ class TestServiceToken(MockHttpTest):
self.assertEqual('service_project_name',
auth_kwargs['os_options']['tenant_name'])
+ def test_service_token_reauth_retries_0(self):
+ get_auth_call_list = []
+
+ def get_auth(url, user, key, **kwargs):
+ # The real get_auth function will always return the os_option
+ # dict's object_storage_url which will be overridden by the
+ # preauthurl parameter to Connection if it is provided.
+ args = {'url': url, 'user': user, 'key': key, 'kwargs': kwargs}
+ get_auth_call_list.append(args)
+ return_dict = {'asdf': 'new', 'service_username': 'newserv'}
+ storage_url = kwargs['os_options'].get('object_storage_url')
+ return storage_url, return_dict[user]
+
+ def swap_sleep(*args):
+ self.swap_sleep_called = True
+ c.get_auth = get_auth
+
+ with mock.patch('swiftclient.client.http_connection',
+ self.fake_http_connection(401, 200)):
+ with mock.patch('swiftclient.client.sleep', swap_sleep):
+ self.swap_sleep_called = False
+
+ conn = c.Connection('http://www.test.com', 'asdf', 'asdf',
+ preauthurl='http://www.old.com',
+ preauthtoken='old',
+ os_options=self.os_options,
+ retries=0)
+
+ self.assertEqual(conn.attempts, 0)
+ self.assertEqual(conn.url, 'http://www.old.com')
+ self.assertEqual(conn.token, 'old')
+
+ conn.head_account()
+
+ self.assertTrue(self.swap_sleep_called)
+ self.assertEqual(conn.attempts, 2)
+ # The original 'preauth' storage URL *must* be preserved
+ self.assertEqual(conn.url, 'http://www.old.com')
+ self.assertEqual(conn.token, 'new')
+ self.assertEqual(conn.service_token, 'newserv')
+
+ # Check get_auth was called with expected args
+ auth_args = get_auth_call_list[0]
+ auth_kwargs = get_auth_call_list[0]['kwargs']
+ self.assertEqual('asdf', auth_args['user'])
+ self.assertEqual('asdf', auth_args['key'])
+ self.assertEqual('service_key',
+ auth_kwargs['os_options']['service_key'])
+ self.assertEqual('service_username',
+ auth_kwargs['os_options']['service_username'])
+ self.assertEqual('service_project_name',
+ auth_kwargs['os_options']['service_project_name'])
+
+ auth_args = get_auth_call_list[1]
+ auth_kwargs = get_auth_call_list[1]['kwargs']
+ self.assertEqual('service_username', auth_args['user'])
+ self.assertEqual('service_key', auth_args['key'])
+ self.assertEqual('service_project_name',
+ auth_kwargs['os_options']['tenant_name'])
+
+ # Ensure this is not an endless loop - it fails after the second 401
+ with mock.patch('swiftclient.client.http_connection',
+ self.fake_http_connection(401, 401, 401, 401)):
+ with mock.patch('swiftclient.client.sleep', swap_sleep):
+ self.swap_sleep_called = False
+
+ conn = c.Connection('http://www.test.com', 'asdf', 'asdf',
+ preauthurl='http://www.old.com',
+ preauthtoken='old',
+ os_options=self.os_options,
+ retries=0)
+
+ self.assertEqual(conn.attempts, 0)
+ self.assertRaises(c.ClientException, conn.head_account)
+ self.assertEqual(conn.attempts, 2)
+ unused_responses = list(self.fake_connect.code_iter)
+ self.assertEqual(unused_responses, [401, 401])
+
def test_service_token_get_account(self):
with mock.patch('swiftclient.client.http_connection',
self.fake_http_connection(200)):