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): def create_container(cls):
# wrapper that returns a test container # wrapper that returns a test container
container_name = data_utils.rand_name(name='TestContainer') 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) cls.containers.append(container_name)
return container_name return container_name

View File

@@ -43,7 +43,7 @@ class AccountTest(base.BaseObjectTest):
super(AccountTest, cls).resource_setup() super(AccountTest, cls).resource_setup()
for i in range(ord('a'), ord('f') + 1): for i in range(ord('a'), ord('f') + 1):
name = data_utils.rand_name(name='%s-' % six.int2byte(i)) 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.append(name)
cls.containers_count = len(cls.containers) cls.containers_count = len(cls.containers)

View File

@@ -39,7 +39,7 @@ class ObjectACLsNegativeTest(base.BaseObjectTest):
def setUp(self): def setUp(self):
super(ObjectACLsNegativeTest, self).setUp() super(ObjectACLsNegativeTest, self).setUp()
self.container_name = data_utils.rand_name(name='TestContainer') 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): def tearDown(self):
self.delete_containers([self.container_name]) self.delete_containers([self.container_name])

View File

@@ -27,7 +27,7 @@ class ContainerTest(base.BaseObjectTest):
@decorators.idempotent_id('92139d73-7819-4db1-85f8-3f2f22a8d91f') @decorators.idempotent_id('92139d73-7819-4db1-85f8-3f2f22a8d91f')
def test_create_container(self): def test_create_container(self):
container_name = data_utils.rand_name(name='TestContainer') 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.containers.append(container_name)
self.assertHeaders(resp, 'Container', 'PUT') self.assertHeaders(resp, 'Container', 'PUT')
@@ -35,20 +35,20 @@ class ContainerTest(base.BaseObjectTest):
def test_create_container_overwrite(self): def test_create_container_overwrite(self):
# overwrite container with the same name # overwrite container with the same name
container_name = data_utils.rand_name(name='TestContainer') 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) 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') self.assertHeaders(resp, 'Container', 'PUT')
@decorators.idempotent_id('c2ac4d59-d0f5-40d5-ba19-0635056d48cd') @decorators.idempotent_id('c2ac4d59-d0f5-40d5-ba19-0635056d48cd')
def test_create_container_with_metadata_key(self): def test_create_container_with_metadata_key(self):
# create container with the blank value of metadata # create container with the blank value of metadata
container_name = data_utils.rand_name(name='TestContainer') container_name = data_utils.rand_name(name='TestContainer')
metadata = {'test-container-meta': ''} headers = {'X-Container-Meta-test-container-meta': ''}
resp, _ = self.container_client.create_container( resp, _ = self.container_client.update_container(
container_name, container_name,
metadata=metadata) **headers)
self.containers.append(container_name) self.containers.append(container_name)
self.assertHeaders(resp, 'Container', 'PUT') self.assertHeaders(resp, 'Container', 'PUT')
@@ -64,10 +64,10 @@ class ContainerTest(base.BaseObjectTest):
container_name = data_utils.rand_name(name='TestContainer') container_name = data_utils.rand_name(name='TestContainer')
# metadata name using underscores should be converted to hyphens # metadata name using underscores should be converted to hyphens
metadata = {'test_container_meta': 'Meta1'} headers = {'X-Container-Meta-test_container_meta': 'Meta1'}
resp, _ = self.container_client.create_container( resp, _ = self.container_client.update_container(
container_name, container_name,
metadata=metadata) **headers)
self.containers.append(container_name) self.containers.append(container_name)
self.assertHeaders(resp, 'Container', 'PUT') self.assertHeaders(resp, 'Container', 'PUT')
@@ -75,22 +75,20 @@ class ContainerTest(base.BaseObjectTest):
container_name) container_name)
self.assertIn('x-container-meta-test-container-meta', resp) self.assertIn('x-container-meta-test-container-meta', resp)
self.assertEqual(resp['x-container-meta-test-container-meta'], 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') @decorators.idempotent_id('24d16451-1c0c-4e4f-b59c-9840a3aba40e')
def test_create_container_with_remove_metadata_key(self): def test_create_container_with_remove_metadata_key(self):
# create container with the blank value of remove metadata # create container with the blank value of remove metadata
container_name = data_utils.rand_name(name='TestContainer') container_name = data_utils.rand_name(name='TestContainer')
metadata_1 = {'test-container-meta': 'Meta1'} headers = {'X-Container-Meta-test-container-meta': 'Meta1'}
self.container_client.create_container( self.container_client.update_container(container_name, **headers)
container_name,
metadata=metadata_1)
self.containers.append(container_name) self.containers.append(container_name)
metadata_2 = {'test-container-meta': ''} headers = {'X-Remove-Container-Meta-test-container-meta': ''}
resp, _ = self.container_client.create_container( resp, _ = self.container_client.update_container(
container_name, container_name,
remove_metadata=metadata_2) **headers)
self.assertHeaders(resp, 'Container', 'PUT') self.assertHeaders(resp, 'Container', 'PUT')
resp, _ = self.container_client.list_container_metadata( resp, _ = self.container_client.list_container_metadata(
@@ -101,14 +99,13 @@ class ContainerTest(base.BaseObjectTest):
def test_create_container_with_remove_metadata_value(self): def test_create_container_with_remove_metadata_value(self):
# create container with remove metadata # create container with remove metadata
container_name = data_utils.rand_name(name='TestContainer') container_name = data_utils.rand_name(name='TestContainer')
metadata = {'test-container-meta': 'Meta1'} headers = {'X-Container-Meta-test-container-meta': 'Meta1'}
self.container_client.create_container(container_name, self.container_client.update_container(container_name, **headers)
metadata=metadata)
self.containers.append(container_name) self.containers.append(container_name)
headers = {'X-Remove-Container-Meta-test-container-meta': 'Meta1'}
resp, _ = self.container_client.create_container( resp, _ = self.container_client.update_container(
container_name, container_name,
remove_metadata=metadata) **headers)
self.assertHeaders(resp, 'Container', 'PUT') self.assertHeaders(resp, 'Container', 'PUT')
resp, _ = self.container_client.list_container_metadata( 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): def test_update_container_metadata_with_create_and_delete_metadata(self):
# Send one request of adding and deleting metadata # Send one request of adding and deleting metadata
container_name = data_utils.rand_name(name='TestContainer') container_name = data_utils.rand_name(name='TestContainer')
metadata_1 = {'test-container-meta1': 'Meta1'} metadata_1 = {'X-Container-Meta-test-container-meta1': 'Meta1'}
self.container_client.create_container(container_name, self.container_client.update_container(container_name, **metadata_1)
metadata=metadata_1)
self.containers.append(container_name) self.containers.append(container_name)
metadata_2 = {'test-container-meta2': 'Meta2'} metadata_2 = {'test-container-meta2': 'Meta2'}
@@ -311,7 +307,7 @@ class ContainerTest(base.BaseObjectTest):
self.container_client.create_update_or_delete_container_metadata( self.container_client.create_update_or_delete_container_metadata(
container_name, container_name,
create_update_metadata=metadata_2, create_update_metadata=metadata_2,
delete_metadata=metadata_1)) delete_metadata={'test-container-meta1': 'Meta1'}))
self.assertHeaders(resp, 'Container', 'POST') self.assertHeaders(resp, 'Container', 'POST')
resp, _ = self.container_client.list_container_metadata( resp, _ = self.container_client.list_container_metadata(
@@ -343,15 +339,14 @@ class ContainerTest(base.BaseObjectTest):
def test_update_container_metadata_with_delete_metadata(self): def test_update_container_metadata_with_delete_metadata(self):
# update container metadata using delete metadata # update container metadata using delete metadata
container_name = data_utils.rand_name(name='TestContainer') container_name = data_utils.rand_name(name='TestContainer')
metadata = {'test-container-meta1': 'Meta1'} metadata = {'X-Container-Meta-test-container-meta1': 'Meta1'}
self.container_client.create_container(container_name, self.container_client.update_container(container_name, **metadata)
metadata=metadata)
self.containers.append(container_name) self.containers.append(container_name)
resp, _ = ( resp, _ = (
self.container_client.create_update_or_delete_container_metadata( self.container_client.create_update_or_delete_container_metadata(
container_name, container_name,
delete_metadata=metadata)) delete_metadata={'test-container-meta1': 'Meta1'}))
self.assertHeaders(resp, 'Container', 'POST') self.assertHeaders(resp, 'Container', 'POST')
resp, _ = self.container_client.list_container_metadata( 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): def test_update_container_metadata_with_delete_metadata_key(self):
# update container metadata with a blank value of metadata # update container metadata with a blank value of metadata
container_name = data_utils.rand_name(name='TestContainer') container_name = data_utils.rand_name(name='TestContainer')
metadata = {'test-container-meta1': 'Meta1'} headers = {'X-Container-Meta-test-container-meta1': 'Meta1'}
self.container_client.create_container(container_name, self.container_client.update_container(container_name, **headers)
metadata=metadata)
self.containers.append(container_name) self.containers.append(container_name)
metadata = {'test-container-meta1': ''} metadata = {'test-container-meta1': ''}

View File

@@ -45,9 +45,10 @@ class ContainerNegativeTest(base.BaseObjectTest):
max_length = self.constraints['max_container_name_length'] max_length = self.constraints['max_container_name_length']
# create a container with long name # create a container with long name
container_name = data_utils.arbitrary_string(size=max_length + 1) container_name = data_utils.arbitrary_string(size=max_length + 1)
ex = self.assertRaises(exceptions.BadRequest, ex = self.assertRaises(
self.container_client.create_container, exceptions.BadRequest,
container_name) self.container_client.update_container,
container_name)
self.assertIn('Container name length of ' + str(max_length + 1) + self.assertIn('Container name length of ' + str(max_length + 1) +
' longer than ' + str(max_length), str(ex)) ' longer than ' + str(max_length), str(ex))
@@ -61,11 +62,13 @@ class ContainerNegativeTest(base.BaseObjectTest):
# that is longer than max. # that is longer than max.
max_length = self.constraints['max_meta_name_length'] max_length = self.constraints['max_meta_name_length']
container_name = data_utils.rand_name(name='TestContainer') 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'} metadata = {metadata_name: 'penguin'}
ex = self.assertRaises(exceptions.BadRequest, ex = self.assertRaises(
self.container_client.create_container, exceptions.BadRequest,
container_name, metadata=metadata) self.container_client.update_container,
container_name, **metadata)
self.assertIn('Metadata name too long', str(ex)) self.assertIn('Metadata name too long', str(ex))
@decorators.attr(type=["negative"]) @decorators.attr(type=["negative"])
@@ -79,10 +82,11 @@ class ContainerNegativeTest(base.BaseObjectTest):
max_length = self.constraints['max_meta_value_length'] max_length = self.constraints['max_meta_value_length']
container_name = data_utils.rand_name(name='TestContainer') container_name = data_utils.rand_name(name='TestContainer')
metadata_value = data_utils.arbitrary_string(size=max_length + 1) metadata_value = data_utils.arbitrary_string(size=max_length + 1)
metadata = {'animal': metadata_value} metadata = {'X-Container-Meta-animal': metadata_value}
ex = self.assertRaises(exceptions.BadRequest, ex = self.assertRaises(
self.container_client.create_container, exceptions.BadRequest,
container_name, metadata=metadata) self.container_client.update_container,
container_name, **metadata)
self.assertIn('Metadata value longer than ' + str(max_length), str(ex)) self.assertIn('Metadata value longer than ' + str(max_length), str(ex))
@decorators.attr(type=["negative"]) @decorators.attr(type=["negative"])
@@ -97,11 +101,12 @@ class ContainerNegativeTest(base.BaseObjectTest):
container_name = data_utils.rand_name(name='TestContainer') container_name = data_utils.rand_name(name='TestContainer')
metadata = {} metadata = {}
for i in range(max_count + 1): 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, ex = self.assertRaises(
self.container_client.create_container, exceptions.BadRequest,
container_name, metadata=metadata) self.container_client.update_container,
container_name, **metadata)
self.assertIn('Too many metadata items; max ' + str(max_count), self.assertIn('Too many metadata items; max ' + str(max_count),
str(ex)) str(ex))

View File

@@ -786,12 +786,12 @@ class ObjectTest(base.BaseObjectTest):
def test_copy_object_across_containers(self): def test_copy_object_across_containers(self):
# 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.create_container(src_container_name) self.container_client.update_container(src_container_name)
self.containers.append(src_container_name) self.containers.append(src_container_name)
# create a container to use as a destination container # create a container to use as a destination container
dst_container_name = data_utils.rand_name( dst_container_name = data_utils.rand_name(
name='TestDestinationContainer') name='TestDestinationContainer')
self.container_client.create_container(dst_container_name) self.container_client.update_container(dst_container_name)
self.containers.append(dst_container_name) self.containers.append(dst_container_name)
# create object in source container # create object in source container
object_name = data_utils.rand_name(name='Object') object_name = data_utils.rand_name(name='Object')
@@ -977,7 +977,7 @@ class PublicObjectTest(base.BaseObjectTest):
def setUp(self): def setUp(self):
super(PublicObjectTest, self).setUp() super(PublicObjectTest, self).setUp()
self.container_name = data_utils.rand_name(name='TestContainer') 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): def tearDown(self):
self.delete_containers([self.container_name]) self.delete_containers([self.container_name])

View File

@@ -51,18 +51,16 @@ class ContainerTest(base.BaseObjectTest):
def test_versioned_container(self): def test_versioned_container(self):
# create container # create container
vers_container_name = data_utils.rand_name(name='TestVersionContainer') vers_container_name = data_utils.rand_name(name='TestVersionContainer')
resp, _ = self.container_client.create_container( resp, _ = self.container_client.update_container(vers_container_name)
vers_container_name)
self.containers.append(vers_container_name) self.containers.append(vers_container_name)
self.assertHeaders(resp, 'Container', 'PUT') self.assertHeaders(resp, 'Container', 'PUT')
self.assertContainer(vers_container_name, '0', '0', 'Missing Header') self.assertContainer(vers_container_name, '0', '0', 'Missing Header')
base_container_name = data_utils.rand_name(name='TestBaseContainer') base_container_name = data_utils.rand_name(name='TestBaseContainer')
headers = {'X-versions-Location': vers_container_name} headers = {'X-versions-Location': vers_container_name}
resp, _ = self.container_client.create_container( resp, _ = self.container_client.update_container(
base_container_name, base_container_name,
metadata=headers, **headers)
metadata_prefix='')
self.containers.append(base_container_name) self.containers.append(base_container_name)
self.assertHeaders(resp, 'Container', 'PUT') self.assertHeaders(resp, 'Container', 'PUT')
self.assertContainer(base_container_name, '0', '0', self.assertContainer(base_container_name, '0', '0',

View File

@@ -1278,7 +1278,7 @@ class ObjectStorageScenarioTest(ScenarioTest):
def create_container(self, container_name=None): def create_container(self, container_name=None):
name = container_name or data_utils.rand_name( name = container_name or data_utils.rand_name(
'swift-scenario-container') 'swift-scenario-container')
self.container_client.create_container(name) self.container_client.update_container(name)
# look for the container to assure it is created # look for the container to assure it is created
self.list_and_check_container_objects(name) self.list_and_check_container_objects(name)
LOG.debug('Container %s created', 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): class ContainerClient(rest_client.RestClient):
def create_container( def update_container(self, container_name, **headers):
self, container_name, """Creates or Updates a container
metadata=None,
remove_metadata=None,
metadata_prefix='X-Container-Meta-',
remove_metadata_prefix='X-Remove-Container-Meta-'):
"""Creates 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) 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) resp, body = self.put(url, body=None, headers=headers)
self.expected_success([201, 202], resp.status) self.expected_success([201, 202], resp.status)
return resp, body 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): def delete_container(self, container_name):
"""Deletes the container (if it's empty).""" """Deletes the container (if it's empty)."""
url = str(container_name) url = str(container_name)