Merge "Fix create container method"
This commit is contained in:
@@ -106,7 +106,7 @@ class BaseObjectTest(tempest.test.BaseTestCase):
|
||||
def create_container(cls):
|
||||
# wrapper that returns a test container
|
||||
container_name = data_utils.rand_name(name='TestContainer')
|
||||
cls.container_client.create_container(container_name)
|
||||
cls.container_client.update_container(container_name)
|
||||
cls.containers.append(container_name)
|
||||
|
||||
return container_name
|
||||
|
||||
@@ -43,7 +43,7 @@ class AccountTest(base.BaseObjectTest):
|
||||
super(AccountTest, cls).resource_setup()
|
||||
for i in range(ord('a'), ord('f') + 1):
|
||||
name = data_utils.rand_name(name='%s-' % six.int2byte(i))
|
||||
cls.container_client.create_container(name)
|
||||
cls.container_client.update_container(name)
|
||||
cls.containers.append(name)
|
||||
cls.containers_count = len(cls.containers)
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
|
||||
def setUp(self):
|
||||
super(ObjectACLsNegativeTest, self).setUp()
|
||||
self.container_name = data_utils.rand_name(name='TestContainer')
|
||||
self.container_client.create_container(self.container_name)
|
||||
self.container_client.update_container(self.container_name)
|
||||
|
||||
def tearDown(self):
|
||||
self.delete_containers([self.container_name])
|
||||
|
||||
@@ -27,7 +27,7 @@ class ContainerTest(base.BaseObjectTest):
|
||||
@decorators.idempotent_id('92139d73-7819-4db1-85f8-3f2f22a8d91f')
|
||||
def test_create_container(self):
|
||||
container_name = data_utils.rand_name(name='TestContainer')
|
||||
resp, _ = self.container_client.create_container(container_name)
|
||||
resp, _ = self.container_client.update_container(container_name)
|
||||
self.containers.append(container_name)
|
||||
self.assertHeaders(resp, 'Container', 'PUT')
|
||||
|
||||
@@ -35,20 +35,20 @@ class ContainerTest(base.BaseObjectTest):
|
||||
def test_create_container_overwrite(self):
|
||||
# overwrite container with the same name
|
||||
container_name = data_utils.rand_name(name='TestContainer')
|
||||
self.container_client.create_container(container_name)
|
||||
self.container_client.update_container(container_name)
|
||||
self.containers.append(container_name)
|
||||
|
||||
resp, _ = self.container_client.create_container(container_name)
|
||||
resp, _ = self.container_client.update_container(container_name)
|
||||
self.assertHeaders(resp, 'Container', 'PUT')
|
||||
|
||||
@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')
|
||||
metadata = {'test-container-meta': ''}
|
||||
resp, _ = self.container_client.create_container(
|
||||
headers = {'X-Container-Meta-test-container-meta': ''}
|
||||
resp, _ = self.container_client.update_container(
|
||||
container_name,
|
||||
metadata=metadata)
|
||||
**headers)
|
||||
self.containers.append(container_name)
|
||||
self.assertHeaders(resp, 'Container', 'PUT')
|
||||
|
||||
@@ -64,10 +64,10 @@ class ContainerTest(base.BaseObjectTest):
|
||||
container_name = data_utils.rand_name(name='TestContainer')
|
||||
|
||||
# metadata name using underscores should be converted to hyphens
|
||||
metadata = {'test_container_meta': 'Meta1'}
|
||||
resp, _ = self.container_client.create_container(
|
||||
headers = {'X-Container-Meta-test_container_meta': 'Meta1'}
|
||||
resp, _ = self.container_client.update_container(
|
||||
container_name,
|
||||
metadata=metadata)
|
||||
**headers)
|
||||
self.containers.append(container_name)
|
||||
self.assertHeaders(resp, 'Container', 'PUT')
|
||||
|
||||
@@ -75,22 +75,20 @@ class ContainerTest(base.BaseObjectTest):
|
||||
container_name)
|
||||
self.assertIn('x-container-meta-test-container-meta', resp)
|
||||
self.assertEqual(resp['x-container-meta-test-container-meta'],
|
||||
metadata['test_container_meta'])
|
||||
headers['X-Container-Meta-test_container_meta'])
|
||||
|
||||
@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')
|
||||
metadata_1 = {'test-container-meta': 'Meta1'}
|
||||
self.container_client.create_container(
|
||||
container_name,
|
||||
metadata=metadata_1)
|
||||
headers = {'X-Container-Meta-test-container-meta': 'Meta1'}
|
||||
self.container_client.update_container(container_name, **headers)
|
||||
self.containers.append(container_name)
|
||||
|
||||
metadata_2 = {'test-container-meta': ''}
|
||||
resp, _ = self.container_client.create_container(
|
||||
headers = {'X-Remove-Container-Meta-test-container-meta': ''}
|
||||
resp, _ = self.container_client.update_container(
|
||||
container_name,
|
||||
remove_metadata=metadata_2)
|
||||
**headers)
|
||||
self.assertHeaders(resp, 'Container', 'PUT')
|
||||
|
||||
resp, _ = self.container_client.list_container_metadata(
|
||||
@@ -101,14 +99,13 @@ class ContainerTest(base.BaseObjectTest):
|
||||
def test_create_container_with_remove_metadata_value(self):
|
||||
# create container with remove metadata
|
||||
container_name = data_utils.rand_name(name='TestContainer')
|
||||
metadata = {'test-container-meta': 'Meta1'}
|
||||
self.container_client.create_container(container_name,
|
||||
metadata=metadata)
|
||||
headers = {'X-Container-Meta-test-container-meta': 'Meta1'}
|
||||
self.container_client.update_container(container_name, **headers)
|
||||
self.containers.append(container_name)
|
||||
|
||||
resp, _ = self.container_client.create_container(
|
||||
headers = {'X-Remove-Container-Meta-test-container-meta': 'Meta1'}
|
||||
resp, _ = self.container_client.update_container(
|
||||
container_name,
|
||||
remove_metadata=metadata)
|
||||
**headers)
|
||||
self.assertHeaders(resp, 'Container', 'PUT')
|
||||
|
||||
resp, _ = self.container_client.list_container_metadata(
|
||||
@@ -301,9 +298,8 @@ class ContainerTest(base.BaseObjectTest):
|
||||
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')
|
||||
metadata_1 = {'test-container-meta1': 'Meta1'}
|
||||
self.container_client.create_container(container_name,
|
||||
metadata=metadata_1)
|
||||
metadata_1 = {'X-Container-Meta-test-container-meta1': 'Meta1'}
|
||||
self.container_client.update_container(container_name, **metadata_1)
|
||||
self.containers.append(container_name)
|
||||
|
||||
metadata_2 = {'test-container-meta2': 'Meta2'}
|
||||
@@ -311,7 +307,7 @@ class ContainerTest(base.BaseObjectTest):
|
||||
self.container_client.create_update_or_delete_container_metadata(
|
||||
container_name,
|
||||
create_update_metadata=metadata_2,
|
||||
delete_metadata=metadata_1))
|
||||
delete_metadata={'test-container-meta1': 'Meta1'}))
|
||||
self.assertHeaders(resp, 'Container', 'POST')
|
||||
|
||||
resp, _ = self.container_client.list_container_metadata(
|
||||
@@ -343,15 +339,14 @@ class ContainerTest(base.BaseObjectTest):
|
||||
def test_update_container_metadata_with_delete_metadata(self):
|
||||
# update container metadata using delete metadata
|
||||
container_name = data_utils.rand_name(name='TestContainer')
|
||||
metadata = {'test-container-meta1': 'Meta1'}
|
||||
self.container_client.create_container(container_name,
|
||||
metadata=metadata)
|
||||
metadata = {'X-Container-Meta-test-container-meta1': 'Meta1'}
|
||||
self.container_client.update_container(container_name, **metadata)
|
||||
self.containers.append(container_name)
|
||||
|
||||
resp, _ = (
|
||||
self.container_client.create_update_or_delete_container_metadata(
|
||||
container_name,
|
||||
delete_metadata=metadata))
|
||||
delete_metadata={'test-container-meta1': 'Meta1'}))
|
||||
self.assertHeaders(resp, 'Container', 'POST')
|
||||
|
||||
resp, _ = self.container_client.list_container_metadata(
|
||||
@@ -378,9 +373,8 @@ class ContainerTest(base.BaseObjectTest):
|
||||
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')
|
||||
metadata = {'test-container-meta1': 'Meta1'}
|
||||
self.container_client.create_container(container_name,
|
||||
metadata=metadata)
|
||||
headers = {'X-Container-Meta-test-container-meta1': 'Meta1'}
|
||||
self.container_client.update_container(container_name, **headers)
|
||||
self.containers.append(container_name)
|
||||
|
||||
metadata = {'test-container-meta1': ''}
|
||||
|
||||
@@ -45,9 +45,10 @@ class ContainerNegativeTest(base.BaseObjectTest):
|
||||
max_length = self.constraints['max_container_name_length']
|
||||
# create a container with long name
|
||||
container_name = data_utils.arbitrary_string(size=max_length + 1)
|
||||
ex = self.assertRaises(exceptions.BadRequest,
|
||||
self.container_client.create_container,
|
||||
container_name)
|
||||
ex = self.assertRaises(
|
||||
exceptions.BadRequest,
|
||||
self.container_client.update_container,
|
||||
container_name)
|
||||
self.assertIn('Container name length of ' + str(max_length + 1) +
|
||||
' longer than ' + str(max_length), str(ex))
|
||||
|
||||
@@ -61,11 +62,13 @@ class ContainerNegativeTest(base.BaseObjectTest):
|
||||
# that is longer than max.
|
||||
max_length = self.constraints['max_meta_name_length']
|
||||
container_name = data_utils.rand_name(name='TestContainer')
|
||||
metadata_name = data_utils.arbitrary_string(size=max_length + 1)
|
||||
metadata_name = 'X-Container-Meta-' + data_utils.arbitrary_string(
|
||||
size=max_length + 1)
|
||||
metadata = {metadata_name: 'penguin'}
|
||||
ex = self.assertRaises(exceptions.BadRequest,
|
||||
self.container_client.create_container,
|
||||
container_name, metadata=metadata)
|
||||
ex = self.assertRaises(
|
||||
exceptions.BadRequest,
|
||||
self.container_client.update_container,
|
||||
container_name, **metadata)
|
||||
self.assertIn('Metadata name too long', str(ex))
|
||||
|
||||
@decorators.attr(type=["negative"])
|
||||
@@ -79,10 +82,11 @@ class ContainerNegativeTest(base.BaseObjectTest):
|
||||
max_length = self.constraints['max_meta_value_length']
|
||||
container_name = data_utils.rand_name(name='TestContainer')
|
||||
metadata_value = data_utils.arbitrary_string(size=max_length + 1)
|
||||
metadata = {'animal': metadata_value}
|
||||
ex = self.assertRaises(exceptions.BadRequest,
|
||||
self.container_client.create_container,
|
||||
container_name, metadata=metadata)
|
||||
metadata = {'X-Container-Meta-animal': metadata_value}
|
||||
ex = self.assertRaises(
|
||||
exceptions.BadRequest,
|
||||
self.container_client.update_container,
|
||||
container_name, **metadata)
|
||||
self.assertIn('Metadata value longer than ' + str(max_length), str(ex))
|
||||
|
||||
@decorators.attr(type=["negative"])
|
||||
@@ -97,11 +101,12 @@ class ContainerNegativeTest(base.BaseObjectTest):
|
||||
container_name = data_utils.rand_name(name='TestContainer')
|
||||
metadata = {}
|
||||
for i in range(max_count + 1):
|
||||
metadata['animal-' + str(i)] = 'penguin'
|
||||
metadata['X-Container-Meta-animal-' + str(i)] = 'penguin'
|
||||
|
||||
ex = self.assertRaises(exceptions.BadRequest,
|
||||
self.container_client.create_container,
|
||||
container_name, metadata=metadata)
|
||||
ex = self.assertRaises(
|
||||
exceptions.BadRequest,
|
||||
self.container_client.update_container,
|
||||
container_name, **metadata)
|
||||
self.assertIn('Too many metadata items; max ' + str(max_count),
|
||||
str(ex))
|
||||
|
||||
|
||||
@@ -786,12 +786,12 @@ class ObjectTest(base.BaseObjectTest):
|
||||
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')
|
||||
self.container_client.create_container(src_container_name)
|
||||
self.container_client.update_container(src_container_name)
|
||||
self.containers.append(src_container_name)
|
||||
# create a container to use as a destination container
|
||||
dst_container_name = data_utils.rand_name(
|
||||
name='TestDestinationContainer')
|
||||
self.container_client.create_container(dst_container_name)
|
||||
self.container_client.update_container(dst_container_name)
|
||||
self.containers.append(dst_container_name)
|
||||
# create object in source container
|
||||
object_name = data_utils.rand_name(name='Object')
|
||||
@@ -977,7 +977,7 @@ class PublicObjectTest(base.BaseObjectTest):
|
||||
def setUp(self):
|
||||
super(PublicObjectTest, self).setUp()
|
||||
self.container_name = data_utils.rand_name(name='TestContainer')
|
||||
self.container_client.create_container(self.container_name)
|
||||
self.container_client.update_container(self.container_name)
|
||||
|
||||
def tearDown(self):
|
||||
self.delete_containers([self.container_name])
|
||||
|
||||
@@ -51,18 +51,16 @@ class ContainerTest(base.BaseObjectTest):
|
||||
def test_versioned_container(self):
|
||||
# create container
|
||||
vers_container_name = data_utils.rand_name(name='TestVersionContainer')
|
||||
resp, _ = self.container_client.create_container(
|
||||
vers_container_name)
|
||||
resp, _ = self.container_client.update_container(vers_container_name)
|
||||
self.containers.append(vers_container_name)
|
||||
self.assertHeaders(resp, 'Container', 'PUT')
|
||||
self.assertContainer(vers_container_name, '0', '0', 'Missing Header')
|
||||
|
||||
base_container_name = data_utils.rand_name(name='TestBaseContainer')
|
||||
headers = {'X-versions-Location': vers_container_name}
|
||||
resp, _ = self.container_client.create_container(
|
||||
resp, _ = self.container_client.update_container(
|
||||
base_container_name,
|
||||
metadata=headers,
|
||||
metadata_prefix='')
|
||||
**headers)
|
||||
self.containers.append(base_container_name)
|
||||
self.assertHeaders(resp, 'Container', 'PUT')
|
||||
self.assertContainer(base_container_name, '0', '0',
|
||||
|
||||
@@ -1278,7 +1278,7 @@ class ObjectStorageScenarioTest(ScenarioTest):
|
||||
def create_container(self, container_name=None):
|
||||
name = container_name or data_utils.rand_name(
|
||||
'swift-scenario-container')
|
||||
self.container_client.create_container(name)
|
||||
self.container_client.update_container(name)
|
||||
# look for the container to assure it is created
|
||||
self.list_and_check_container_objects(name)
|
||||
LOG.debug('Container %s created', name)
|
||||
|
||||
@@ -24,30 +24,25 @@ from tempest.lib.common import rest_client
|
||||
|
||||
class ContainerClient(rest_client.RestClient):
|
||||
|
||||
def create_container(
|
||||
self, container_name,
|
||||
metadata=None,
|
||||
remove_metadata=None,
|
||||
metadata_prefix='X-Container-Meta-',
|
||||
remove_metadata_prefix='X-Remove-Container-Meta-'):
|
||||
"""Creates a container
|
||||
def update_container(self, container_name, **headers):
|
||||
"""Creates or Updates a container
|
||||
|
||||
with optional metadata passed in as a dictionary
|
||||
with optional metadata passed in as a dictionary.
|
||||
Full list of allowed headers or value, please refer to the
|
||||
official API reference:
|
||||
https://developer.openstack.org/api-ref/object-store/#create-container
|
||||
"""
|
||||
url = str(container_name)
|
||||
headers = {}
|
||||
|
||||
if metadata is not None:
|
||||
for key in metadata:
|
||||
headers[metadata_prefix + key] = metadata[key]
|
||||
if remove_metadata is not None:
|
||||
for key in remove_metadata:
|
||||
headers[remove_metadata_prefix + key] = remove_metadata[key]
|
||||
|
||||
resp, body = self.put(url, body=None, headers=headers)
|
||||
self.expected_success([201, 202], resp.status)
|
||||
return resp, body
|
||||
|
||||
# NOTE: This alias is for the usability because PUT can be used for both
|
||||
# updating/creating a resource and this PUT is mainly used for creating
|
||||
# on Swift container API.
|
||||
create_container = update_container
|
||||
|
||||
def delete_container(self, container_name):
|
||||
"""Deletes the container (if it's empty)."""
|
||||
url = str(container_name)
|
||||
|
||||
Reference in New Issue
Block a user