Switch to decorators.idempotent_id on object_storage

So many modules are using test.idempotent_id and this is for
switching to decorators.idempotent_id on object_storage.

Change-Id: I200875e4c4c61127c8dd430f09e5a9a24a03a129
Related-Bug: #1616913
This commit is contained in:
Ken'ichi Ohmichi 2017-01-27 18:12:22 -08:00 committed by Ken'ichi Ohmichi
parent f2d72d8f6d
commit b7bc1de859
23 changed files with 162 additions and 144 deletions

View File

@ -17,6 +17,7 @@ import tempfile
from tempest.api.object_storage import base
from tempest.common import custom_matchers
from tempest.lib import decorators
from tempest import test
@ -68,7 +69,7 @@ class BulkTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Account', 'GET')
self.assertNotIn(container_name, body)
@test.idempotent_id('a407de51-1983-47cc-9f14-47c2b059413c')
@decorators.idempotent_id('a407de51-1983-47cc-9f14-47c2b059413c')
@test.requires_ext(extension='bulk_upload', service='object')
def test_extract_archive(self):
# Test bulk operation of file upload with an archived file
@ -104,7 +105,7 @@ class BulkTest(base.BaseObjectTest):
self.assertIn(object_name, [c['name'] for c in contents_list])
@test.idempotent_id('c075e682-0d2a-43b2-808d-4116200d736d')
@decorators.idempotent_id('c075e682-0d2a-43b2-808d-4116200d736d')
@test.requires_ext(extension='bulk_delete', service='object')
def test_bulk_delete(self):
# Test bulk operation of deleting multiple files
@ -131,7 +132,7 @@ class BulkTest(base.BaseObjectTest):
# Check if uploaded contents are completely deleted
self._check_contents_deleted(container_name)
@test.idempotent_id('dbea2bcb-efbb-4674-ac8a-a5a0e33d1d79')
@decorators.idempotent_id('dbea2bcb-efbb-4674-ac8a-a5a0e33d1d79')
@test.requires_ext(extension='bulk_delete', service='object')
def test_bulk_delete_by_POST(self):
# Test bulk operation of deleting multiple files

View File

@ -15,6 +15,7 @@
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
from tempest import config
from tempest.lib import decorators
from tempest import test
CONF = config.CONF
@ -76,7 +77,7 @@ class AccountQuotasTest(base.BaseObjectTest):
super(AccountQuotasTest, cls).resource_cleanup()
@test.attr(type="smoke")
@test.idempotent_id('a22ef352-a342-4587-8f47-3bbdb5b039c4')
@decorators.idempotent_id('a22ef352-a342-4587-8f47-3bbdb5b039c4')
@test.requires_ext(extension='account_quotas', service='object')
def test_upload_valid_object(self):
object_name = data_utils.rand_name(name="TestObject")
@ -87,7 +88,7 @@ class AccountQuotasTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'PUT')
@test.attr(type=["smoke"])
@test.idempotent_id('63f51f9f-5f1d-4fc6-b5be-d454d70949d6')
@decorators.idempotent_id('63f51f9f-5f1d-4fc6-b5be-d454d70949d6')
@test.requires_ext(extension='account_quotas', service='object')
def test_admin_modify_quota(self):
"""Test ResellerAdmin can modify/remove the quota on a user's account

View File

@ -14,6 +14,7 @@
from tempest.api.object_storage import base
from tempest import config
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from tempest import test
@ -75,7 +76,7 @@ class AccountQuotasNegativeTest(base.BaseObjectTest):
super(AccountQuotasNegativeTest, cls).resource_cleanup()
@test.attr(type=["negative"])
@test.idempotent_id('d1dc5076-555e-4e6d-9697-28f1fe976324')
@decorators.idempotent_id('d1dc5076-555e-4e6d-9697-28f1fe976324')
@test.requires_ext(extension='account_quotas', service='object')
def test_user_modify_quota(self):
"""Test that a user cannot modify or remove a quota on its account."""

View File

@ -22,6 +22,7 @@ from tempest.api.object_storage import base
from tempest.common import custom_matchers
from tempest.common.utils import data_utils
from tempest import config
from tempest.lib import decorators
from tempest import test
CONF = config.CONF
@ -54,7 +55,7 @@ class AccountTest(base.BaseObjectTest):
super(AccountTest, cls).resource_cleanup()
@test.attr(type='smoke')
@test.idempotent_id('3499406a-ae53-4f8c-b43a-133d4dc6fe3f')
@decorators.idempotent_id('3499406a-ae53-4f8c-b43a-133d4dc6fe3f')
def test_list_containers(self):
# list of all containers should not be empty
resp, container_list = self.account_client.list_account_containers()
@ -66,7 +67,7 @@ class AccountTest(base.BaseObjectTest):
self.assertIn(six.text_type(container_name).encode('utf-8'),
container_list)
@test.idempotent_id('884ec421-fbad-4fcc-916b-0580f2699565')
@decorators.idempotent_id('884ec421-fbad-4fcc-916b-0580f2699565')
def test_list_no_containers(self):
# List request to empty account
@ -103,7 +104,7 @@ class AccountTest(base.BaseObjectTest):
self.assertEqual(len(container_list), 0)
@test.idempotent_id('1c7efa35-e8a2-4b0b-b5ff-862c7fd83704')
@decorators.idempotent_id('1c7efa35-e8a2-4b0b-b5ff-862c7fd83704')
def test_list_containers_with_format_json(self):
# list containers setting format parameter to 'json'
params = {'format': 'json'}
@ -115,7 +116,7 @@ class AccountTest(base.BaseObjectTest):
self.assertTrue([c['count'] for c in container_list])
self.assertTrue([c['bytes'] for c in container_list])
@test.idempotent_id('4477b609-1ca6-4d4b-b25d-ad3f01086089')
@decorators.idempotent_id('4477b609-1ca6-4d4b-b25d-ad3f01086089')
def test_list_containers_with_format_xml(self):
# list containers setting format parameter to 'xml'
params = {'format': 'xml'}
@ -130,7 +131,7 @@ class AccountTest(base.BaseObjectTest):
self.assertEqual(container_list.find(".//count").tag, 'count')
self.assertEqual(container_list.find(".//bytes").tag, 'bytes')
@test.idempotent_id('6eb04a6a-4860-4e31-ba91-ea3347d76b58')
@decorators.idempotent_id('6eb04a6a-4860-4e31-ba91-ea3347d76b58')
@testtools.skipIf(
not CONF.object_storage_feature_enabled.discoverability,
'Discoverability function is disabled')
@ -139,7 +140,7 @@ class AccountTest(base.BaseObjectTest):
self.assertThat(resp, custom_matchers.AreAllWellFormatted())
@test.idempotent_id('5cfa4ab2-4373-48dd-a41f-a532b12b08b2')
@decorators.idempotent_id('5cfa4ab2-4373-48dd-a41f-a532b12b08b2')
def test_list_containers_with_limit(self):
# list containers one of them, half of them then all of them
for limit in (1, self.containers_count // 2,
@ -151,7 +152,7 @@ class AccountTest(base.BaseObjectTest):
self.assertEqual(len(container_list), limit)
@test.idempotent_id('638f876d-6a43-482a-bbb3-0840bca101c6')
@decorators.idempotent_id('638f876d-6a43-482a-bbb3-0840bca101c6')
def test_list_containers_with_marker(self):
# list containers using marker param
# first expect to get 0 container as we specified last
@ -172,7 +173,7 @@ class AccountTest(base.BaseObjectTest):
self.assertEqual(len(container_list),
self.containers_count // 2 - 1)
@test.idempotent_id('5ca164e4-7bde-43fa-bafb-913b53b9e786')
@decorators.idempotent_id('5ca164e4-7bde-43fa-bafb-913b53b9e786')
def test_list_containers_with_end_marker(self):
# list containers using end_marker param
# first expect to get 0 container as we specified first container as
@ -190,7 +191,7 @@ class AccountTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Account', 'GET')
self.assertEqual(len(container_list), self.containers_count // 2)
@test.idempotent_id('ac8502c2-d4e4-4f68-85a6-40befea2ef5e')
@decorators.idempotent_id('ac8502c2-d4e4-4f68-85a6-40befea2ef5e')
def test_list_containers_with_marker_and_end_marker(self):
# list containers combining marker and end_marker param
params = {'marker': self.containers[0],
@ -200,7 +201,7 @@ class AccountTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Account', 'GET')
self.assertEqual(len(container_list), self.containers_count - 2)
@test.idempotent_id('f7064ae8-dbcc-48da-b594-82feef6ea5af')
@decorators.idempotent_id('f7064ae8-dbcc-48da-b594-82feef6ea5af')
def test_list_containers_with_limit_and_marker(self):
# list containers combining marker and limit param
# result are always limitated by the limit whatever the marker
@ -215,7 +216,7 @@ class AccountTest(base.BaseObjectTest):
self.assertLessEqual(len(container_list), limit,
str(container_list))
@test.idempotent_id('888a3f0e-7214-4806-8e50-5e0c9a69bb5e')
@decorators.idempotent_id('888a3f0e-7214-4806-8e50-5e0c9a69bb5e')
def test_list_containers_with_limit_and_end_marker(self):
# list containers combining limit and end_marker param
limit = random.randint(1, self.containers_count)
@ -227,7 +228,7 @@ class AccountTest(base.BaseObjectTest):
self.assertEqual(len(container_list),
min(limit, self.containers_count // 2))
@test.idempotent_id('8cf98d9c-e3a0-4e44-971b-c87656fdddbd')
@decorators.idempotent_id('8cf98d9c-e3a0-4e44-971b-c87656fdddbd')
def test_list_containers_with_limit_and_marker_and_end_marker(self):
# list containers combining limit, marker and end_marker param
limit = random.randint(1, self.containers_count)
@ -240,7 +241,7 @@ class AccountTest(base.BaseObjectTest):
self.assertEqual(len(container_list),
min(limit, self.containers_count - 2))
@test.idempotent_id('365e6fc7-1cfe-463b-a37c-8bd08d47b6aa')
@decorators.idempotent_id('365e6fc7-1cfe-463b-a37c-8bd08d47b6aa')
def test_list_containers_with_prefix(self):
# list containers that have a name that starts with a prefix
prefix = '{0}-a'.format(CONF.resources_prefix)
@ -253,7 +254,7 @@ class AccountTest(base.BaseObjectTest):
'utf-8').startswith(prefix))
@test.attr(type='smoke')
@test.idempotent_id('4894c312-6056-4587-8d6f-86ffbf861f80')
@decorators.idempotent_id('4894c312-6056-4587-8d6f-86ffbf861f80')
def test_list_account_metadata(self):
# list all account metadata
@ -268,14 +269,14 @@ class AccountTest(base.BaseObjectTest):
self.assertIn('x-account-meta-test-account-meta2', resp)
self.account_client.delete_account_metadata(metadata)
@test.idempotent_id('b904c2e3-24c2-4dba-ad7d-04e90a761be5')
@decorators.idempotent_id('b904c2e3-24c2-4dba-ad7d-04e90a761be5')
def test_list_no_account_metadata(self):
# list no account metadata
resp, _ = self.account_client.list_account_metadata()
self.assertHeaders(resp, 'Account', 'HEAD')
self.assertNotIn('x-account-meta-', str(resp))
@test.idempotent_id('e2a08b5f-3115-4768-a3ee-d4287acd6c08')
@decorators.idempotent_id('e2a08b5f-3115-4768-a3ee-d4287acd6c08')
def test_update_account_metadata_with_create_metadata(self):
# add metadata to account
metadata = {'test-account-meta1': 'Meta1'}
@ -289,7 +290,7 @@ class AccountTest(base.BaseObjectTest):
self.account_client.delete_account_metadata(metadata)
@test.idempotent_id('9f60348d-c46f-4465-ae06-d51dbd470953')
@decorators.idempotent_id('9f60348d-c46f-4465-ae06-d51dbd470953')
def test_update_account_metadata_with_delete_matadata(self):
# delete metadata from account
metadata = {'test-account-meta1': 'Meta1'}
@ -300,7 +301,7 @@ class AccountTest(base.BaseObjectTest):
resp, _ = self.account_client.list_account_metadata()
self.assertNotIn('x-account-meta-test-account-meta1', resp)
@test.idempotent_id('64fd53f3-adbd-4639-af54-436e4982dbfb')
@decorators.idempotent_id('64fd53f3-adbd-4639-af54-436e4982dbfb')
def test_update_account_metadata_with_create_matadata_key(self):
# if the value of metadata is not set, the metadata is not
# registered at a server
@ -311,7 +312,7 @@ class AccountTest(base.BaseObjectTest):
resp, _ = self.account_client.list_account_metadata()
self.assertNotIn('x-account-meta-test-account-meta1', resp)
@test.idempotent_id('d4d884d3-4696-4b85-bc98-4f57c4dd2bf1')
@decorators.idempotent_id('d4d884d3-4696-4b85-bc98-4f57c4dd2bf1')
def test_update_account_metadata_with_delete_matadata_key(self):
# Although the value of metadata is not set, the feature of
# deleting metadata is valid
@ -324,7 +325,7 @@ class AccountTest(base.BaseObjectTest):
resp, _ = self.account_client.list_account_metadata()
self.assertNotIn('x-account-meta-test-account-meta1', resp)
@test.idempotent_id('8e5fc073-59b9-42ee-984a-29ed11b2c749')
@decorators.idempotent_id('8e5fc073-59b9-42ee-984a-29ed11b2c749')
def test_update_account_metadata_with_create_and_delete_metadata(self):
# Send a request adding and deleting metadata requests simultaneously
metadata_1 = {'test-account-meta1': 'Meta1'}

View File

@ -14,6 +14,7 @@
from tempest.api.object_storage import base
from tempest import config
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from tempest import test
@ -32,7 +33,7 @@ class AccountNegativeTest(base.BaseObjectTest):
cls.os_operator = cls.os_roles_operator_alt
@test.attr(type=['negative'])
@test.idempotent_id('070e6aca-6152-4867-868d-1118d68fb38c')
@decorators.idempotent_id('070e6aca-6152-4867-868d-1118d68fb38c')
def test_list_containers_with_non_authorized_user(self):
# list containers using non-authorized user

View File

@ -16,7 +16,7 @@
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
from tempest import config
from tempest import test
from tempest.lib import decorators
CONF = config.CONF
@ -34,7 +34,7 @@ class ObjectTestACLs(base.BaseObjectTest):
self.delete_containers()
super(ObjectTestACLs, self).tearDown()
@test.idempotent_id('a3270f3f-7640-4944-8448-c7ea783ea5b6')
@decorators.idempotent_id('a3270f3f-7640-4944-8448-c7ea783ea5b6')
def test_read_object_with_rights(self):
# attempt to read object using authorized user
# update X-Container-Read metadata ACL
@ -61,7 +61,7 @@ class ObjectTestACLs(base.BaseObjectTest):
self.container_name, object_name)
self.assertHeaders(resp, 'Object', 'GET')
@test.idempotent_id('aa58bfa5-40d9-4bc3-82b4-d07f4a9e392a')
@decorators.idempotent_id('aa58bfa5-40d9-4bc3-82b4-d07f4a9e392a')
def test_write_object_with_rights(self):
# attempt to write object using authorized user
# update X-Container-Write metadata ACL

View File

@ -15,6 +15,7 @@
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
from tempest import config
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from tempest import test
@ -47,7 +48,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
super(ObjectACLsNegativeTest, self).tearDown()
@test.attr(type=['negative'])
@test.idempotent_id('af587587-0c24-4e15-9822-8352ce711013')
@decorators.idempotent_id('af587587-0c24-4e15-9822-8352ce711013')
def test_write_object_without_using_creds(self):
# trying to create object with empty headers
# X-Auth-Token is not provided
@ -61,7 +62,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
self.container_name, object_name, 'data', headers={})
@test.attr(type=['negative'])
@test.idempotent_id('af85af0b-a025-4e72-a90e-121babf55720')
@decorators.idempotent_id('af85af0b-a025-4e72-a90e-121babf55720')
def test_delete_object_without_using_creds(self):
# create object
object_name = data_utils.rand_name(name='Object')
@ -78,7 +79,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
self.container_name, object_name)
@test.attr(type=['negative'])
@test.idempotent_id('63d84e37-55a6-42e2-9e5f-276e60e26a00')
@decorators.idempotent_id('63d84e37-55a6-42e2-9e5f-276e60e26a00')
def test_write_object_with_non_authorized_user(self):
# attempt to upload another file using non-authorized user
# User provided token is forbidden. ACL are not set
@ -93,7 +94,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
self.container_name, object_name, 'data', headers={})
@test.attr(type=['negative'])
@test.idempotent_id('abf63359-be52-4feb-87dd-447689fc77fd')
@decorators.idempotent_id('abf63359-be52-4feb-87dd-447689fc77fd')
def test_read_object_with_non_authorized_user(self):
# attempt to read object using non-authorized user
# User provided token is forbidden. ACL are not set
@ -111,7 +112,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
self.container_name, object_name)
@test.attr(type=['negative'])
@test.idempotent_id('7343ac3d-cfed-4198-9bb0-00149741a492')
@decorators.idempotent_id('7343ac3d-cfed-4198-9bb0-00149741a492')
def test_delete_object_with_non_authorized_user(self):
# attempt to delete object using non-authorized user
# User provided token is forbidden. ACL are not set
@ -129,7 +130,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
self.container_name, object_name)
@test.attr(type=['negative'])
@test.idempotent_id('9ed01334-01e9-41ea-87ea-e6f465582823')
@decorators.idempotent_id('9ed01334-01e9-41ea-87ea-e6f465582823')
def test_read_object_without_rights(self):
# attempt to read object using non-authorized user
# update X-Container-Read metadata ACL
@ -153,7 +154,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
self.container_name, object_name)
@test.attr(type=['negative'])
@test.idempotent_id('a3a585a7-d8cf-4b65-a1a0-edc2b1204f85')
@decorators.idempotent_id('a3a585a7-d8cf-4b65-a1a0-edc2b1204f85')
def test_write_object_without_rights(self):
# attempt to write object using non-authorized user
# update X-Container-Write metadata ACL
@ -174,7 +175,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
object_name, 'data', headers={})
@test.attr(type=['negative'])
@test.idempotent_id('8ba512ad-aa6e-444e-b882-2906a0ea2052')
@decorators.idempotent_id('8ba512ad-aa6e-444e-b882-2906a0ea2052')
def test_write_object_without_write_rights(self):
# attempt to write object using non-authorized user
# update X-Container-Read and X-Container-Write metadata ACL
@ -199,7 +200,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
object_name, 'data', headers={})
@test.attr(type=['negative'])
@test.idempotent_id('b4e366f8-f185-47ab-b789-df4416f9ecdb')
@decorators.idempotent_id('b4e366f8-f185-47ab-b789-df4416f9ecdb')
def test_delete_object_without_write_rights(self):
# attempt to delete object using non-authorized user
# update X-Container-Read and X-Container-Write metadata ACL

View File

@ -15,6 +15,7 @@
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from tempest import test
@ -47,7 +48,7 @@ class ContainerQuotasTest(base.BaseObjectTest):
self.delete_containers()
super(ContainerQuotasTest, self).tearDown()
@test.idempotent_id('9a0fb034-86af-4df0-86fa-f8bd7db21ae0')
@decorators.idempotent_id('9a0fb034-86af-4df0-86fa-f8bd7db21ae0')
@test.requires_ext(extension='container_quotas', service='object')
@test.attr(type="smoke")
def test_upload_valid_object(self):
@ -64,7 +65,7 @@ class ContainerQuotasTest(base.BaseObjectTest):
nafter = self._get_bytes_used()
self.assertEqual(nbefore + len(data), nafter)
@test.idempotent_id('22eeeb2b-3668-4160-baef-44790f65a5a0')
@decorators.idempotent_id('22eeeb2b-3668-4160-baef-44790f65a5a0')
@test.requires_ext(extension='container_quotas', service='object')
@test.attr(type="smoke")
def test_upload_large_object(self):
@ -81,7 +82,7 @@ class ContainerQuotasTest(base.BaseObjectTest):
nafter = self._get_bytes_used()
self.assertEqual(nbefore, nafter)
@test.idempotent_id('3a387039-697a-44fc-a9c0-935de31f426b')
@decorators.idempotent_id('3a387039-697a-44fc-a9c0-935de31f426b')
@test.requires_ext(extension='container_quotas', service='object')
@test.attr(type="smoke")
def test_upload_too_many_objects(self):

View File

@ -15,6 +15,7 @@
from tempest.api.object_storage import base
from tempest.lib.common.utils import data_utils
from tempest.lib import decorators
from tempest import test
@ -24,14 +25,14 @@ class ContainerTest(base.BaseObjectTest):
super(ContainerTest, self).tearDown()
@test.attr(type='smoke')
@test.idempotent_id('92139d73-7819-4db1-85f8-3f2f22a8d91f')
@decorators.idempotent_id('92139d73-7819-4db1-85f8-3f2f22a8d91f')
def test_create_container(self):
container_name = data_utils.rand_name(name='TestContainer')
resp, body = self.container_client.create_container(container_name)
self.containers.append(container_name)
self.assertHeaders(resp, 'Container', 'PUT')
@test.idempotent_id('49f866ed-d6af-4395-93e7-4187eb56d322')
@decorators.idempotent_id('49f866ed-d6af-4395-93e7-4187eb56d322')
def test_create_container_overwrite(self):
# overwrite container with the same name
container_name = data_utils.rand_name(name='TestContainer')
@ -41,7 +42,7 @@ class ContainerTest(base.BaseObjectTest):
resp, _ = self.container_client.create_container(container_name)
self.assertHeaders(resp, 'Container', 'PUT')
@test.idempotent_id('c2ac4d59-d0f5-40d5-ba19-0635056d48cd')
@decorators.idempotent_id('c2ac4d59-d0f5-40d5-ba19-0635056d48cd')
def test_create_container_with_metadata_key(self):
# create container with the blank value of metadata
container_name = data_utils.rand_name(name='TestContainer')
@ -58,7 +59,7 @@ class ContainerTest(base.BaseObjectTest):
# in the server
self.assertNotIn('x-container-meta-test-container-meta', resp)
@test.idempotent_id('e1e8df32-7b22-44e1-aa08-ccfd8d446b58')
@decorators.idempotent_id('e1e8df32-7b22-44e1-aa08-ccfd8d446b58')
def test_create_container_with_metadata_value(self):
# create container with metadata value
container_name = data_utils.rand_name(name='TestContainer')
@ -77,7 +78,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertEqual(resp['x-container-meta-test-container-meta'],
metadata['test_container_meta'])
@test.idempotent_id('24d16451-1c0c-4e4f-b59c-9840a3aba40e')
@decorators.idempotent_id('24d16451-1c0c-4e4f-b59c-9840a3aba40e')
def test_create_container_with_remove_metadata_key(self):
# create container with the blank value of remove metadata
container_name = data_utils.rand_name(name='TestContainer')
@ -97,7 +98,7 @@ class ContainerTest(base.BaseObjectTest):
container_name)
self.assertNotIn('x-container-meta-test-container-meta', resp)
@test.idempotent_id('8a21ebad-a5c7-4e29-b428-384edc8cd156')
@decorators.idempotent_id('8a21ebad-a5c7-4e29-b428-384edc8cd156')
def test_create_container_with_remove_metadata_value(self):
# create container with remove metadata
container_name = data_utils.rand_name(name='TestContainer')
@ -115,7 +116,7 @@ class ContainerTest(base.BaseObjectTest):
container_name)
self.assertNotIn('x-container-meta-test-container-meta', resp)
@test.idempotent_id('95d3a249-b702-4082-a2c4-14bb860cf06a')
@decorators.idempotent_id('95d3a249-b702-4082-a2c4-14bb860cf06a')
def test_delete_container(self):
# create a container
container_name = self.create_container()
@ -124,7 +125,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Container', 'DELETE')
@test.attr(type='smoke')
@test.idempotent_id('312ff6bd-5290-497f-bda1-7c5fec6697ab')
@decorators.idempotent_id('312ff6bd-5290-497f-bda1-7c5fec6697ab')
def test_list_container_contents(self):
# get container contents list
container_name = self.create_container()
@ -135,7 +136,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Container', 'GET')
self.assertEqual([object_name], object_list)
@test.idempotent_id('4646ac2d-9bfb-4c7d-a3c5-0f527402b3df')
@decorators.idempotent_id('4646ac2d-9bfb-4c7d-a3c5-0f527402b3df')
def test_list_container_contents_with_no_object(self):
# get empty container contents list
container_name = self.create_container()
@ -145,7 +146,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Container', 'GET')
self.assertEmpty(object_list)
@test.idempotent_id('fe323a32-57b9-4704-a996-2e68f83b09bc')
@decorators.idempotent_id('fe323a32-57b9-4704-a996-2e68f83b09bc')
def test_list_container_contents_with_delimiter(self):
# get container contents list using delimiter param
container_name = self.create_container()
@ -159,7 +160,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Container', 'GET')
self.assertEqual([object_name.split('/')[0] + '/'], object_list)
@test.idempotent_id('55b4fa5c-e12e-4ca9-8fcf-a79afe118522')
@decorators.idempotent_id('55b4fa5c-e12e-4ca9-8fcf-a79afe118522')
def test_list_container_contents_with_end_marker(self):
# get container contents list using end_marker param
container_name = self.create_container()
@ -172,7 +173,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Container', 'GET')
self.assertEqual([object_name], object_list)
@test.idempotent_id('196f5034-6ab0-4032-9da9-a937bbb9fba9')
@decorators.idempotent_id('196f5034-6ab0-4032-9da9-a937bbb9fba9')
def test_list_container_contents_with_format_json(self):
# get container contents list using format_json param
container_name = self.create_container()
@ -191,7 +192,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertTrue([c['content_type'] for c in object_list])
self.assertTrue([c['last_modified'] for c in object_list])
@test.idempotent_id('655a53ca-4d15-408c-a377-f4c6dbd0a1fa')
@decorators.idempotent_id('655a53ca-4d15-408c-a377-f4c6dbd0a1fa')
def test_list_container_contents_with_format_xml(self):
# get container contents list using format_xml param
container_name = self.create_container()
@ -215,7 +216,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertEqual(object_list.find(".//last_modified").tag,
'last_modified')
@test.idempotent_id('297ec38b-2b61-4ff4-bcd1-7fa055e97b61')
@decorators.idempotent_id('297ec38b-2b61-4ff4-bcd1-7fa055e97b61')
def test_list_container_contents_with_limit(self):
# get container contents list using limit param
container_name = self.create_container()
@ -228,7 +229,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Container', 'GET')
self.assertEqual([object_name], object_list)
@test.idempotent_id('c31ddc63-2a58-4f6b-b25c-94d2937e6867')
@decorators.idempotent_id('c31ddc63-2a58-4f6b-b25c-94d2937e6867')
def test_list_container_contents_with_marker(self):
# get container contents list using marker param
container_name = self.create_container()
@ -241,7 +242,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Container', 'GET')
self.assertEqual([object_name], object_list)
@test.idempotent_id('58ca6cc9-6af0-408d-aaec-2a6a7b2f0df9')
@decorators.idempotent_id('58ca6cc9-6af0-408d-aaec-2a6a7b2f0df9')
def test_list_container_contents_with_path(self):
# get container contents list using path param
container_name = self.create_container()
@ -255,7 +256,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Container', 'GET')
self.assertEqual([object_name], object_list)
@test.idempotent_id('77e742c7-caf2-4ec9-8aa4-f7d509a3344c')
@decorators.idempotent_id('77e742c7-caf2-4ec9-8aa4-f7d509a3344c')
def test_list_container_contents_with_prefix(self):
# get container contents list using prefix param
container_name = self.create_container()
@ -270,7 +271,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertEqual([object_name], object_list)
@test.attr(type='smoke')
@test.idempotent_id('96e68f0e-19ec-4aa2-86f3-adc6a45e14dd')
@decorators.idempotent_id('96e68f0e-19ec-4aa2-86f3-adc6a45e14dd')
def test_list_container_metadata(self):
# List container metadata
container_name = self.create_container()
@ -286,7 +287,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertIn('x-container-meta-name', resp)
self.assertEqual(resp['x-container-meta-name'], metadata['name'])
@test.idempotent_id('a2faf936-6b13-4f8d-92a2-c2278355821e')
@decorators.idempotent_id('a2faf936-6b13-4f8d-92a2-c2278355821e')
def test_list_no_container_metadata(self):
# HEAD container without metadata
container_name = self.create_container()
@ -296,7 +297,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Container', 'HEAD')
self.assertNotIn('x-container-meta-', str(resp))
@test.idempotent_id('cf19bc0b-7e16-4a5a-aaed-cb0c2fe8deef')
@decorators.idempotent_id('cf19bc0b-7e16-4a5a-aaed-cb0c2fe8deef')
def test_update_container_metadata_with_create_and_delete_metadata(self):
# Send one request of adding and deleting metadata
container_name = data_utils.rand_name(name='TestContainer')
@ -319,7 +320,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertEqual(resp['x-container-meta-test-container-meta2'],
metadata_2['test-container-meta2'])
@test.idempotent_id('2ae5f295-4bf1-4e04-bfad-21e54b62cec5')
@decorators.idempotent_id('2ae5f295-4bf1-4e04-bfad-21e54b62cec5')
def test_update_container_metadata_with_create_metadata(self):
# update container metadata using add metadata
container_name = self.create_container()
@ -336,7 +337,7 @@ class ContainerTest(base.BaseObjectTest):
self.assertEqual(resp['x-container-meta-test-container-meta1'],
metadata['test-container-meta1'])
@test.idempotent_id('3a5ce7d4-6e4b-47d0-9d87-7cd42c325094')
@decorators.idempotent_id('3a5ce7d4-6e4b-47d0-9d87-7cd42c325094')
def test_update_container_metadata_with_delete_metadata(self):
# update container metadata using delete metadata
container_name = data_utils.rand_name(name='TestContainer')
@ -354,7 +355,7 @@ class ContainerTest(base.BaseObjectTest):
container_name)
self.assertNotIn('x-container-meta-test-container-meta1', resp)
@test.idempotent_id('31f40a5f-6a52-4314-8794-cd89baed3040')
@decorators.idempotent_id('31f40a5f-6a52-4314-8794-cd89baed3040')
def test_update_container_metadata_with_create_metadata_key(self):
# update container metadata with a blank value of metadata
container_name = self.create_container()
@ -369,7 +370,7 @@ class ContainerTest(base.BaseObjectTest):
container_name)
self.assertNotIn('x-container-meta-test-container-meta1', resp)
@test.idempotent_id('a2e36378-6f1f-43f4-840a-ffd9cfd61914')
@decorators.idempotent_id('a2e36378-6f1f-43f4-840a-ffd9cfd61914')
def test_update_container_metadata_with_delete_metadata_key(self):
# update container metadata with a blank value of metadata
container_name = data_utils.rand_name(name='TestContainer')

View File

@ -18,6 +18,7 @@ import testtools
from tempest.api.object_storage import base
from tempest import config
from tempest.lib.common.utils import data_utils
from tempest.lib import decorators
from tempest.lib import exceptions
from tempest import test
@ -36,7 +37,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
cls.constraints = body['swift']
@test.attr(type=["negative"])
@test.idempotent_id('30686921-4bed-4764-a038-40d741ed4e78')
@decorators.idempotent_id('30686921-4bed-4764-a038-40d741ed4e78')
@testtools.skipUnless(
CONF.object_storage_feature_enabled.discoverability,
'Discoverability function is disabled')
@ -52,7 +53,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
' longer than ' + str(max_length), str(ex))
@test.attr(type=["negative"])
@test.idempotent_id('41e645bf-2e68-4f84-bf7b-c71aa5cd76ce')
@decorators.idempotent_id('41e645bf-2e68-4f84-bf7b-c71aa5cd76ce')
@testtools.skipUnless(
CONF.object_storage_feature_enabled.discoverability,
'Discoverability function is disabled')
@ -69,7 +70,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
self.assertIn('Metadata name too long', str(ex))
@test.attr(type=["negative"])
@test.idempotent_id('81e36922-326b-4b7c-8155-3bbceecd7a82')
@decorators.idempotent_id('81e36922-326b-4b7c-8155-3bbceecd7a82')
@testtools.skipUnless(
CONF.object_storage_feature_enabled.discoverability,
'Discoverability function is disabled')
@ -86,7 +87,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
self.assertIn('Metadata value longer than ' + str(max_length), str(ex))
@test.attr(type=["negative"])
@test.idempotent_id('ac666539-d566-4f02-8ceb-58e968dfb732')
@decorators.idempotent_id('ac666539-d566-4f02-8ceb-58e968dfb732')
@testtools.skipUnless(
CONF.object_storage_feature_enabled.discoverability,
'Discoverability function is disabled')
@ -106,7 +107,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
str(ex))
@test.attr(type=["negative"])
@test.idempotent_id('1a95ab2e-b712-4a98-8a4d-8ce21b7557d6')
@decorators.idempotent_id('1a95ab2e-b712-4a98-8a4d-8ce21b7557d6')
def test_get_metadata_headers_with_invalid_container_name(self):
# Attempts to retrieve metadata headers with an invalid
# container name.
@ -115,7 +116,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
'invalid_container_name')
@test.attr(type=["negative"])
@test.idempotent_id('125a24fa-90a7-4cfc-b604-44e49d788390')
@decorators.idempotent_id('125a24fa-90a7-4cfc-b604-44e49d788390')
def test_update_metadata_with_nonexistent_container_name(self):
# Attempts to update metadata using a nonexistent container name.
metadata = {'animal': 'penguin'}
@ -125,7 +126,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
'nonexistent_container_name', metadata)
@test.attr(type=["negative"])
@test.idempotent_id('65387dbf-a0e2-4aac-9ddc-16eb3f1f69ba')
@decorators.idempotent_id('65387dbf-a0e2-4aac-9ddc-16eb3f1f69ba')
def test_delete_with_nonexistent_container_name(self):
# Attempts to delete metadata using a nonexistent container name.
metadata = {'animal': 'penguin'}
@ -135,7 +136,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
'nonexistent_container_name', metadata)
@test.attr(type=["negative"])
@test.idempotent_id('14331d21-1e81-420a-beea-19cb5e5207f5')
@decorators.idempotent_id('14331d21-1e81-420a-beea-19cb5e5207f5')
def test_list_all_container_objects_with_nonexistent_container(self):
# Attempts to get a listing of all objects on a container
# that doesn't exist.
@ -145,7 +146,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
'nonexistent_container_name', params)
@test.attr(type=["negative"])
@test.idempotent_id('86b2ab08-92d5-493d-acd2-85f0c848819e')
@decorators.idempotent_id('86b2ab08-92d5-493d-acd2-85f0c848819e')
def test_list_all_container_objects_on_deleted_container(self):
# Attempts to get a listing of all objects on a container
# that was deleted.
@ -159,7 +160,7 @@ class ContainerNegativeTest(base.BaseObjectTest):
container_name, params)
@test.attr(type=["negative"])
@test.idempotent_id('42da116e-1e8c-4c96-9e06-2f13884ed2b1')
@decorators.idempotent_id('42da116e-1e8c-4c96-9e06-2f13884ed2b1')
def test_delete_non_empty_container(self):
# create a container and an object within it
# attempt to delete a container that isn't empty.

View File

@ -15,6 +15,7 @@
from tempest.api.object_storage import base
from tempest.common import custom_matchers
from tempest.common.utils import data_utils
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from tempest import test
@ -43,7 +44,7 @@ class StaticWebTest(base.BaseObjectTest):
cls.delete_containers()
super(StaticWebTest, cls).resource_cleanup()
@test.idempotent_id('c1f055ab-621d-4a6a-831f-846fcb578b8b')
@decorators.idempotent_id('c1f055ab-621d-4a6a-831f-846fcb578b8b')
@test.requires_ext(extension='staticweb', service='object')
def test_web_index(self):
headers = {'web-index': self.object_name}
@ -74,7 +75,7 @@ class StaticWebTest(base.BaseObjectTest):
self.container_name)
self.assertNotIn('x-container-meta-web-index', body)
@test.idempotent_id('941814cf-db9e-4b21-8112-2b6d0af10ee5')
@decorators.idempotent_id('941814cf-db9e-4b21-8112-2b6d0af10ee5')
@test.requires_ext(extension='staticweb', service='object')
def test_web_listing(self):
headers = {'web-listings': 'true'}
@ -106,7 +107,7 @@ class StaticWebTest(base.BaseObjectTest):
self.container_name)
self.assertNotIn('x-container-meta-web-listings', body)
@test.idempotent_id('bc37ec94-43c8-4990-842e-0e5e02fc8926')
@decorators.idempotent_id('bc37ec94-43c8-4990-842e-0e5e02fc8926')
@test.requires_ext(extension='staticweb', service='object')
def test_web_listing_css(self):
headers = {'web-listings': 'true',
@ -130,7 +131,7 @@ class StaticWebTest(base.BaseObjectTest):
css = '<link rel="stylesheet" type="text/css" href="listings.css" />'
self.assertIn(css, body.decode())
@test.idempotent_id('f18b4bef-212e-45e7-b3ca-59af3a465f82')
@decorators.idempotent_id('f18b4bef-212e-45e7-b3ca-59af3a465f82')
@test.requires_ext(extension='staticweb', service='object')
def test_web_error(self):
headers = {'web-listings': 'true',

View File

@ -131,7 +131,7 @@ class ContainerSyncTest(base.BaseObjectTest):
@test.attr(type='slow')
@decorators.skip_because(bug='1317133')
@test.idempotent_id('be008325-1bba-4925-b7dd-93b58f22ce9b')
@decorators.idempotent_id('be008325-1bba-4925-b7dd-93b58f22ce9b')
@testtools.skipIf(
not CONF.object_storage_feature_enabled.container_sync,
'Old-style container sync function is disabled')

View File

@ -14,6 +14,7 @@
from tempest.api.object_storage import test_container_sync
from tempest import config
from tempest.lib import decorators
from tempest import test
CONF = config.CONF
@ -37,7 +38,7 @@ class ContainerSyncMiddlewareTest(test_container_sync.ContainerSyncTest):
cls.cluster_name = CONF.object_storage.cluster_name
@test.attr(type='slow')
@test.idempotent_id('ea4645a1-d147-4976-82f7-e5a7a3065f80')
@decorators.idempotent_id('ea4645a1-d147-4976-82f7-e5a7a3065f80')
@test.requires_ext(extension='container_sync', service='object')
def test_container_synchronization(self):
def make_headers(cont, cont_client):

View File

@ -14,6 +14,7 @@
from tempest.api.object_storage import base
from tempest.common import custom_matchers
from tempest.lib import decorators
from tempest import test
@ -36,7 +37,7 @@ class CrossdomainTest(base.BaseObjectTest):
# Turning http://.../v1/foobar into http://.../
self.account_client.skip_path()
@test.idempotent_id('d1b8b031-b622-4010-82f9-ff78a9e915c7')
@decorators.idempotent_id('d1b8b031-b622-4010-82f9-ff78a9e915c7')
@test.requires_ext(extension='crossdomain', service='object')
def test_get_crossdomain_policy(self):
resp, body = self.account_client.get("crossdomain.xml", {})

View File

@ -15,7 +15,7 @@
from tempest.api.object_storage import base
from tempest.common import custom_matchers
from tempest import test
from tempest.lib import decorators
class HealthcheckTest(base.BaseObjectTest):
@ -25,7 +25,7 @@ class HealthcheckTest(base.BaseObjectTest):
# Turning http://.../v1/foobar into http://.../
self.account_client.skip_path()
@test.idempotent_id('db5723b1-f25c-49a9-bfeb-7b5640caf337')
@decorators.idempotent_id('db5723b1-f25c-49a9-bfeb-7b5640caf337')
def test_get_healthcheck(self):
resp, _ = self.account_client.get("healthcheck", {})

View File

@ -16,8 +16,8 @@
import time
from tempest.api.object_storage import base
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from tempest import test
class ObjectExpiryTest(base.BaseObjectTest):
@ -81,14 +81,14 @@ class ObjectExpiryTest(base.BaseObjectTest):
self.container_name,
self.object_name)
@test.idempotent_id('fb024a42-37f3-4ba5-9684-4f40a7910b41')
@decorators.idempotent_id('fb024a42-37f3-4ba5-9684-4f40a7910b41')
def test_get_object_after_expiry_time(self):
# the 10s is important, because the get calls can take 3s each
# some times
metadata = {'X-Delete-After': '10'}
self._test_object_expiry(metadata)
@test.idempotent_id('e592f18d-679c-48fe-9e36-4be5f47102c5')
@decorators.idempotent_id('e592f18d-679c-48fe-9e36-4be5f47102c5')
def test_get_object_at_expiry_time(self):
metadata = {'X-Delete-At': str(int(time.time()) + 10)}
self._test_object_expiry(metadata)

View File

@ -20,6 +20,7 @@ from six.moves.urllib import parse as urlparse
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
from tempest.lib import decorators
from tempest import test
@ -104,7 +105,7 @@ class ObjectFormPostTest(base.BaseObjectTest):
content_type = 'multipart/form-data; boundary=%s' % boundary
return body, content_type
@test.idempotent_id('80fac02b-6e54-4f7b-be0d-a965b5cbef76')
@decorators.idempotent_id('80fac02b-6e54-4f7b-be0d-a965b5cbef76')
@test.requires_ext(extension='formpost', service='object')
def test_post_object_using_form(self):
body, content_type = self.get_multipart_form()

View File

@ -20,6 +20,7 @@ from six.moves.urllib import parse as urlparse
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from tempest import test
@ -105,7 +106,7 @@ class ObjectFormPostNegativeTest(base.BaseObjectTest):
content_type = 'multipart/form-data; boundary=%s' % boundary
return body, content_type
@test.idempotent_id('d3fb3c4d-e627-48ce-9379-a1631f21336d')
@decorators.idempotent_id('d3fb3c4d-e627-48ce-9379-a1631f21336d')
@test.requires_ext(extension='formpost', service='object')
@test.attr(type=['negative'])
def test_post_object_using_form_expired(self):
@ -122,7 +123,7 @@ class ObjectFormPostNegativeTest(base.BaseObjectTest):
url, body, headers=headers)
self.assertIn('FormPost: Form Expired', str(exc))
@test.idempotent_id('b277257f-113c-4499-b8d1-5fead79f7360')
@decorators.idempotent_id('b277257f-113c-4499-b8d1-5fead79f7360')
@test.requires_ext(extension='formpost', service='object')
def test_post_object_using_form_invalid_signature(self):
self.key = "Wrong"

View File

@ -23,6 +23,7 @@ from tempest.api.object_storage import base
from tempest.common import custom_matchers
from tempest.common.utils import data_utils
from tempest import config
from tempest.lib import decorators
from tempest import test
CONF = config.CONF
@ -75,7 +76,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertNotIn('x-object-meta-' + meta_key, resp)
@test.attr(type='smoke')
@test.idempotent_id('5b4ce26f-3545-46c9-a2ba-5754358a4c62')
@decorators.idempotent_id('5b4ce26f-3545-46c9-a2ba-5754358a4c62')
def test_create_object(self):
# create object
object_name = data_utils.rand_name(name='TestObject')
@ -94,7 +95,7 @@ class ObjectTest(base.BaseObjectTest):
object_name)
self.assertEqual(data, body)
@test.idempotent_id('5daebb1d-f0d5-4dc9-b541-69672eff00b0')
@decorators.idempotent_id('5daebb1d-f0d5-4dc9-b541-69672eff00b0')
def test_create_object_with_content_disposition(self):
# create object with content_disposition
object_name = data_utils.rand_name(name='TestObject')
@ -116,7 +117,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertEqual(resp['content-disposition'], 'inline')
self.assertEqual(body, data)
@test.idempotent_id('605f8317-f945-4bee-ae91-013f1da8f0a0')
@decorators.idempotent_id('605f8317-f945-4bee-ae91-013f1da8f0a0')
def test_create_object_with_content_encoding(self):
# create object with content_encoding
object_name = data_utils.rand_name(name='TestObject')
@ -143,7 +144,7 @@ class ObjectTest(base.BaseObjectTest):
metadata=metadata)
self.assertEqual(body, data_before)
@test.idempotent_id('73820093-0503-40b1-a478-edf0e69c7d1f')
@decorators.idempotent_id('73820093-0503-40b1-a478-edf0e69c7d1f')
def test_create_object_with_etag(self):
# create object with etag
object_name = data_utils.rand_name(name='TestObject')
@ -162,7 +163,7 @@ class ObjectTest(base.BaseObjectTest):
object_name)
self.assertEqual(data, body)
@test.idempotent_id('84dafe57-9666-4f6d-84c8-0814d37923b8')
@decorators.idempotent_id('84dafe57-9666-4f6d-84c8-0814d37923b8')
def test_create_object_with_expect_continue(self):
# create object with expect_continue
@ -179,7 +180,7 @@ class ObjectTest(base.BaseObjectTest):
object_name)
self.assertEqual(data, body)
@test.idempotent_id('4f84422a-e2f2-4403-b601-726a4220b54e')
@decorators.idempotent_id('4f84422a-e2f2-4403-b601-726a4220b54e')
def test_create_object_with_transfer_encoding(self):
# create object with transfer_encoding
object_name = data_utils.rand_name(name='TestObject')
@ -196,7 +197,7 @@ class ObjectTest(base.BaseObjectTest):
object_name)
self.assertEqual(data, body)
@test.idempotent_id('0f3d62a6-47e3-4554-b0e5-1a5dc372d501')
@decorators.idempotent_id('0f3d62a6-47e3-4554-b0e5-1a5dc372d501')
def test_create_object_with_x_fresh_metadata(self):
# create object with x_fresh_metadata
object_name_base = data_utils.rand_name(name='TestObject')
@ -222,7 +223,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertNotIn('x-object-meta-test-meta', resp)
self.assertEqual(data, body)
@test.idempotent_id('1c7ed3e4-2099-406b-b843-5301d4811baf')
@decorators.idempotent_id('1c7ed3e4-2099-406b-b843-5301d4811baf')
def test_create_object_with_x_object_meta(self):
# create object with object_meta
object_name = data_utils.rand_name(name='TestObject')
@ -241,7 +242,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertEqual(resp['x-object-meta-test-meta'], 'Meta')
self.assertEqual(data, body)
@test.idempotent_id('e4183917-33db-4153-85cc-4dacbb938865')
@decorators.idempotent_id('e4183917-33db-4153-85cc-4dacbb938865')
def test_create_object_with_x_object_metakey(self):
# create object with the blank value of metadata
object_name = data_utils.rand_name(name='TestObject')
@ -260,7 +261,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertEqual(resp['x-object-meta-test-meta'], '')
self.assertEqual(data, body)
@test.idempotent_id('ce798afc-b278-45de-a5ce-2ea124b98b99')
@decorators.idempotent_id('ce798afc-b278-45de-a5ce-2ea124b98b99')
def test_create_object_with_x_remove_object_meta(self):
# create object with x_remove_object_meta
object_name = data_utils.rand_name(name='TestObject')
@ -283,7 +284,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertNotIn('x-object-meta-test-meta', resp)
self.assertEqual(data, body)
@test.idempotent_id('ad21e342-7916-4f9e-ab62-a1f885f2aaf9')
@decorators.idempotent_id('ad21e342-7916-4f9e-ab62-a1f885f2aaf9')
def test_create_object_with_x_remove_object_metakey(self):
# create object with the blank value of remove metadata
object_name = data_utils.rand_name(name='TestObject')
@ -306,7 +307,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertNotIn('x-object-meta-test-meta', resp)
self.assertEqual(data, body)
@test.idempotent_id('17738d45-03bd-4d45-9e0b-7b2f58f98687')
@decorators.idempotent_id('17738d45-03bd-4d45-9e0b-7b2f58f98687')
def test_delete_object(self):
# create object
object_name = data_utils.rand_name(name='TestObject')
@ -319,7 +320,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'DELETE')
@test.attr(type='smoke')
@test.idempotent_id('7a94c25d-66e6-434c-9c38-97d4e2c29945')
@decorators.idempotent_id('7a94c25d-66e6-434c-9c38-97d4e2c29945')
def test_update_object_metadata(self):
# update object metadata
object_name, _ = self.create_object(self.container_name)
@ -338,7 +339,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertIn('x-object-meta-test-meta', resp)
self.assertEqual(resp['x-object-meta-test-meta'], 'Meta')
@test.idempotent_id('48650ed0-c189-4e1e-ad6b-1d4770c6e134')
@decorators.idempotent_id('48650ed0-c189-4e1e-ad6b-1d4770c6e134')
def test_update_object_metadata_with_remove_metadata(self):
# update object metadata with remove metadata
object_name = data_utils.rand_name(name='TestObject')
@ -362,7 +363,7 @@ class ObjectTest(base.BaseObjectTest):
object_name)
self.assertNotIn('x-object-meta-test-meta1', resp)
@test.idempotent_id('f726174b-2ded-4708-bff7-729d12ce1f84')
@decorators.idempotent_id('f726174b-2ded-4708-bff7-729d12ce1f84')
def test_update_object_metadata_with_create_and_remove_metadata(self):
# creation and deletion of metadata with one request
object_name = data_utils.rand_name(name='TestObject')
@ -389,7 +390,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertIn('x-object-meta-test-meta2', resp)
self.assertEqual(resp['x-object-meta-test-meta2'], 'Meta2')
@test.idempotent_id('08854588-6449-4bb7-8cca-f2e1040f5e6f')
@decorators.idempotent_id('08854588-6449-4bb7-8cca-f2e1040f5e6f')
def test_update_object_metadata_with_x_object_manifest(self):
# update object metadata with x_object_manifest
@ -416,7 +417,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertIn('x-object-manifest', resp)
self.assertNotEqual(len(resp['x-object-manifest']), 0)
@test.idempotent_id('0dbbe89c-6811-4d84-a2df-eca2bdd40c0e')
@decorators.idempotent_id('0dbbe89c-6811-4d84-a2df-eca2bdd40c0e')
def test_update_object_metadata_with_x_object_metakey(self):
# update object metadata with a blank value of metadata
object_name, _ = self.create_object(self.container_name)
@ -435,7 +436,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertIn('x-object-meta-test-meta', resp)
self.assertEqual(resp['x-object-meta-test-meta'], '')
@test.idempotent_id('9a88dca4-b684-425b-806f-306cd0e57e42')
@decorators.idempotent_id('9a88dca4-b684-425b-806f-306cd0e57e42')
def test_update_object_metadata_with_x_remove_object_metakey(self):
# update object metadata with a blank value of remove metadata
object_name = data_utils.rand_name(name='TestObject')
@ -460,7 +461,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertNotIn('x-object-meta-test-meta', resp)
@test.attr(type='smoke')
@test.idempotent_id('9a447cf6-de06-48de-8226-a8c6ed31caf2')
@decorators.idempotent_id('9a447cf6-de06-48de-8226-a8c6ed31caf2')
def test_list_object_metadata(self):
# get object metadata
object_name = data_utils.rand_name(name='TestObject')
@ -478,7 +479,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertIn('x-object-meta-test-meta', resp)
self.assertEqual(resp['x-object-meta-test-meta'], 'Meta')
@test.idempotent_id('170fb90e-f5c3-4b1f-ae1b-a18810821172')
@decorators.idempotent_id('170fb90e-f5c3-4b1f-ae1b-a18810821172')
def test_list_no_object_metadata(self):
# get empty list of object metadata
object_name, _ = self.create_object(self.container_name)
@ -489,7 +490,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'HEAD')
self.assertNotIn('x-object-meta-', str(resp))
@test.idempotent_id('23a3674c-d6de-46c3-86af-ff92bfc8a3da')
@decorators.idempotent_id('23a3674c-d6de-46c3-86af-ff92bfc8a3da')
def test_list_object_metadata_with_x_object_manifest(self):
# get object metadata with x_object_manifest
@ -530,7 +531,7 @@ class ObjectTest(base.BaseObjectTest):
'%s/%s' % (self.container_name, object_name))
@test.attr(type='smoke')
@test.idempotent_id('02610ba7-86b7-4272-9ed8-aa8d417cb3cd')
@decorators.idempotent_id('02610ba7-86b7-4272-9ed8-aa8d417cb3cd')
def test_get_object(self):
# retrieve object's data (in response body)
@ -543,7 +544,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertEqual(body, data)
@test.idempotent_id('005f9bf6-e06d-41ec-968e-96c78e0b1d82')
@decorators.idempotent_id('005f9bf6-e06d-41ec-968e-96c78e0b1d82')
def test_get_object_with_metadata(self):
# get object with metadata
object_name = data_utils.rand_name(name='TestObject')
@ -562,7 +563,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertEqual(resp['x-object-meta-test-meta'], 'Meta')
self.assertEqual(body, data)
@test.idempotent_id('05a1890e-7db9-4a6c-90a8-ce998a2bddfa')
@decorators.idempotent_id('05a1890e-7db9-4a6c-90a8-ce998a2bddfa')
def test_get_object_with_range(self):
# get object with range
object_name = data_utils.rand_name(name='TestObject')
@ -580,7 +581,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'GET')
self.assertEqual(body, data[rand_num - 3: rand_num])
@test.idempotent_id('11b4515b-7ba7-4ca8-8838-357ded86fc10')
@decorators.idempotent_id('11b4515b-7ba7-4ca8-8838-357ded86fc10')
def test_get_object_with_x_object_manifest(self):
# get object with x_object_manifest
@ -623,7 +624,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertEqual(''.join(data_segments), body.decode())
@test.idempotent_id('c05b4013-e4de-47af-be84-e598062b16fc')
@decorators.idempotent_id('c05b4013-e4de-47af-be84-e598062b16fc')
def test_get_object_with_if_match(self):
# get object with if_match
object_name = data_utils.rand_name(name='TestObject')
@ -643,7 +644,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'GET')
self.assertEqual(body, data)
@test.idempotent_id('be133639-e5d2-4313-9b1f-2d59fc054a16')
@decorators.idempotent_id('be133639-e5d2-4313-9b1f-2d59fc054a16')
def test_get_object_with_if_modified_since(self):
# get object with if_modified_since
object_name = data_utils.rand_name(name='TestObject')
@ -663,7 +664,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'GET')
self.assertEqual(body, data)
@test.idempotent_id('641500d5-1612-4042-a04d-01fc4528bc30')
@decorators.idempotent_id('641500d5-1612-4042-a04d-01fc4528bc30')
def test_get_object_with_if_none_match(self):
# get object with if_none_match
object_name = data_utils.rand_name(name='TestObject')
@ -685,7 +686,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'GET')
self.assertEqual(body, data)
@test.idempotent_id('0aa1201c-10aa-467a-bee7-63cbdd463152')
@decorators.idempotent_id('0aa1201c-10aa-467a-bee7-63cbdd463152')
def test_get_object_with_if_unmodified_since(self):
# get object with if_unmodified_since
object_name, data = self.create_object(self.container_name)
@ -700,7 +701,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'GET')
self.assertEqual(body, data)
@test.idempotent_id('94587078-475f-48f9-a40f-389c246e31cd')
@decorators.idempotent_id('94587078-475f-48f9-a40f-389c246e31cd')
def test_get_object_with_x_newest(self):
# get object with x_newest
object_name, data = self.create_object(self.container_name)
@ -713,7 +714,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertHeaders(resp, 'Object', 'GET')
self.assertEqual(body, data)
@test.idempotent_id('1a9ab572-1b66-4981-8c21-416e2a5e6011')
@decorators.idempotent_id('1a9ab572-1b66-4981-8c21-416e2a5e6011')
def test_copy_object_in_same_container(self):
# create source object
src_object_name = data_utils.rand_name(name='SrcObject')
@ -737,7 +738,7 @@ class ObjectTest(base.BaseObjectTest):
dst_object_name)
self.assertEqual(body, src_data)
@test.idempotent_id('2248abba-415d-410b-9c30-22dff9cd6e67')
@decorators.idempotent_id('2248abba-415d-410b-9c30-22dff9cd6e67')
def test_copy_object_to_itself(self):
# change the content type of an existing object
@ -758,7 +759,7 @@ class ObjectTest(base.BaseObjectTest):
object_name)
self.assertEqual(resp['content-type'], metadata['content-type'])
@test.idempotent_id('06f90388-2d0e-40aa-934c-e9a8833e958a')
@decorators.idempotent_id('06f90388-2d0e-40aa-934c-e9a8833e958a')
def test_copy_object_2d_way(self):
# create source object
src_object_name = data_utils.rand_name(name='SrcObject')
@ -782,7 +783,7 @@ class ObjectTest(base.BaseObjectTest):
# check data
self._check_copied_obj(dst_object_name, src_data)
@test.idempotent_id('aa467252-44f3-472a-b5ae-5b57c3c9c147')
@decorators.idempotent_id('aa467252-44f3-472a-b5ae-5b57c3c9c147')
def test_copy_object_across_containers(self):
# create a container to use as a source container
src_container_name = data_utils.rand_name(name='TestSourceContainer')
@ -821,7 +822,7 @@ class ObjectTest(base.BaseObjectTest):
self.assertIn(actual_meta_key, resp)
self.assertEqual(resp[actual_meta_key], meta_value)
@test.idempotent_id('5a9e2cc6-85b6-46fc-916d-0cbb7a88e5fd')
@decorators.idempotent_id('5a9e2cc6-85b6-46fc-916d-0cbb7a88e5fd')
def test_copy_object_with_x_fresh_metadata(self):
# create source object
metadata = {'x-object-meta-src': 'src_value'}
@ -842,7 +843,7 @@ class ObjectTest(base.BaseObjectTest):
# check that destination object does NOT have any object-meta
self._check_copied_obj(dst_object_name, data, not_in_meta=["src"])
@test.idempotent_id('a28a8b99-e701-4d7e-9d84-3b66f121460b')
@decorators.idempotent_id('a28a8b99-e701-4d7e-9d84-3b66f121460b')
def test_copy_object_with_x_object_metakey(self):
# create source object
metadata = {'x-object-meta-src': 'src_value'}
@ -865,7 +866,7 @@ class ObjectTest(base.BaseObjectTest):
# check destination object
self._check_copied_obj(dst_obj_name, data, in_meta=["test", "src"])
@test.idempotent_id('edabedca-24c3-4322-9b70-d6d9f942a074')
@decorators.idempotent_id('edabedca-24c3-4322-9b70-d6d9f942a074')
def test_copy_object_with_x_object_meta(self):
# create source object
metadata = {'x-object-meta-src': 'src_value'}
@ -888,7 +889,7 @@ class ObjectTest(base.BaseObjectTest):
# check destination object
self._check_copied_obj(dst_obj_name, data, in_meta=["test", "src"])
@test.idempotent_id('e3e6a64a-9f50-4955-b987-6ce6767c97fb')
@decorators.idempotent_id('e3e6a64a-9f50-4955-b987-6ce6767c97fb')
def test_object_upload_in_segments(self):
# create object
object_name = data_utils.rand_name(name='LObject')
@ -930,7 +931,7 @@ class ObjectTest(base.BaseObjectTest):
self.container_name, object_name)
self.assertEqual(''.join(data_segments), body.decode())
@test.idempotent_id('50d01f12-526f-4360-9ac2-75dd508d7b68')
@decorators.idempotent_id('50d01f12-526f-4360-9ac2-75dd508d7b68')
def test_get_object_if_different(self):
# http://en.wikipedia.org/wiki/HTTP_ETag
# Make a conditional request for an object using the If-None-Match
@ -984,7 +985,7 @@ class PublicObjectTest(base.BaseObjectTest):
self.delete_containers([self.container_name])
super(PublicObjectTest, self).tearDown()
@test.idempotent_id('07c9cf95-c0d4-4b49-b9c8-0ef2c9b27193')
@decorators.idempotent_id('07c9cf95-c0d4-4b49-b9c8-0ef2c9b27193')
def test_access_public_container_object_without_using_creds(self):
# make container public-readable and access an object in it object
# anonymously, without using credentials
@ -1021,7 +1022,7 @@ class PublicObjectTest(base.BaseObjectTest):
self.assertEqual(body, data)
@test.idempotent_id('54e2a2fe-42dc-491b-8270-8e4217dd4cdc')
@decorators.idempotent_id('54e2a2fe-42dc-491b-8270-8e4217dd4cdc')
def test_access_public_object_with_another_user_creds(self):
# make container public-readable and access an object in it using
# another user's credentials

View File

@ -20,6 +20,7 @@ from tempest.api.object_storage import base
from tempest.common import custom_matchers
from tempest.common.utils import data_utils
from tempest.lib.common.utils import test_utils
from tempest.lib import decorators
from tempest import test
# Each segment, except for the final one, must be at least 1 megabyte
@ -105,7 +106,7 @@ class ObjectSloTest(base.BaseObjectTest):
resp['etag'] = resp['etag'].strip('"')
self.assertHeaders(resp, 'Object', method)
@test.idempotent_id('2c3f24a6-36e8-4711-9aa2-800ee1fc7b5b')
@decorators.idempotent_id('2c3f24a6-36e8-4711-9aa2-800ee1fc7b5b')
@test.requires_ext(extension='slo', service='object')
def test_upload_manifest(self):
# create static large object from multipart manifest
@ -120,7 +121,7 @@ class ObjectSloTest(base.BaseObjectTest):
self._assertHeadersSLO(resp, 'PUT')
@test.idempotent_id('e69ad766-e1aa-44a2-bdd2-bf62c09c1456')
@decorators.idempotent_id('e69ad766-e1aa-44a2-bdd2-bf62c09c1456')
@test.requires_ext(extension='slo', service='object')
def test_list_large_object_metadata(self):
# list static large object metadata using multipart manifest
@ -132,7 +133,7 @@ class ObjectSloTest(base.BaseObjectTest):
self._assertHeadersSLO(resp, 'HEAD')
@test.idempotent_id('49bc49bc-dd1b-4c0f-904e-d9f10b830ee8')
@decorators.idempotent_id('49bc49bc-dd1b-4c0f-904e-d9f10b830ee8')
@test.requires_ext(extension='slo', service='object')
def test_retrieve_large_object(self):
# list static large object using multipart manifest
@ -147,7 +148,7 @@ class ObjectSloTest(base.BaseObjectTest):
sum_data = self.content + self.content
self.assertEqual(body, sum_data)
@test.idempotent_id('87b6dfa1-abe9-404d-8bf0-6c3751e6aa77')
@decorators.idempotent_id('87b6dfa1-abe9-404d-8bf0-6c3751e6aa77')
@test.requires_ext(extension='slo', service='object')
def test_delete_large_object(self):
# delete static large object using multipart manifest

View File

@ -20,6 +20,7 @@ from six.moves.urllib import parse as urlparse
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
from tempest.lib import decorators
from tempest import test
@ -85,7 +86,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
return url
@test.idempotent_id('f91c96d4-1230-4bba-8eb9-84476d18d991')
@decorators.idempotent_id('f91c96d4-1230-4bba-8eb9-84476d18d991')
@test.requires_ext(extension='tempurl', service='object')
def test_get_object_using_temp_url(self):
expires = self._get_expiry_date()
@ -104,7 +105,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
resp, body = self.object_client.head(url)
self.assertHeaders(resp, 'Object', 'HEAD')
@test.idempotent_id('671f9583-86bd-4128-a034-be282a68c5d8')
@decorators.idempotent_id('671f9583-86bd-4128-a034-be282a68c5d8')
@test.requires_ext(extension='tempurl', service='object')
def test_get_object_using_temp_url_key_2(self):
key2 = 'Meta2-'
@ -128,7 +129,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
resp, body = self.object_client.get(url)
self.assertEqual(body, self.content)
@test.idempotent_id('9b08dade-3571-4152-8a4f-a4f2a873a735')
@decorators.idempotent_id('9b08dade-3571-4152-8a4f-a4f2a873a735')
@test.requires_ext(extension='tempurl', service='object')
def test_put_object_using_temp_url(self):
new_data = data_utils.random_bytes(size=len(self.object_name))
@ -154,7 +155,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
_, body = self.object_client.get(url)
self.assertEqual(body, new_data)
@test.idempotent_id('249a0111-5ad3-4534-86a7-1993d55f9185')
@decorators.idempotent_id('249a0111-5ad3-4534-86a7-1993d55f9185')
@test.requires_ext(extension='tempurl', service='object')
def test_head_object_using_temp_url(self):
expires = self._get_expiry_date()
@ -168,7 +169,7 @@ class ObjectTempUrlTest(base.BaseObjectTest):
resp, body = self.object_client.head(url)
self.assertHeaders(resp, 'Object', 'HEAD')
@test.idempotent_id('9d9cfd90-708b-465d-802c-e4a8090b823d')
@decorators.idempotent_id('9d9cfd90-708b-465d-802c-e4a8090b823d')
@test.requires_ext(extension='tempurl', service='object')
def test_get_object_using_temp_url_with_inline_query_parameter(self):
expires = self._get_expiry_date()

View File

@ -20,6 +20,7 @@ from six.moves.urllib import parse as urlparse
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from tempest import test
@ -91,7 +92,7 @@ class ObjectTempUrlNegativeTest(base.BaseObjectTest):
return url
@test.attr(type=['negative'])
@test.idempotent_id('5a583aca-c804-41ba-9d9a-e7be132bdf0b')
@decorators.idempotent_id('5a583aca-c804-41ba-9d9a-e7be132bdf0b')
@test.requires_ext(extension='tempurl', service='object')
def test_get_object_after_expiration_time(self):

View File

@ -18,7 +18,7 @@ import testtools
from tempest.api.object_storage import base
from tempest.common.utils import data_utils
from tempest import config
from tempest import test
from tempest.lib import decorators
CONF = config.CONF
@ -44,7 +44,7 @@ class ContainerTest(base.BaseObjectTest):
header_value = resp.get('x-versions-location', 'Missing Header')
self.assertEqual(header_value, versioned)
@test.idempotent_id('a151e158-dcbf-4a1f-a1e7-46cd65895a6f')
@decorators.idempotent_id('a151e158-dcbf-4a1f-a1e7-46cd65895a6f')
@testtools.skipIf(
not CONF.object_storage_feature_enabled.object_versioning,
'Object-versioning is disabled')