Merge "Fix create container method"

This commit is contained in:
Jenkins
2017-10-06 03:17:27 +00:00
committed by Gerrit Code Review
9 changed files with 69 additions and 77 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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])

View File

@@ -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': ''}

View File

@@ -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))

View File

@@ -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])

View File

@@ -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',

View File

@@ -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)

View File

@@ -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)