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
diff --git a/tempest/api/object_storage/test_account_services.py b/tempest/api/object_storage/test_account_services.py
index b40774e..029f2d5 100644
--- a/tempest/api/object_storage/test_account_services.py
+++ b/tempest/api/object_storage/test_account_services.py
@@ -19,6 +19,7 @@
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 @@
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 @@
# 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 @@
# 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)
diff --git a/tempest/api/object_storage/test_container_services.py b/tempest/api/object_storage/test_container_services.py
index 70f704f..5cb6341 100644
--- a/tempest/api/object_storage/test_container_services.py
+++ b/tempest/api/object_storage/test_container_services.py
@@ -19,6 +19,7 @@
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 @@
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 @@
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 @@
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 @@
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)
diff --git a/tempest/api/object_storage/test_object_services.py b/tempest/api/object_storage/test_object_services.py
index a83e92c..2f52a65 100644
--- a/tempest/api/object_storage/test_object_services.py
+++ b/tempest/api/object_storage/test_object_services.py
@@ -23,6 +23,7 @@
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 @@
# 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 @@
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 @@
# 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 @@
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 @@
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 @@
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 @@
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 @@
# 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 @@
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 @@
# 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')
diff --git a/tempest/test.py b/tempest/test.py
index 5f403b3..6be37be 100644
--- a/tempest/test.py
+++ b/tempest/test.py
@@ -27,6 +27,9 @@
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