Merge "Kill finally, use addCleanUp"
diff --git a/tempest/api/compute/admin/test_simple_tenant_usage.py b/tempest/api/compute/admin/test_simple_tenant_usage.py
index a599f06..c416ad2 100644
--- a/tempest/api/compute/admin/test_simple_tenant_usage.py
+++ b/tempest/api/compute/admin/test_simple_tenant_usage.py
@@ -18,7 +18,6 @@
import datetime
from tempest.api.compute import base
-from tempest import exceptions
from tempest.test import attr
import time
@@ -83,33 +82,6 @@
self.assertEqual(200, resp.status)
self.assertEqual(len(tenant_usage), 8)
- @attr(type=['negative', 'gate'])
- def test_get_usage_tenant_with_empty_tenant_id(self):
- # Get usage for a specific tenant empty
- params = {'start': self.start,
- 'end': self.end}
- self.assertRaises(exceptions.NotFound,
- self.adm_client.get_tenant_usage,
- '', params)
-
- @attr(type=['negative', 'gate'])
- def test_get_usage_tenant_with_invalid_date(self):
- # Get usage for tenant with invalid date
- params = {'start': self.end,
- 'end': self.start}
- self.assertRaises(exceptions.BadRequest,
- self.adm_client.get_tenant_usage,
- self.tenant_id, params)
-
- @attr(type=['negative', 'gate'])
- def test_list_usage_all_tenants_with_non_admin_user(self):
- # Get usage for all tenants with non admin user
- params = {'start': self.start,
- 'end': self.end,
- 'detailed': int(bool(True))}
- self.assertRaises(exceptions.Unauthorized,
- self.client.list_tenant_usages, params)
-
class TenantUsagesTestXML(TenantUsagesTestJSON):
_interface = 'xml'
diff --git a/tempest/api/compute/admin/test_simple_tenant_usage_negative.py b/tempest/api/compute/admin/test_simple_tenant_usage_negative.py
new file mode 100644
index 0000000..7e5168e
--- /dev/null
+++ b/tempest/api/compute/admin/test_simple_tenant_usage_negative.py
@@ -0,0 +1,76 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2013 NEC Corporation
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import datetime
+
+from tempest.api.compute import base
+from tempest import exceptions
+from tempest.test import attr
+
+
+class TenantUsagesNegativeTestJSON(base.BaseV2ComputeAdminTest):
+
+ _interface = 'json'
+
+ @classmethod
+ def setUpClass(cls):
+ super(TenantUsagesNegativeTestJSON, cls).setUpClass()
+ cls.adm_client = cls.os_adm.tenant_usages_client
+ cls.client = cls.os.tenant_usages_client
+ cls.identity_client = cls._get_identity_admin_client()
+ now = datetime.datetime.now()
+ cls.start = cls._parse_strtime(now - datetime.timedelta(days=1))
+ cls.end = cls._parse_strtime(now + datetime.timedelta(days=1))
+
+ @classmethod
+ def _parse_strtime(cls, at):
+ # Returns formatted datetime
+ return at.strftime('%Y-%m-%dT%H:%M:%S.%f')
+
+ @attr(type=['negative', 'gate'])
+ def test_get_usage_tenant_with_empty_tenant_id(self):
+ # Get usage for a specific tenant empty
+ params = {'start': self.start,
+ 'end': self.end}
+ self.assertRaises(exceptions.NotFound,
+ self.adm_client.get_tenant_usage,
+ '', params)
+
+ @attr(type=['negative', 'gate'])
+ def test_get_usage_tenant_with_invalid_date(self):
+ # Get usage for tenant with invalid date
+ params = {'start': self.end,
+ 'end': self.start}
+ resp, tenants = self.identity_client.list_tenants()
+ tenant_id = [tnt['id'] for tnt in tenants if tnt['name'] ==
+ self.client.tenant_name][0]
+ self.assertRaises(exceptions.BadRequest,
+ self.adm_client.get_tenant_usage,
+ tenant_id, params)
+
+ @attr(type=['negative', 'gate'])
+ def test_list_usage_all_tenants_with_non_admin_user(self):
+ # Get usage for all tenants with non admin user
+ params = {'start': self.start,
+ 'end': self.end,
+ 'detailed': int(bool(True))}
+ self.assertRaises(exceptions.Unauthorized,
+ self.client.list_tenant_usages, params)
+
+
+class TenantUsagesNegativeTestXML(TenantUsagesNegativeTestJSON):
+ _interface = 'xml'
diff --git a/tempest/api/compute/v3/admin/test_simple_tenant_usage.py b/tempest/api/compute/v3/admin/test_simple_tenant_usage.py
index 3fc58eb..99f2c52 100644
--- a/tempest/api/compute/v3/admin/test_simple_tenant_usage.py
+++ b/tempest/api/compute/v3/admin/test_simple_tenant_usage.py
@@ -18,7 +18,6 @@
import datetime
from tempest.api.compute import base
-from tempest import exceptions
from tempest.test import attr
import time
@@ -83,33 +82,6 @@
self.assertEqual(200, resp.status)
self.assertEqual(len(tenant_usage), 8)
- @attr(type=['negative', 'gate'])
- def test_get_usage_tenant_with_empty_tenant_id(self):
- # Get usage for a specific tenant empty
- params = {'start': self.start,
- 'end': self.end}
- self.assertRaises(exceptions.NotFound,
- self.adm_client.get_tenant_usage,
- '', params)
-
- @attr(type=['negative', 'gate'])
- def test_get_usage_tenant_with_invalid_date(self):
- # Get usage for tenant with invalid date
- params = {'start': self.end,
- 'end': self.start}
- self.assertRaises(exceptions.BadRequest,
- self.adm_client.get_tenant_usage,
- self.tenant_id, params)
-
- @attr(type=['negative', 'gate'])
- def test_list_usage_all_tenants_with_non_admin_user(self):
- # Get usage for all tenants with non admin user
- params = {'start': self.start,
- 'end': self.end,
- 'detailed': int(bool(True))}
- self.assertRaises(exceptions.Unauthorized,
- self.client.list_tenant_usages, params)
-
class TenantUsagesV3TestXML(TenantUsagesV3TestJSON):
_interface = 'xml'
diff --git a/tempest/api/compute/v3/admin/test_simple_tenant_usage_negative.py b/tempest/api/compute/v3/admin/test_simple_tenant_usage_negative.py
new file mode 100644
index 0000000..ef49ed7
--- /dev/null
+++ b/tempest/api/compute/v3/admin/test_simple_tenant_usage_negative.py
@@ -0,0 +1,76 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2013 NEC Corporation
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+import datetime
+
+from tempest.api.compute import base
+from tempest import exceptions
+from tempest.test import attr
+
+
+class TenantUsagesNegativeV3TestJSON(base.BaseV3ComputeAdminTest):
+
+ _interface = 'json'
+
+ @classmethod
+ def setUpClass(cls):
+ super(TenantUsagesNegativeV3TestJSON, cls).setUpClass()
+ cls.adm_client = cls.os_adm.tenant_usages_client
+ cls.client = cls.os.tenant_usages_client
+ cls.identity_client = cls._get_identity_admin_client()
+ now = datetime.datetime.now()
+ cls.start = cls._parse_strtime(now - datetime.timedelta(days=1))
+ cls.end = cls._parse_strtime(now + datetime.timedelta(days=1))
+
+ @classmethod
+ def _parse_strtime(cls, at):
+ # Returns formatted datetime
+ return at.strftime('%Y-%m-%dT%H:%M:%S.%f')
+
+ @attr(type=['negative', 'gate'])
+ def test_get_usage_tenant_with_empty_tenant_id(self):
+ # Get usage for a specific tenant empty
+ params = {'start': self.start,
+ 'end': self.end}
+ self.assertRaises(exceptions.NotFound,
+ self.adm_client.get_tenant_usage,
+ '', params)
+
+ @attr(type=['negative', 'gate'])
+ def test_get_usage_tenant_with_invalid_date(self):
+ # Get usage for tenant with invalid date
+ params = {'start': self.end,
+ 'end': self.start}
+ resp, tenants = self.identity_client.list_tenants()
+ tenant_id = [tnt['id'] for tnt in tenants if tnt['name'] ==
+ self.client.tenant_name][0]
+ self.assertRaises(exceptions.BadRequest,
+ self.adm_client.get_tenant_usage,
+ tenant_id, params)
+
+ @attr(type=['negative', 'gate'])
+ def test_list_usage_all_tenants_with_non_admin_user(self):
+ # Get usage for all tenants with non admin user
+ params = {'start': self.start,
+ 'end': self.end,
+ 'detailed': int(bool(True))}
+ self.assertRaises(exceptions.Unauthorized,
+ self.client.list_tenant_usages, params)
+
+
+class TenantUsagesNegativeV3TestXML(TenantUsagesNegativeV3TestJSON):
+ _interface = 'xml'
diff --git a/tempest/api/identity/admin/v3/test_trusts.py b/tempest/api/identity/admin/v3/test_trusts.py
index 5e13a5a..242be2b 100644
--- a/tempest/api/identity/admin/v3/test_trusts.py
+++ b/tempest/api/identity/admin/v3/test_trusts.py
@@ -220,3 +220,22 @@
self.assertRaises(exceptions.BadRequest,
self.create_trust,
expires=expires_str)
+
+ @attr(type='smoke')
+ def test_get_trusts_query(self):
+ self.create_trust()
+ resp, trusts_get = self.trustor_v3_client.get_trusts(
+ trustor_user_id=self.trustor_user_id)
+ self.assertEqual('200', resp['status'])
+ self.assertEqual(1, len(trusts_get))
+ self.validate_trust(trusts_get[0], summary=True)
+
+ @attr(type='smoke')
+ def test_get_trusts_all(self):
+ self.create_trust()
+ resp, trusts_get = self.v3_client.get_trusts()
+ self.assertEqual('200', resp['status'])
+ trusts = [t for t in trusts_get
+ if t['id'] == self.trust_id]
+ self.assertEqual(1, len(trusts))
+ self.validate_trust(trusts[0], summary=True)
diff --git a/tempest/api/object_storage/test_object_temp_url.py b/tempest/api/object_storage/test_object_temp_url.py
index 9d5a1c0..d0e5353 100644
--- a/tempest/api/object_storage/test_object_temp_url.py
+++ b/tempest/api/object_storage/test_object_temp_url.py
@@ -39,27 +39,36 @@
def setUpClass(cls):
super(ObjectTempUrlTest, cls).setUpClass()
- # skip this test if CORS isn't enabled in the conf file.
+ # skip this test if TempUrl isn't enabled in the conf file.
if not cls.tempurl_available:
skip_msg = ("%s skipped as TempUrl middleware not available"
% cls.__name__)
raise cls.skipException(skip_msg)
+ # create a container
cls.container_name = data_utils.rand_name(name='TestContainer')
cls.container_client.create_container(cls.container_name)
cls.containers = [cls.container_name]
# update account metadata
cls.key = 'Meta'
+ cls.metadatas = []
cls.metadata = {'Temp-URL-Key': cls.key}
+ cls.metadatas.append(cls.metadata)
cls.account_client.create_account_metadata(metadata=cls.metadata)
- cls.account_client_metadata, _ = \
- cls.account_client.list_account_metadata()
+
+ # create an object
+ cls.object_name = data_utils.rand_name(name='ObjectTemp')
+ cls.content = data_utils.arbitrary_string(size=len(cls.object_name),
+ base_text=cls.object_name)
+ cls.object_client.create_object(cls.container_name,
+ cls.object_name, cls.content)
@classmethod
def tearDownClass(cls):
- resp, _ = cls.account_client.delete_account_metadata(
- metadata=cls.metadata)
+ for metadata in cls.metadata:
+ cls.account_client.delete_account_metadata(
+ metadata=metadata)
cls.delete_containers(cls.containers)
@@ -69,21 +78,16 @@
def setUp(self):
super(ObjectTempUrlTest, self).setUp()
+
# make sure the metadata has been set
+ account_client_metadata, _ = \
+ self.account_client.list_account_metadata()
self.assertIn('x-account-meta-temp-url-key',
- self.account_client_metadata)
-
+ account_client_metadata)
self.assertEqual(
- self.account_client_metadata['x-account-meta-temp-url-key'],
+ account_client_metadata['x-account-meta-temp-url-key'],
self.key)
- # create object
- self.object_name = data_utils.rand_name(name='ObjectTemp')
- self.data = data_utils.arbitrary_string(size=len(self.object_name),
- base_text=self.object_name)
- self.object_client.create_object(self.container_name,
- self.object_name, self.data)
-
def _get_expiry_date(self, expiration_time=1000):
return int(time.time() + expiration_time)
@@ -114,10 +118,10 @@
expires, self.key)
# trying to get object using temp url within expiry time
- resp, body = self.object_client.get_object_using_temp_url(url)
+ resp, body = self.object_client.get(url)
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.assertHeaders(resp, 'Object', 'GET')
- self.assertEqual(body, self.data)
+ self.assertEqual(body, self.content)
# Testing a HEAD on this Temp URL
resp, body = self.object_client.head(url)
@@ -129,23 +133,27 @@
key2 = 'Meta2-'
metadata = {'Temp-URL-Key-2': key2}
self.account_client.create_account_metadata(metadata=metadata)
+ self.metadatas.append(metadata)
- self.account_client_metadata, _ = \
+ # make sure the metadata has been set
+ account_client_metadata, _ = \
self.account_client.list_account_metadata()
self.assertIn('x-account-meta-temp-url-key-2',
- self.account_client_metadata)
+ account_client_metadata)
+ self.assertEqual(
+ account_client_metadata['x-account-meta-temp-url-key-2'],
+ key2)
expires = self._get_expiry_date()
url = self._get_temp_url(self.container_name,
self.object_name, "GET",
expires, key2)
- resp, body = self.object_client.get_object_using_temp_url(url)
+ resp, body = self.object_client.get(url)
self.assertIn(int(resp['status']), HTTP_SUCCESS)
- self.assertEqual(body, self.data)
+ self.assertEqual(body, self.content)
@attr(type='gate')
def test_put_object_using_temp_url(self):
- # make sure the metadata has been set
new_data = data_utils.arbitrary_string(
size=len(self.object_name),
base_text=data_utils.rand_name(name="random"))
@@ -156,9 +164,7 @@
expires, self.key)
# trying to put random data in the object using temp url
- resp, body = self.object_client.put_object_using_temp_url(
- url, new_data)
-
+ resp, body = self.object_client.put(url, new_data, None)
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.assertHeaders(resp, 'Object', 'PUT')
@@ -172,9 +178,23 @@
self.object_name, "GET",
expires, self.key)
- _, body = self.object_client.get_object_using_temp_url(url)
+ _, body = self.object_client.get(url)
self.assertEqual(body, new_data)
+ @attr(type='gate')
+ def test_head_object_using_temp_url(self):
+ expires = self._get_expiry_date()
+
+ # get a temp URL for the created object
+ url = self._get_temp_url(self.container_name,
+ self.object_name, "HEAD",
+ expires, self.key)
+
+ # Testing a HEAD on this Temp URL
+ resp, body = self.object_client.head(url)
+ self.assertIn(int(resp['status']), HTTP_SUCCESS)
+ self.assertHeaders(resp, 'Object', 'HEAD')
+
@attr(type=['gate', 'negative'])
def test_get_object_after_expiration_time(self):
@@ -188,5 +208,4 @@
time.sleep(2)
self.assertRaises(exceptions.Unauthorized,
- self.object_client.get_object_using_temp_url,
- url)
+ self.object_client.get, url)
diff --git a/tempest/services/object_storage/object_client.py b/tempest/services/object_storage/object_client.py
index 9e0adff..5c86d1f 100644
--- a/tempest/services/object_storage/object_client.py
+++ b/tempest/services/object_storage/object_client.py
@@ -134,14 +134,6 @@
resp, body = self.put(url, data, self.headers)
return resp, body
- def get_object_using_temp_url(self, url):
- """Retrieve object's data using temp URL."""
- return self.get(url)
-
- def put_object_using_temp_url(self, url, data):
- """Put data in an object using temp URL."""
- return self.put(url, data, None)
-
class ObjectClientCustomizedHeader(RestClient):