Adding description for testcases - swift part1

When Tempest is used in customer site, often we are required to
provide a testcase list including testcase names and descriptions.
Now no this kind of doc is available, so we can add descriptions
with the format of doc string for every testcase, so later we
can generata such a testcase description list.

There are hundreds of testcases missing descriptions, so we can
add them gradually, and limit the modified files in one patch
for the convenience of reviewing.

Change-Id: Ib0df766d305ab2583d284d4c0aed32e7685eb595
partially-implements: blueprint testcase-description
This commit is contained in:
zhufl 2020-08-18 11:11:16 +08:00
parent 25ec807af3
commit 9b442510e7
7 changed files with 150 additions and 74 deletions

View File

@ -28,6 +28,7 @@ CONF = config.CONF
class AccountTest(base.BaseObjectTest): class AccountTest(base.BaseObjectTest):
"""Test account metadata and containers"""
credentials = [['operator', CONF.object_storage.operator_role], credentials = [['operator', CONF.object_storage.operator_role],
['operator_alt', CONF.object_storage.operator_role]] ['operator_alt', CONF.object_storage.operator_role]]
@ -54,7 +55,7 @@ class AccountTest(base.BaseObjectTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('3499406a-ae53-4f8c-b43a-133d4dc6fe3f') @decorators.idempotent_id('3499406a-ae53-4f8c-b43a-133d4dc6fe3f')
def test_list_containers(self): def test_list_containers(self):
# list of all containers should not be empty """Test listing containers"""
resp, container_list = self.account_client.list_account_containers() resp, container_list = self.account_client.list_account_containers()
self.assertHeaders(resp, 'Account', 'GET') self.assertHeaders(resp, 'Account', 'GET')
@ -66,11 +67,10 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('884ec421-fbad-4fcc-916b-0580f2699565') @decorators.idempotent_id('884ec421-fbad-4fcc-916b-0580f2699565')
def test_list_no_containers(self): def test_list_no_containers(self):
# List request to empty account """Test listing containers for an account without container"""
# To test listing no containers, create new user other than # To test listing no containers, create new user other than
# the base user of this instance. # the base user of this instance.
resp, container_list = \ resp, container_list = \
self.os_operator.account_client.list_account_containers() self.os_operator.account_client.list_account_containers()
@ -103,7 +103,7 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('1c7efa35-e8a2-4b0b-b5ff-862c7fd83704') @decorators.idempotent_id('1c7efa35-e8a2-4b0b-b5ff-862c7fd83704')
def test_list_containers_with_format_json(self): def test_list_containers_with_format_json(self):
# list containers setting format parameter to 'json' """Test listing containers setting format parameter to 'json'"""
params = {'format': 'json'} params = {'format': 'json'}
resp, container_list = self.account_client.list_account_containers( resp, container_list = self.account_client.list_account_containers(
params=params) params=params)
@ -115,7 +115,7 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('4477b609-1ca6-4d4b-b25d-ad3f01086089') @decorators.idempotent_id('4477b609-1ca6-4d4b-b25d-ad3f01086089')
def test_list_containers_with_format_xml(self): def test_list_containers_with_format_xml(self):
# list containers setting format parameter to 'xml' """Test listing containers setting format parameter to 'xml'"""
params = {'format': 'xml'} params = {'format': 'xml'}
resp, container_list = self.account_client.list_account_containers( resp, container_list = self.account_client.list_account_containers(
params=params) params=params)
@ -133,13 +133,18 @@ class AccountTest(base.BaseObjectTest):
not CONF.object_storage_feature_enabled.discoverability, not CONF.object_storage_feature_enabled.discoverability,
'Discoverability function is disabled') 'Discoverability function is disabled')
def test_list_extensions(self): def test_list_extensions(self):
"""Test listing capabilities"""
resp = self.capabilities_client.list_capabilities() resp = self.capabilities_client.list_capabilities()
self.assertThat(resp, custom_matchers.AreAllWellFormatted()) self.assertThat(resp, custom_matchers.AreAllWellFormatted())
@decorators.idempotent_id('5cfa4ab2-4373-48dd-a41f-a532b12b08b2') @decorators.idempotent_id('5cfa4ab2-4373-48dd-a41f-a532b12b08b2')
def test_list_containers_with_limit(self): def test_list_containers_with_limit(self):
# list containers one of them, half of them then all of them """Test listing containers with limit parameter
Listing containers limited to one of them, half of them, and then all
of them.
"""
for limit in (1, self.containers_count // 2, for limit in (1, self.containers_count // 2,
self.containers_count): self.containers_count):
params = {'limit': limit} params = {'limit': limit}
@ -151,10 +156,11 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('638f876d-6a43-482a-bbb3-0840bca101c6') @decorators.idempotent_id('638f876d-6a43-482a-bbb3-0840bca101c6')
def test_list_containers_with_marker(self): def test_list_containers_with_marker(self):
# list containers using marker param """Test listing containers with marker parameter
# first expect to get 0 container as we specified last
# the container as marker First expect to get 0 container as we specified the last container
# second expect to get the bottom half of the containers as marker, second expect to get the bottom half of the containers.
"""
params = {'marker': self.containers[-1]} params = {'marker': self.containers[-1]}
resp, container_list = \ resp, container_list = \
self.account_client.list_account_containers(params=params) self.account_client.list_account_containers(params=params)
@ -172,10 +178,11 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('5ca164e4-7bde-43fa-bafb-913b53b9e786') @decorators.idempotent_id('5ca164e4-7bde-43fa-bafb-913b53b9e786')
def test_list_containers_with_end_marker(self): def test_list_containers_with_end_marker(self):
# list containers using end_marker param """Test listing containers with end_marker parameter
# first expect to get 0 container as we specified first container as
# end_marker First expect to get 0 container as we specified first container as
# second expect to get the top half of the containers end_marker, second expect to get the top half of the containers
"""
params = {'end_marker': self.containers[0]} params = {'end_marker': self.containers[0]}
resp, container_list = \ resp, container_list = \
self.account_client.list_account_containers(params=params) self.account_client.list_account_containers(params=params)
@ -190,7 +197,12 @@ class AccountTest(base.BaseObjectTest):
@decorators.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): def test_list_containers_with_marker_and_end_marker(self):
# list containers combining marker and end_marker param """Test listing containers with marker and end_marker parameter
If we use the first container as marker, and the last container as
end_marker, then we should get all containers excluding the first one
and the last one.
"""
params = {'marker': self.containers[0], params = {'marker': self.containers[0],
'end_marker': self.containers[self.containers_count - 1]} 'end_marker': self.containers[self.containers_count - 1]}
resp, container_list = self.account_client.list_account_containers( resp, container_list = self.account_client.list_account_containers(
@ -200,8 +212,10 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('f7064ae8-dbcc-48da-b594-82feef6ea5af') @decorators.idempotent_id('f7064ae8-dbcc-48da-b594-82feef6ea5af')
def test_list_containers_with_limit_and_marker(self): def test_list_containers_with_limit_and_marker(self):
# list containers combining marker and limit param """Test listing containers combining marker and limit parameter
# result are always limitated by the limit whatever the marker
Result are always limited by the limit whatever the marker.
"""
for marker in random.choice(self.containers): for marker in random.choice(self.containers):
limit = random.randint(0, self.containers_count - 1) limit = random.randint(0, self.containers_count - 1)
params = {'marker': marker, params = {'marker': marker,
@ -215,6 +229,10 @@ class AccountTest(base.BaseObjectTest):
@decorators.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): def test_list_containers_with_limit_and_end_marker(self):
"""Test listing containers combining end_marker and limit parameter
Result are always limited by the limit whatever the end_marker.
"""
# list containers combining limit and end_marker param # list containers combining limit and end_marker param
limit = random.randint(1, self.containers_count) limit = random.randint(1, self.containers_count)
params = {'limit': limit, params = {'limit': limit,
@ -227,7 +245,11 @@ class AccountTest(base.BaseObjectTest):
@decorators.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): def test_list_containers_with_limit_and_marker_and_end_marker(self):
# list containers combining limit, marker and end_marker param """Test listing containers combining marker and end_marker and limit
Result are always limited by the limit whatever the marker and the
end_marker.
"""
limit = random.randint(1, self.containers_count) limit = random.randint(1, self.containers_count)
params = {'limit': limit, params = {'limit': limit,
'marker': self.containers[0], 'marker': self.containers[0],
@ -240,7 +262,7 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('365e6fc7-1cfe-463b-a37c-8bd08d47b6aa') @decorators.idempotent_id('365e6fc7-1cfe-463b-a37c-8bd08d47b6aa')
def test_list_containers_with_prefix(self): def test_list_containers_with_prefix(self):
# list containers that have a name that starts with a prefix """Test listing containers that have a name starting with a prefix"""
prefix = 'tempest-a' prefix = 'tempest-a'
params = {'prefix': prefix} params = {'prefix': prefix}
resp, container_list = self.account_client.list_account_containers( resp, container_list = self.account_client.list_account_containers(
@ -252,7 +274,7 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('b1811cff-d1ed-4c15-a52e-efd8de41cf34') @decorators.idempotent_id('b1811cff-d1ed-4c15-a52e-efd8de41cf34')
def test_list_containers_reverse_order(self): def test_list_containers_reverse_order(self):
# list containers in reverse order """Test listing containers in reverse order"""
_, orig_container_list = self.account_client.list_account_containers() _, orig_container_list = self.account_client.list_account_containers()
params = {'reverse': True} params = {'reverse': True}
@ -265,8 +287,7 @@ class AccountTest(base.BaseObjectTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('4894c312-6056-4587-8d6f-86ffbf861f80') @decorators.idempotent_id('4894c312-6056-4587-8d6f-86ffbf861f80')
def test_list_account_metadata(self): def test_list_account_metadata(self):
# list all account metadata """Test listing account metadata"""
# set metadata to account # set metadata to account
metadata = {'test-account-meta1': 'Meta1', metadata = {'test-account-meta1': 'Meta1',
'test-account-meta2': 'Meta2'} 'test-account-meta2': 'Meta2'}
@ -282,14 +303,14 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('b904c2e3-24c2-4dba-ad7d-04e90a761be5') @decorators.idempotent_id('b904c2e3-24c2-4dba-ad7d-04e90a761be5')
def test_list_no_account_metadata(self): def test_list_no_account_metadata(self):
# list no account metadata """Test listing account metadata for account without metadata"""
resp, _ = self.account_client.list_account_metadata() resp, _ = self.account_client.list_account_metadata()
self.assertHeaders(resp, 'Account', 'HEAD') self.assertHeaders(resp, 'Account', 'HEAD')
self.assertNotIn('x-account-meta-', str(resp)) self.assertNotIn('x-account-meta-', str(resp))
@decorators.idempotent_id('e2a08b5f-3115-4768-a3ee-d4287acd6c08') @decorators.idempotent_id('e2a08b5f-3115-4768-a3ee-d4287acd6c08')
def test_update_account_metadata_with_create_metadata(self): def test_update_account_metadata_with_create_metadata(self):
# add metadata to account """Test adding metadata to account"""
metadata = {'test-account-meta1': 'Meta1'} metadata = {'test-account-meta1': 'Meta1'}
resp, _ = self.account_client.create_update_or_delete_account_metadata( resp, _ = self.account_client.create_update_or_delete_account_metadata(
create_update_metadata=metadata) create_update_metadata=metadata)
@ -305,7 +326,7 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('9f60348d-c46f-4465-ae06-d51dbd470953') @decorators.idempotent_id('9f60348d-c46f-4465-ae06-d51dbd470953')
def test_update_account_metadata_with_delete_metadata(self): def test_update_account_metadata_with_delete_metadata(self):
# delete metadata from account """Test deleting metadata from account"""
metadata = {'test-account-meta1': 'Meta1'} metadata = {'test-account-meta1': 'Meta1'}
self.account_client.create_update_or_delete_account_metadata( self.account_client.create_update_or_delete_account_metadata(
create_update_metadata=metadata) create_update_metadata=metadata)
@ -318,8 +339,11 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('64fd53f3-adbd-4639-af54-436e4982dbfb') @decorators.idempotent_id('64fd53f3-adbd-4639-af54-436e4982dbfb')
def test_update_account_metadata_with_create_metadata_key(self): def test_update_account_metadata_with_create_metadata_key(self):
# if the value of metadata is not set, the metadata is not """Test adding metadata to account with empty value
# registered at a server
Adding metadata with empty value to account, the metadata is not
registered.
"""
metadata = {'test-account-meta1': ''} metadata = {'test-account-meta1': ''}
resp, _ = self.account_client.create_update_or_delete_account_metadata( resp, _ = self.account_client.create_update_or_delete_account_metadata(
create_update_metadata=metadata) create_update_metadata=metadata)
@ -330,8 +354,11 @@ class AccountTest(base.BaseObjectTest):
@decorators.idempotent_id('d4d884d3-4696-4b85-bc98-4f57c4dd2bf1') @decorators.idempotent_id('d4d884d3-4696-4b85-bc98-4f57c4dd2bf1')
def test_update_account_metadata_with_delete_metadata_key(self): def test_update_account_metadata_with_delete_metadata_key(self):
# Although the value of metadata is not set, the feature of """Test deleting metadata from account with empty value
# deleting metadata is valid
Although the value of metadata is not set, the feature of deleting
metadata is valid, so the metadata is removed from account.
"""
metadata_1 = {'test-account-meta1': 'Meta1'} metadata_1 = {'test-account-meta1': 'Meta1'}
self.account_client.create_update_or_delete_account_metadata( self.account_client.create_update_or_delete_account_metadata(
create_update_metadata=metadata_1) create_update_metadata=metadata_1)
@ -345,7 +372,11 @@ class AccountTest(base.BaseObjectTest):
@decorators.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): def test_update_account_metadata_with_create_and_delete_metadata(self):
# Send a request adding and deleting metadata requests simultaneously """Test adding and deleting metadata simultaneously
Send a request adding and deleting metadata requests simultaneously,
both adding and deleting of metadata will succeed.
"""
metadata_1 = {'test-account-meta1': 'Meta1'} metadata_1 = {'test-account-meta1': 'Meta1'}
self.account_client.create_update_or_delete_account_metadata( self.account_client.create_update_or_delete_account_metadata(
create_update_metadata=metadata_1) create_update_metadata=metadata_1)

View File

@ -33,6 +33,8 @@ CONF = config.CONF
class ContainerSyncTest(base.BaseObjectTest): class ContainerSyncTest(base.BaseObjectTest):
"""Test container synchronization"""
credentials = [['operator', CONF.object_storage.operator_role], credentials = [['operator', CONF.object_storage.operator_role],
['operator_alt', CONF.object_storage.operator_role]] ['operator_alt', CONF.object_storage.operator_role]]
@ -129,6 +131,7 @@ class ContainerSyncTest(base.BaseObjectTest):
not CONF.object_storage_feature_enabled.container_sync, not CONF.object_storage_feature_enabled.container_sync,
'Old-style container sync function is disabled') 'Old-style container sync function is disabled')
def test_container_synchronization(self): def test_container_synchronization(self):
"""Test container synchronization"""
def make_headers(cont, cont_client): def make_headers(cont, cont_client):
# tell first container to synchronize to a second # tell first container to synchronize to a second
client_proxy_ip = \ client_proxy_ip = \

View File

@ -27,6 +27,7 @@ CONF = config.CONF
class ContainerSyncMiddlewareTest(test_container_sync.ContainerSyncTest): class ContainerSyncMiddlewareTest(test_container_sync.ContainerSyncTest):
"""Test containers synchronization specifying realm and cluster"""
@classmethod @classmethod
def resource_setup(cls): def resource_setup(cls):
@ -41,6 +42,7 @@ class ContainerSyncMiddlewareTest(test_container_sync.ContainerSyncTest):
@decorators.idempotent_id('ea4645a1-d147-4976-82f7-e5a7a3065f80') @decorators.idempotent_id('ea4645a1-d147-4976-82f7-e5a7a3065f80')
@utils.requires_ext(extension='container_sync', service='object') @utils.requires_ext(extension='container_sync', service='object')
def test_container_synchronization(self): def test_container_synchronization(self):
"""Test container synchronization specifying realm and cluster"""
def make_headers(cont, cont_client): def make_headers(cont, cont_client):
# tell first container to synchronize to a second # tell first container to synchronize to a second
account_name = cont_client.base_url.split('/')[-1] account_name = cont_client.base_url.split('/')[-1]

View File

@ -19,6 +19,7 @@ from tempest.lib import decorators
class CrossdomainTest(base.BaseObjectTest): class CrossdomainTest(base.BaseObjectTest):
"""Test crossdomain policy"""
@classmethod @classmethod
def resource_setup(cls): def resource_setup(cls):
@ -37,6 +38,7 @@ class CrossdomainTest(base.BaseObjectTest):
@decorators.idempotent_id('d1b8b031-b622-4010-82f9-ff78a9e915c7') @decorators.idempotent_id('d1b8b031-b622-4010-82f9-ff78a9e915c7')
@utils.requires_ext(extension='crossdomain', service='object') @utils.requires_ext(extension='crossdomain', service='object')
def test_get_crossdomain_policy(self): def test_get_crossdomain_policy(self):
"""Test getting crossdomain policy"""
url = self.account_client._get_base_version_url() + "crossdomain.xml" url = self.account_client._get_base_version_url() + "crossdomain.xml"
resp, body = self.account_client.raw_request(url, "GET") resp, body = self.account_client.raw_request(url, "GET")
self.account_client._error_checker(resp, body) self.account_client._error_checker(resp, body)

View File

@ -21,6 +21,8 @@ from tempest.lib import exceptions as lib_exc
class ObjectExpiryTest(base.BaseObjectTest): class ObjectExpiryTest(base.BaseObjectTest):
"""Test object expiry"""
@classmethod @classmethod
def resource_setup(cls): def resource_setup(cls):
super(ObjectExpiryTest, cls).resource_setup() super(ObjectExpiryTest, cls).resource_setup()
@ -83,6 +85,7 @@ class ObjectExpiryTest(base.BaseObjectTest):
@decorators.idempotent_id('fb024a42-37f3-4ba5-9684-4f40a7910b41') @decorators.idempotent_id('fb024a42-37f3-4ba5-9684-4f40a7910b41')
def test_get_object_after_expiry_time(self): def test_get_object_after_expiry_time(self):
"""Test object is expired after x-delete-after time"""
# the 10s is important, because the get calls can take 3s each # the 10s is important, because the get calls can take 3s each
# some times # some times
metadata = {'X-Delete-After': '10'} metadata = {'X-Delete-After': '10'}
@ -90,5 +93,6 @@ class ObjectExpiryTest(base.BaseObjectTest):
@decorators.idempotent_id('e592f18d-679c-48fe-9e36-4be5f47102c5') @decorators.idempotent_id('e592f18d-679c-48fe-9e36-4be5f47102c5')
def test_get_object_at_expiry_time(self): def test_get_object_at_expiry_time(self):
"""Test object is expired at x-delete-at time"""
metadata = {'X-Delete-At': str(int(time.time()) + 10)} metadata = {'X-Delete-At': str(int(time.time()) + 10)}
self._test_object_expiry(metadata) self._test_object_expiry(metadata)

View File

@ -29,6 +29,7 @@ CONF = config.CONF
class ObjectTest(base.BaseObjectTest): class ObjectTest(base.BaseObjectTest):
"""Test storage object"""
@classmethod @classmethod
def resource_setup(cls): def resource_setup(cls):
@ -78,6 +79,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('5b4ce26f-3545-46c9-a2ba-5754358a4c62') @decorators.idempotent_id('5b4ce26f-3545-46c9-a2ba-5754358a4c62')
def test_create_object(self): def test_create_object(self):
"""Test creating object and checking the object's uploaded content"""
# create object # create object
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
@ -97,7 +99,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('5daebb1d-f0d5-4dc9-b541-69672eff00b0') @decorators.idempotent_id('5daebb1d-f0d5-4dc9-b541-69672eff00b0')
def test_create_object_with_content_disposition(self): def test_create_object_with_content_disposition(self):
# create object with content_disposition """Test creating object with content-disposition"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
metadata = {} metadata = {}
@ -119,7 +121,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('605f8317-f945-4bee-ae91-013f1da8f0a0') @decorators.idempotent_id('605f8317-f945-4bee-ae91-013f1da8f0a0')
def test_create_object_with_content_encoding(self): def test_create_object_with_content_encoding(self):
# create object with content_encoding """Test creating object with content-encoding"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
# put compressed string # put compressed string
@ -146,7 +148,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('73820093-0503-40b1-a478-edf0e69c7d1f') @decorators.idempotent_id('73820093-0503-40b1-a478-edf0e69c7d1f')
def test_create_object_with_etag(self): def test_create_object_with_etag(self):
# create object with etag """Test creating object with Etag"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
md5 = hashlib.md5(data).hexdigest() md5 = hashlib.md5(data).hexdigest()
@ -165,8 +167,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('84dafe57-9666-4f6d-84c8-0814d37923b8') @decorators.idempotent_id('84dafe57-9666-4f6d-84c8-0814d37923b8')
def test_create_object_with_expect_continue(self): def test_create_object_with_expect_continue(self):
# create object with expect_continue """Test creating object with expect_continue"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
@ -182,7 +183,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('4f84422a-e2f2-4403-b601-726a4220b54e') @decorators.idempotent_id('4f84422a-e2f2-4403-b601-726a4220b54e')
def test_create_object_with_transfer_encoding(self): def test_create_object_with_transfer_encoding(self):
# create object with transfer_encoding """Test creating object with transfer_encoding"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes(1024) data = data_utils.random_bytes(1024)
headers = {'Transfer-Encoding': 'chunked'} headers = {'Transfer-Encoding': 'chunked'}
@ -202,7 +203,10 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('0f3d62a6-47e3-4554-b0e5-1a5dc372d501') @decorators.idempotent_id('0f3d62a6-47e3-4554-b0e5-1a5dc372d501')
def test_create_object_with_x_fresh_metadata(self): def test_create_object_with_x_fresh_metadata(self):
# create object with x_fresh_metadata """Test creating object with x-fresh-metadata
The previous added metadata will be cleared.
"""
object_name_base = data_utils.rand_name(name='TestObject') object_name_base = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
metadata_1 = {'X-Object-Meta-test-meta': 'Meta'} metadata_1 = {'X-Object-Meta-test-meta': 'Meta'}
@ -228,7 +232,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('1c7ed3e4-2099-406b-b843-5301d4811baf') @decorators.idempotent_id('1c7ed3e4-2099-406b-b843-5301d4811baf')
def test_create_object_with_x_object_meta(self): def test_create_object_with_x_object_meta(self):
# create object with object_meta """Test creating object with x-object-meta"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
metadata = {'X-Object-Meta-test-meta': 'Meta'} metadata = {'X-Object-Meta-test-meta': 'Meta'}
@ -247,7 +251,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('e4183917-33db-4153-85cc-4dacbb938865') @decorators.idempotent_id('e4183917-33db-4153-85cc-4dacbb938865')
def test_create_object_with_x_object_metakey(self): def test_create_object_with_x_object_metakey(self):
# create object with the blank value of metadata """Test creating object with the blank value of metadata"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
metadata = {'X-Object-Meta-test-meta': ''} metadata = {'X-Object-Meta-test-meta': ''}
@ -266,7 +270,10 @@ class ObjectTest(base.BaseObjectTest):
@decorators.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): def test_create_object_with_x_remove_object_meta(self):
# create object with x_remove_object_meta """Test creating object with x-remove-object-meta
The metadata will be removed from the object.
"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
metadata_add = {'X-Object-Meta-test-meta': 'Meta'} metadata_add = {'X-Object-Meta-test-meta': 'Meta'}
@ -289,7 +296,11 @@ class ObjectTest(base.BaseObjectTest):
@decorators.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): def test_create_object_with_x_remove_object_metakey(self):
# create object with the blank value of remove metadata """Test creating object with the blank value of remove metadata
Creating object with blank metadata 'X-Remove-Object-Meta-test-meta',
metadata 'x-object-meta-test-meta' will be removed from the object.
"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
metadata_add = {'X-Object-Meta-test-meta': 'Meta'} metadata_add = {'X-Object-Meta-test-meta': 'Meta'}
@ -312,7 +323,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('17738d45-03bd-4d45-9e0b-7b2f58f98687') @decorators.idempotent_id('17738d45-03bd-4d45-9e0b-7b2f58f98687')
def test_delete_object(self): def test_delete_object(self):
# create object """Test deleting object"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
resp, _ = self.object_client.create_object(self.container_name, resp, _ = self.object_client.create_object(self.container_name,
@ -325,7 +336,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('7a94c25d-66e6-434c-9c38-97d4e2c29945') @decorators.idempotent_id('7a94c25d-66e6-434c-9c38-97d4e2c29945')
def test_update_object_metadata(self): def test_update_object_metadata(self):
# update object metadata """Test updating object metadata"""
object_name, _ = self.create_object(self.container_name) object_name, _ = self.create_object(self.container_name)
metadata = {'X-Object-Meta-test-meta': 'Meta'} metadata = {'X-Object-Meta-test-meta': 'Meta'}
@ -343,7 +354,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('48650ed0-c189-4e1e-ad6b-1d4770c6e134') @decorators.idempotent_id('48650ed0-c189-4e1e-ad6b-1d4770c6e134')
def test_update_object_metadata_with_remove_metadata(self): def test_update_object_metadata_with_remove_metadata(self):
# update object metadata with remove metadata """Test updating object metadata with remove metadata"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
create_metadata = {'X-Object-Meta-test-meta1': 'Meta1'} create_metadata = {'X-Object-Meta-test-meta1': 'Meta1'}
@ -366,6 +377,11 @@ class ObjectTest(base.BaseObjectTest):
@decorators.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): def test_update_object_metadata_with_create_and_remove_metadata(self):
"""Test updating object with creation and deletion of metadata
Update object with creation and deletion of metadata with one
request, both operations will succeed.
"""
# creation and deletion of metadata with one request # creation and deletion of metadata with one request
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
@ -392,8 +408,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.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): def test_update_object_metadata_with_x_object_manifest(self):
# update object metadata with x_object_manifest """Test updating object metadata with x_object_manifest"""
# uploading segments # uploading segments
object_name, _ = self._upload_segments() object_name, _ = self._upload_segments()
# creating a manifest file # creating a manifest file
@ -418,7 +433,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.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): def test_update_object_metadata_with_x_object_metakey(self):
# update object metadata with a blank value of metadata """Test updating object metadata with a blank value of metadata"""
object_name, _ = self.create_object(self.container_name) object_name, _ = self.create_object(self.container_name)
update_metadata = {'X-Object-Meta-test-meta': ''} update_metadata = {'X-Object-Meta-test-meta': ''}
@ -436,7 +451,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.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): def test_update_object_metadata_with_x_remove_object_metakey(self):
# update object metadata with a blank value of remove metadata """Test updating object metadata with blank remove metadata value"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.arbitrary_string() data = data_utils.arbitrary_string()
create_metadata = {'X-Object-Meta-test-meta': 'Meta'} create_metadata = {'X-Object-Meta-test-meta': 'Meta'}
@ -460,7 +475,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('9a447cf6-de06-48de-8226-a8c6ed31caf2') @decorators.idempotent_id('9a447cf6-de06-48de-8226-a8c6ed31caf2')
def test_list_object_metadata(self): def test_list_object_metadata(self):
# get object metadata """Test listing object metadata"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
metadata = {'X-Object-Meta-test-meta': 'Meta'} metadata = {'X-Object-Meta-test-meta': 'Meta'}
@ -478,7 +493,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('170fb90e-f5c3-4b1f-ae1b-a18810821172') @decorators.idempotent_id('170fb90e-f5c3-4b1f-ae1b-a18810821172')
def test_list_no_object_metadata(self): def test_list_no_object_metadata(self):
# get empty list of object metadata """Test listing object metadata for object without metadata"""
object_name, _ = self.create_object(self.container_name) object_name, _ = self.create_object(self.container_name)
resp, _ = self.object_client.list_object_metadata( resp, _ = self.object_client.list_object_metadata(
@ -489,8 +504,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.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): def test_list_object_metadata_with_x_object_manifest(self):
# get object metadata with x_object_manifest """Test getting object metadata with x_object_manifest"""
# uploading segments # uploading segments
object_name, _ = self._upload_segments() object_name, _ = self._upload_segments()
# creating a manifest file # creating a manifest file
@ -530,7 +544,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.attr(type='smoke') @decorators.attr(type='smoke')
@decorators.idempotent_id('02610ba7-86b7-4272-9ed8-aa8d417cb3cd') @decorators.idempotent_id('02610ba7-86b7-4272-9ed8-aa8d417cb3cd')
def test_get_object(self): def test_get_object(self):
# retrieve object's data (in response body) """Test retrieving object's data (in response body)"""
# create object # create object
object_name, data = self.create_object(self.container_name) object_name, data = self.create_object(self.container_name)
@ -543,7 +557,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('005f9bf6-e06d-41ec-968e-96c78e0b1d82') @decorators.idempotent_id('005f9bf6-e06d-41ec-968e-96c78e0b1d82')
def test_get_object_with_metadata(self): def test_get_object_with_metadata(self):
# get object with metadata """Test getting object with metadata"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
metadata = {'X-Object-Meta-test-meta': 'Meta'} metadata = {'X-Object-Meta-test-meta': 'Meta'}
@ -562,7 +576,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('05a1890e-7db9-4a6c-90a8-ce998a2bddfa') @decorators.idempotent_id('05a1890e-7db9-4a6c-90a8-ce998a2bddfa')
def test_get_object_with_range(self): def test_get_object_with_range(self):
# get object with range """Test getting object with range"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes(100) data = data_utils.random_bytes(100)
self.object_client.create_object(self.container_name, self.object_client.create_object(self.container_name,
@ -580,7 +594,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('11b4515b-7ba7-4ca8-8838-357ded86fc10') @decorators.idempotent_id('11b4515b-7ba7-4ca8-8838-357ded86fc10')
def test_get_object_with_x_object_manifest(self): def test_get_object_with_x_object_manifest(self):
# get object with x_object_manifest """Test getting object with x_object_manifest"""
# uploading segments # uploading segments
object_name, data_segments = self._upload_segments() object_name, data_segments = self._upload_segments()
@ -623,7 +637,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('c05b4013-e4de-47af-be84-e598062b16fc') @decorators.idempotent_id('c05b4013-e4de-47af-be84-e598062b16fc')
def test_get_object_with_if_match(self): def test_get_object_with_if_match(self):
# get object with if_match """Test getting object with if_match"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes(10) data = data_utils.random_bytes(10)
create_md5 = hashlib.md5(data).hexdigest() create_md5 = hashlib.md5(data).hexdigest()
@ -643,7 +657,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('be133639-e5d2-4313-9b1f-2d59fc054a16') @decorators.idempotent_id('be133639-e5d2-4313-9b1f-2d59fc054a16')
def test_get_object_with_if_modified_since(self): def test_get_object_with_if_modified_since(self):
# get object with if_modified_since """Test getting object with if_modified_since"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
time_now = time.time() time_now = time.time()
@ -663,7 +677,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('641500d5-1612-4042-a04d-01fc4528bc30') @decorators.idempotent_id('641500d5-1612-4042-a04d-01fc4528bc30')
def test_get_object_with_if_none_match(self): def test_get_object_with_if_none_match(self):
# get object with if_none_match """Test getting object with if_none_match"""
object_name = data_utils.rand_name(name='TestObject') object_name = data_utils.rand_name(name='TestObject')
data = data_utils.random_bytes() data = data_utils.random_bytes()
create_md5 = hashlib.md5(data).hexdigest() create_md5 = hashlib.md5(data).hexdigest()
@ -685,7 +699,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('0aa1201c-10aa-467a-bee7-63cbdd463152') @decorators.idempotent_id('0aa1201c-10aa-467a-bee7-63cbdd463152')
def test_get_object_with_if_unmodified_since(self): def test_get_object_with_if_unmodified_since(self):
# get object with if_unmodified_since """Test getting object with if_unmodified_since"""
object_name, data = self.create_object(self.container_name) object_name, data = self.create_object(self.container_name)
time_now = time.time() time_now = time.time()
@ -700,7 +714,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('94587078-475f-48f9-a40f-389c246e31cd') @decorators.idempotent_id('94587078-475f-48f9-a40f-389c246e31cd')
def test_get_object_with_x_newest(self): def test_get_object_with_x_newest(self):
# get object with x_newest """Test getting object with x_newest"""
object_name, data = self.create_object(self.container_name) object_name, data = self.create_object(self.container_name)
list_metadata = {'X-Newest': 'true'} list_metadata = {'X-Newest': 'true'}
@ -713,6 +727,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('1a9ab572-1b66-4981-8c21-416e2a5e6011') @decorators.idempotent_id('1a9ab572-1b66-4981-8c21-416e2a5e6011')
def test_copy_object_in_same_container(self): def test_copy_object_in_same_container(self):
"""Test copying object to another object in same container"""
# create source object # create source object
src_object_name = data_utils.rand_name(name='SrcObject') src_object_name = data_utils.rand_name(name='SrcObject')
src_data = data_utils.random_bytes(size=len(src_object_name) * 2) src_data = data_utils.random_bytes(size=len(src_object_name) * 2)
@ -742,7 +757,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('2248abba-415d-410b-9c30-22dff9cd6e67') @decorators.idempotent_id('2248abba-415d-410b-9c30-22dff9cd6e67')
def test_copy_object_to_itself(self): def test_copy_object_to_itself(self):
# change the content type of an existing object """Test changing the content type of an existing object"""
# create object # create object
object_name, _ = self.create_object(self.container_name) object_name, _ = self.create_object(self.container_name)
@ -769,6 +784,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('06f90388-2d0e-40aa-934c-e9a8833e958a') @decorators.idempotent_id('06f90388-2d0e-40aa-934c-e9a8833e958a')
def test_copy_object_2d_way(self): def test_copy_object_2d_way(self):
"""Test copying object's data to the new object using COPY"""
# create source object # create source object
src_object_name = data_utils.rand_name(name='SrcObject') src_object_name = data_utils.rand_name(name='SrcObject')
src_data = data_utils.random_bytes(size=len(src_object_name) * 2) src_data = data_utils.random_bytes(size=len(src_object_name) * 2)
@ -793,6 +809,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('aa467252-44f3-472a-b5ae-5b57c3c9c147') @decorators.idempotent_id('aa467252-44f3-472a-b5ae-5b57c3c9c147')
def test_copy_object_across_containers(self): def test_copy_object_across_containers(self):
"""Test copying object to another container"""
# create a container to use as a source container # create a container to use as a source container
src_container_name = data_utils.rand_name(name='TestSourceContainer') src_container_name = data_utils.rand_name(name='TestSourceContainer')
self.container_client.update_container(src_container_name) self.container_client.update_container(src_container_name)
@ -837,6 +854,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('5a9e2cc6-85b6-46fc-916d-0cbb7a88e5fd') @decorators.idempotent_id('5a9e2cc6-85b6-46fc-916d-0cbb7a88e5fd')
def test_copy_object_with_x_fresh_metadata(self): def test_copy_object_with_x_fresh_metadata(self):
"""Test copying objectwith x_fresh_metadata"""
# create source object # create source object
metadata = {'x-object-meta-src': 'src_value'} metadata = {'x-object-meta-src': 'src_value'}
src_object_name, data = self.create_object(self.container_name, src_object_name, data = self.create_object(self.container_name,
@ -858,6 +876,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('a28a8b99-e701-4d7e-9d84-3b66f121460b') @decorators.idempotent_id('a28a8b99-e701-4d7e-9d84-3b66f121460b')
def test_copy_object_with_x_object_metakey(self): def test_copy_object_with_x_object_metakey(self):
"""Test copying object with x_object_metakey"""
# create source object # create source object
metadata = {'x-object-meta-src': 'src_value'} metadata = {'x-object-meta-src': 'src_value'}
src_obj_name, data = self.create_object(self.container_name, src_obj_name, data = self.create_object(self.container_name,
@ -881,6 +900,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('edabedca-24c3-4322-9b70-d6d9f942a074') @decorators.idempotent_id('edabedca-24c3-4322-9b70-d6d9f942a074')
def test_copy_object_with_x_object_meta(self): def test_copy_object_with_x_object_meta(self):
"""Test copying object with x_object_meta"""
# create source object # create source object
metadata = {'x-object-meta-src': 'src_value'} metadata = {'x-object-meta-src': 'src_value'}
src_obj_name, data = self.create_object(self.container_name, src_obj_name, data = self.create_object(self.container_name,
@ -904,6 +924,7 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('e3e6a64a-9f50-4955-b987-6ce6767c97fb') @decorators.idempotent_id('e3e6a64a-9f50-4955-b987-6ce6767c97fb')
def test_object_upload_in_segments(self): def test_object_upload_in_segments(self):
"""Test uploading object in segments"""
# create object # create object
object_name = data_utils.rand_name(name='LObject') object_name = data_utils.rand_name(name='LObject')
data = data_utils.arbitrary_string() data = data_utils.arbitrary_string()
@ -947,10 +968,13 @@ class ObjectTest(base.BaseObjectTest):
@decorators.idempotent_id('50d01f12-526f-4360-9ac2-75dd508d7b68') @decorators.idempotent_id('50d01f12-526f-4360-9ac2-75dd508d7b68')
def test_get_object_if_different(self): def test_get_object_if_different(self):
# http://en.wikipedia.org/wiki/HTTP_ETag """Test getting object content only when the local file is different
# Make a conditional request for an object using the If-None-Match
# header, it should get downloaded only if the local file is different, http://en.wikipedia.org/wiki/HTTP_ETag
# otherwise the response code should be 304 Not Modified Make a conditional request for an object using the If-None-Match
header, it should get downloaded only if the local file is different,
otherwise the response code should be 304 Not Modified
"""
object_name, data = self.create_object(self.container_name) object_name, data = self.create_object(self.container_name)
# local copy is identical, no download # local copy is identical, no download
md5 = hashlib.md5(data).hexdigest() md5 = hashlib.md5(data).hexdigest()
@ -975,6 +999,7 @@ class ObjectTest(base.BaseObjectTest):
class PublicObjectTest(base.BaseObjectTest): class PublicObjectTest(base.BaseObjectTest):
"""Test public storage object"""
credentials = [['operator', CONF.object_storage.operator_role], credentials = [['operator', CONF.object_storage.operator_role],
['operator_alt', CONF.object_storage.operator_role]] ['operator_alt', CONF.object_storage.operator_role]]
@ -1000,9 +1025,11 @@ class PublicObjectTest(base.BaseObjectTest):
@decorators.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): def test_access_public_container_object_without_using_creds(self):
# make container public-readable and access an object in it object """Test accessing public container object without using credentials
# anonymously, without using credentials
Make container public-readable and access an object in it object
anonymously, without using credentials.
"""
# update container metadata to make it publicly readable # update container metadata to make it publicly readable
cont_headers = {'X-Container-Read': '.r:*,.rlistings'} cont_headers = {'X-Container-Read': '.r:*,.rlistings'}
resp_meta, body = ( resp_meta, body = (
@ -1040,8 +1067,11 @@ class PublicObjectTest(base.BaseObjectTest):
@decorators.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): def test_access_public_object_with_another_user_creds(self):
# make container public-readable and access an object in it using """Test accessing public object with another user's credentials
# another user's credentials
Make container public-readable and access an object in it using
another user's credentials.
"""
cont_headers = {'X-Container-Read': '.r:*,.rlistings'} cont_headers = {'X-Container-Read': '.r:*,.rlistings'}
resp_meta, body = ( resp_meta, body = (
self.container_client.create_update_or_delete_container_metadata( self.container_client.create_update_or_delete_container_metadata(

View File

@ -27,6 +27,7 @@ MIN_SEGMENT_SIZE = 1024 * 1024
class ObjectSloTest(base.BaseObjectTest): class ObjectSloTest(base.BaseObjectTest):
"""Test static large object"""
def setUp(self): def setUp(self):
super(ObjectSloTest, self).setUp() super(ObjectSloTest, self).setUp()
@ -108,7 +109,7 @@ class ObjectSloTest(base.BaseObjectTest):
@decorators.idempotent_id('2c3f24a6-36e8-4711-9aa2-800ee1fc7b5b') @decorators.idempotent_id('2c3f24a6-36e8-4711-9aa2-800ee1fc7b5b')
@utils.requires_ext(extension='slo', service='object') @utils.requires_ext(extension='slo', service='object')
def test_upload_manifest(self): def test_upload_manifest(self):
# create static large object from multipart manifest """Test creating static large object from multipart manifest"""
manifest = self._create_manifest() manifest = self._create_manifest()
params = {'multipart-manifest': 'put'} params = {'multipart-manifest': 'put'}
@ -123,7 +124,10 @@ class ObjectSloTest(base.BaseObjectTest):
@decorators.idempotent_id('e69ad766-e1aa-44a2-bdd2-bf62c09c1456') @decorators.idempotent_id('e69ad766-e1aa-44a2-bdd2-bf62c09c1456')
@utils.requires_ext(extension='slo', service='object') @utils.requires_ext(extension='slo', service='object')
def test_list_large_object_metadata(self): def test_list_large_object_metadata(self):
# list static large object metadata using multipart manifest """Test listing static large object metadata
List static large object metadata using multipart manifest
"""
object_name = self._create_large_object() object_name = self._create_large_object()
resp, _ = self.object_client.list_object_metadata( resp, _ = self.object_client.list_object_metadata(
@ -135,7 +139,7 @@ class ObjectSloTest(base.BaseObjectTest):
@decorators.idempotent_id('49bc49bc-dd1b-4c0f-904e-d9f10b830ee8') @decorators.idempotent_id('49bc49bc-dd1b-4c0f-904e-d9f10b830ee8')
@utils.requires_ext(extension='slo', service='object') @utils.requires_ext(extension='slo', service='object')
def test_retrieve_large_object(self): def test_retrieve_large_object(self):
# list static large object using multipart manifest """Test listing static large object using multipart manifest"""
object_name = self._create_large_object() object_name = self._create_large_object()
resp, body = self.object_client.get_object( resp, body = self.object_client.get_object(
@ -150,7 +154,7 @@ class ObjectSloTest(base.BaseObjectTest):
@decorators.idempotent_id('87b6dfa1-abe9-404d-8bf0-6c3751e6aa77') @decorators.idempotent_id('87b6dfa1-abe9-404d-8bf0-6c3751e6aa77')
@utils.requires_ext(extension='slo', service='object') @utils.requires_ext(extension='slo', service='object')
def test_delete_large_object(self): def test_delete_large_object(self):
# delete static large object using multipart manifest """Test deleting static large object using multipart manifest"""
object_name = self._create_large_object() object_name = self._create_large_object()
params_del = {'multipart-manifest': 'delete'} params_del = {'multipart-manifest': 'delete'}