Loosen constraints on Swift status codes.

The Swift API only commits to returning a 2xx status code to indicate
success for most operations (e.g. list containers, get account
metadata, etc.), but Tempest was looking for particular ones (e.g. 204
or 200). This change loosens those checks to accept any 2xx status
code defined in RFC 2616.

Tests for operations where the API docs *do* specify particular status
codes, like "Create Container", have been left untouched.

Change-Id: I3ba91cb915e79700124172051d50deff9bc0601b
This commit is contained in:
Samuel Merritt
2013-06-19 12:08:23 -07:00
parent a6498a5c7e
commit 0d499bc6a1
4 changed files with 26 additions and 20 deletions

View File

@@ -19,6 +19,7 @@ from tempest.api.object_storage import base
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.test import attr
from tempest.test import HTTP_SUCCESS
class AccountTest(base.BaseObjectTest):
@@ -47,7 +48,7 @@ class AccountTest(base.BaseObjectTest):
def test_list_account_metadata(self):
# list all account metadata
resp, metadata = self.account_client.list_account_metadata()
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.assertIn('x-account-object-count', resp)
self.assertIn('x-account-container-count', resp)
self.assertIn('x-account-bytes-used', resp)
@@ -59,7 +60,7 @@ class AccountTest(base.BaseObjectTest):
# add metadata to account
resp, _ = self.account_client.create_account_metadata(
metadata={header: data})
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
resp, _ = self.account_client.list_account_metadata()
self.assertIn('x-account-meta-' + header, resp)
@@ -68,7 +69,7 @@ class AccountTest(base.BaseObjectTest):
# delete metadata from account
resp, _ = \
self.account_client.delete_account_metadata(metadata=[header])
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
resp, _ = self.account_client.list_account_metadata()
self.assertNotIn('x-account-meta-' + header, resp)

View File

@@ -19,6 +19,7 @@ from tempest.api.object_storage import base
from tempest.common.utils.data_utils import arbitrary_string
from tempest.common.utils.data_utils import rand_name
from tempest.test import attr
from tempest.test import HTTP_SUCCESS
class ContainerTest(base.BaseObjectTest):
@@ -46,7 +47,7 @@ class ContainerTest(base.BaseObjectTest):
self.containers.append(container_name)
# delete container
resp, _ = self.container_client.delete_container(container_name)
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.containers.remove(container_name)
@attr(type='smoke')
@@ -74,7 +75,7 @@ class ContainerTest(base.BaseObjectTest):
resp, object_list = \
self.container_client.\
list_container_contents(container_name, params=params)
self.assertEqual(resp['status'], '200')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.assertIsNotNone(object_list)
object_names = [obj['name'] for obj in object_list]
@@ -95,12 +96,12 @@ class ContainerTest(base.BaseObjectTest):
resp, _ = \
self.container_client.update_container_metadata(container_name,
metadata=metadata)
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
# list container metadata
resp, _ = self.container_client.list_container_metadata(
container_name)
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.assertIn('x-container-meta-name', resp)
self.assertIn('x-container-meta-description', resp)
self.assertEqual(resp['x-container-meta-name'], 'Pictures')
@@ -110,10 +111,10 @@ class ContainerTest(base.BaseObjectTest):
resp, _ = self.container_client.delete_container_metadata(
container_name,
metadata=metadata.keys())
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
# check if the metadata are no longer there
resp, _ = self.container_client.list_container_metadata(container_name)
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.assertNotIn('x-container-meta-name', resp)
self.assertNotIn('x-container-meta-description', resp)

View File

@@ -23,6 +23,7 @@ from tempest.common.utils.data_utils import arbitrary_string
from tempest.common.utils.data_utils import rand_name
from tempest import exceptions
from tempest.test import attr
from tempest.test import HTTP_SUCCESS
class ObjectTest(base.BaseObjectTest):
@@ -72,7 +73,7 @@ class ObjectTest(base.BaseObjectTest):
# delete object
resp, _ = self.object_client.delete_object(self.container_name,
object_name)
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
@attr(type='smoke')
def test_object_metadata(self):
@@ -89,12 +90,12 @@ class ObjectTest(base.BaseObjectTest):
orig_metadata = {meta_key: meta_value}
resp, _ = self.object_client.update_object_metadata(
self.container_name, object_name, orig_metadata)
self.assertEqual(resp['status'], '202')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
# get object metadata
resp, resp_metadata = self.object_client.list_object_metadata(
self.container_name, object_name)
self.assertEqual(resp['status'], '200')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
actual_meta_key = 'x-object-meta-' + meta_key
self.assertTrue(actual_meta_key in resp)
self.assertEqual(resp[actual_meta_key], meta_value)
@@ -111,7 +112,7 @@ class ObjectTest(base.BaseObjectTest):
# get object
resp, body = self.object_client.get_object(self.container_name,
object_name)
self.assertEqual(resp['status'], '200')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.assertEqual(body, data)
@attr(type='smoke')
@@ -209,7 +210,7 @@ class ObjectTest(base.BaseObjectTest):
resp, _ = self.object_client.update_object_metadata(src_container_name,
object_name,
orig_metadata)
self.assertEqual(resp['status'], '202')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
try:
# copy object from source container to destination container
resp, _ = self.object_client.copy_object_across_containers(
@@ -309,7 +310,7 @@ class ObjectTest(base.BaseObjectTest):
metadata = {'Temp-URL-Key': key}
resp, _ = self.account_client.create_account_metadata(
metadata=metadata)
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
flag = True
resp, _ = self.account_client.list_account_metadata()
self.assertIn('x-account-meta-temp-url-key', resp)
@@ -386,7 +387,7 @@ class ObjectTest(base.BaseObjectTest):
md5 = hashlib.md5(local_data).hexdigest()
headers = {'If-None-Match': md5}
resp, body = self.object_client.get(url, headers=headers)
self.assertEqual(resp['status'], '200')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
class PublicObjectTest(base.BaseObjectTest):
@@ -408,7 +409,7 @@ class PublicObjectTest(base.BaseObjectTest):
cont_headers = {'X-Container-Read': '.r:*,.rlistings'}
resp_meta, body = self.container_client.update_container_metadata(
self.container_name, metadata=cont_headers, metadata_prefix='')
self.assertEqual(resp_meta['status'], '204')
self.assertIn(int(resp_meta['status']), HTTP_SUCCESS)
# create object
object_name = rand_name(name='Object')
data = arbitrary_string(size=len(object_name),
@@ -420,7 +421,7 @@ class PublicObjectTest(base.BaseObjectTest):
# list container metadata
resp_meta, _ = self.container_client.list_container_metadata(
self.container_name)
self.assertEqual(resp_meta['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.assertIn('x-container-read', resp_meta)
self.assertEqual(resp_meta['x-container-read'], '.r:*,.rlistings')
@@ -438,7 +439,7 @@ class PublicObjectTest(base.BaseObjectTest):
resp_meta, body = self.container_client.update_container_metadata(
self.container_name, metadata=cont_headers,
metadata_prefix='')
self.assertEqual(resp_meta['status'], '204')
self.assertIn(int(resp_meta['status']), HTTP_SUCCESS)
# create object
object_name = rand_name(name='Object')
data = arbitrary_string(size=len(object_name) * 1,
@@ -450,7 +451,7 @@ class PublicObjectTest(base.BaseObjectTest):
# list container metadata
resp, _ = self.container_client.list_container_metadata(
self.container_name)
self.assertEqual(resp['status'], '204')
self.assertIn(int(resp['status']), HTTP_SUCCESS)
self.assertIn('x-container-read', resp)
self.assertEqual(resp['x-container-read'], '.r:*,.rlistings')

View File

@@ -27,6 +27,9 @@ from tempest import manager
LOG = logging.getLogger(__name__)
# All the successful HTTP status codes from RFC 2616
HTTP_SUCCESS = (200, 201, 202, 203, 204, 205, 206)
def attr(*args, **kwargs):
"""A decorator which applies the nose and testtools attr decorator