Check HTTP response headers of Swift middleware API in detail
All HTTP response headers of APIs for each Swift middleware are checked their existence and format as those of Swift 'standard' API are. Change-Id: I45005861873af66a126a3ebe0b04dd84c9a26eda Closes-Bug: #1240856
This commit is contained in:
		| @@ -107,6 +107,7 @@ class AccountQuotasTest(base.BaseObjectTest): | ||||
|                                                    object_name, data) | ||||
|  | ||||
|         self.assertEqual(resp["status"], "201") | ||||
|         self.assertHeaders(resp, 'Object', 'PUT') | ||||
|  | ||||
|     @testtools.skipIf(not accounts_quotas_available, | ||||
|                       "Account Quotas middleware not available") | ||||
| @@ -141,6 +142,7 @@ class AccountQuotasTest(base.BaseObjectTest): | ||||
|                                                             headers, "") | ||||
|  | ||||
|             self.assertEqual(resp["status"], "204") | ||||
|             self.assertHeaders(resp, 'Account', 'POST') | ||||
|  | ||||
|     @testtools.skipIf(not accounts_quotas_available, | ||||
|                       "Account Quotas middleware not available") | ||||
|   | ||||
| @@ -86,6 +86,7 @@ class ObjectTestACLs(base.BaseObjectTest): | ||||
|         resp, _ = self.object_client.create_object( | ||||
|             self.container_name, object_name, 'data') | ||||
|         self.assertEqual(resp['status'], '201') | ||||
|         self.assertHeaders(resp, 'Object', 'PUT') | ||||
|         # trying to get object with non authorized user token | ||||
|         self.assertRaises(exceptions.Unauthorized, | ||||
|                           self.custom_object_client.get_object, | ||||
| @@ -100,6 +101,7 @@ class ObjectTestACLs(base.BaseObjectTest): | ||||
|         resp, _ = self.object_client.create_object( | ||||
|             self.container_name, object_name, 'data') | ||||
|         self.assertEqual(resp['status'], '201') | ||||
|         self.assertHeaders(resp, 'Object', 'PUT') | ||||
|         # trying to delete object with non-authorized user token | ||||
|         self.assertRaises(exceptions.Unauthorized, | ||||
|                           self.custom_object_client.delete_object, | ||||
| @@ -115,11 +117,13 @@ class ObjectTestACLs(base.BaseObjectTest): | ||||
|             self.container_name, metadata=cont_headers, | ||||
|             metadata_prefix='') | ||||
|         self.assertIn(int(resp_meta['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp_meta, 'Container', 'POST') | ||||
|         # create object | ||||
|         object_name = data_utils.rand_name(name='Object') | ||||
|         resp, _ = self.object_client.create_object(self.container_name, | ||||
|                                                    object_name, 'data') | ||||
|         self.assertEqual(resp['status'], '201') | ||||
|         self.assertHeaders(resp, 'Object', 'PUT') | ||||
|         # Trying to read the object without rights | ||||
|         self.assertRaises(exceptions.Unauthorized, | ||||
|                           self.custom_object_client.get_object, | ||||
| @@ -135,6 +139,7 @@ class ObjectTestACLs(base.BaseObjectTest): | ||||
|             self.container_name, metadata=cont_headers, | ||||
|             metadata_prefix='') | ||||
|         self.assertIn(int(resp_meta['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp_meta, 'Container', 'POST') | ||||
|         # Trying to write the object without rights | ||||
|         object_name = data_utils.rand_name(name='Object') | ||||
|         self.assertRaises(exceptions.Unauthorized, | ||||
| @@ -153,16 +158,19 @@ class ObjectTestACLs(base.BaseObjectTest): | ||||
|             self.container_name, metadata=cont_headers, | ||||
|             metadata_prefix='') | ||||
|         self.assertIn(int(resp_meta['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp_meta, 'Container', 'POST') | ||||
|         # create object | ||||
|         object_name = data_utils.rand_name(name='Object') | ||||
|         resp, _ = self.object_client.create_object(self.container_name, | ||||
|                                                    object_name, 'data') | ||||
|         self.assertEqual(resp['status'], '201') | ||||
|         self.assertHeaders(resp, 'Object', 'PUT') | ||||
|         # Trying to read the object with rights | ||||
|         resp, _ = self.custom_object_client.get_object( | ||||
|             self.container_name, object_name, | ||||
|             metadata=self.custom_headers) | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp, 'Object', 'GET') | ||||
|  | ||||
|     @attr(type='smoke') | ||||
|     def test_write_object_with_rights(self): | ||||
| @@ -174,6 +182,7 @@ class ObjectTestACLs(base.BaseObjectTest): | ||||
|             self.container_name, metadata=cont_headers, | ||||
|             metadata_prefix='') | ||||
|         self.assertIn(int(resp_meta['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp_meta, 'Container', 'POST') | ||||
|         # Trying to write the object with rights | ||||
|         object_name = data_utils.rand_name(name='Object') | ||||
|         resp, _ = self.custom_object_client.create_object( | ||||
| @@ -181,6 +190,7 @@ class ObjectTestACLs(base.BaseObjectTest): | ||||
|             object_name, 'data', | ||||
|             metadata=self.custom_headers) | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp, 'Object', 'PUT') | ||||
|  | ||||
|     @attr(type=['negative', 'smoke']) | ||||
|     def test_write_object_without_write_rights(self): | ||||
| @@ -193,6 +203,7 @@ class ObjectTestACLs(base.BaseObjectTest): | ||||
|             self.container_name, metadata=cont_headers, | ||||
|             metadata_prefix='') | ||||
|         self.assertIn(int(resp_meta['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp_meta, 'Container', 'POST') | ||||
|         # Trying to write the object without write rights | ||||
|         object_name = data_utils.rand_name(name='Object') | ||||
|         self.assertRaises(exceptions.Unauthorized, | ||||
| @@ -212,11 +223,13 @@ class ObjectTestACLs(base.BaseObjectTest): | ||||
|             self.container_name, metadata=cont_headers, | ||||
|             metadata_prefix='') | ||||
|         self.assertIn(int(resp_meta['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp_meta, 'Container', 'POST') | ||||
|         # create object | ||||
|         object_name = data_utils.rand_name(name='Object') | ||||
|         resp, _ = self.object_client.create_object(self.container_name, | ||||
|                                                    object_name, 'data') | ||||
|         self.assertEqual(resp['status'], '201') | ||||
|         self.assertHeaders(resp, 'Object', 'PUT') | ||||
|         # Trying to delete the object without write rights | ||||
|         self.assertRaises(exceptions.Unauthorized, | ||||
|                           self.custom_object_client.delete_object, | ||||
|   | ||||
| @@ -69,6 +69,7 @@ class ContainerQuotasTest(base.BaseObjectTest): | ||||
|         resp, _ = self.object_client.create_object( | ||||
|             self.container_name, object_name, data) | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp, 'Object', 'PUT') | ||||
|  | ||||
|         nafter = self._get_bytes_used() | ||||
|         self.assertEqual(nbefore + len(data), nafter) | ||||
|   | ||||
| @@ -15,6 +15,7 @@ | ||||
| # under the License. | ||||
|  | ||||
| from tempest.api.object_storage import base | ||||
| from tempest.common import custom_matchers | ||||
| from tempest.common.utils import data_utils | ||||
| from tempest import test | ||||
|  | ||||
| @@ -60,6 +61,8 @@ class StaticWebTest(base.BaseObjectTest): | ||||
|         resp, body = self.custom_account_client.request("GET", | ||||
|                                                         self.container_name) | ||||
|         self.assertIn(int(resp['status']), test.HTTP_SUCCESS) | ||||
|         # This request is equivalent to GET object | ||||
|         self.assertHeaders(resp, 'Object', 'GET') | ||||
|         self.assertEqual(body, self.object_data) | ||||
|  | ||||
|         # clean up before exiting | ||||
| @@ -82,6 +85,15 @@ class StaticWebTest(base.BaseObjectTest): | ||||
|         resp, body = self.custom_account_client.request("GET", | ||||
|                                                         self.container_name) | ||||
|         self.assertIn(int(resp['status']), test.HTTP_SUCCESS) | ||||
|         # The target of the request is not any Swift resource. Therefore, the | ||||
|         # existence of response header is checked without a custom matcher. | ||||
|         self.assertIn('content-length', resp) | ||||
|         self.assertIn('content-type', resp) | ||||
|         self.assertIn('x-trans-id', resp) | ||||
|         self.assertIn('date', resp) | ||||
|         # Check only the format of common headers with custom matcher | ||||
|         self.assertThat(resp, custom_matchers.AreAllWellFormatted()) | ||||
|  | ||||
|         self.assertIn(self.object_name, body) | ||||
|  | ||||
|         # clean up before exiting | ||||
|   | ||||
| @@ -18,6 +18,7 @@ | ||||
|  | ||||
| from tempest.api.object_storage import base | ||||
| from tempest import clients | ||||
| from tempest.common import custom_matchers | ||||
| from tempest import config | ||||
| from tempest.test import attr | ||||
| from tempest.test import HTTP_SUCCESS | ||||
| @@ -80,3 +81,12 @@ class CrossdomainTest(base.BaseObjectTest): | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertTrue(body.startswith(self.xml_start) and | ||||
|                         body.endswith(self.xml_end)) | ||||
|  | ||||
|         # The target of the request is not any Swift resource. Therefore, the | ||||
|         # existence of response header is checked without a custom matcher. | ||||
|         self.assertIn('content-length', resp) | ||||
|         self.assertIn('content-type', resp) | ||||
|         self.assertIn('x-trans-id', resp) | ||||
|         self.assertIn('date', resp) | ||||
|         # Check only the format of common headers with custom matcher | ||||
|         self.assertThat(resp, custom_matchers.AreAllWellFormatted()) | ||||
|   | ||||
| @@ -19,6 +19,7 @@ | ||||
|  | ||||
| from tempest.api.object_storage import base | ||||
| from tempest import clients | ||||
| from tempest.common import custom_matchers | ||||
| from tempest.test import attr | ||||
| from tempest.test import HTTP_SUCCESS | ||||
|  | ||||
| @@ -63,3 +64,12 @@ class HealthcheckTest(base.BaseObjectTest): | ||||
|  | ||||
|         # The status is expected to be 200 | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|  | ||||
|         # The target of the request is not any Swift resource. Therefore, the | ||||
|         # existence of response header is checked without a custom matcher. | ||||
|         self.assertIn('content-length', resp) | ||||
|         self.assertIn('content-type', resp) | ||||
|         self.assertIn('x-trans-id', resp) | ||||
|         self.assertIn('date', resp) | ||||
|         # Check only the format of common headers with custom matcher | ||||
|         self.assertThat(resp, custom_matchers.AreAllWellFormatted()) | ||||
|   | ||||
| @@ -62,10 +62,13 @@ class ObjectExpiryTest(base.BaseObjectTest): | ||||
|             self.object_client.list_object_metadata(self.container_name, | ||||
|                                                     object_name) | ||||
|         self.assertEqual(resp['status'], '200') | ||||
|         self.assertHeaders(resp, 'Object', 'HEAD') | ||||
|         self.assertIn('x-delete-at', resp) | ||||
|         resp, body = self.object_client.get_object(self.container_name, | ||||
|                                                    object_name) | ||||
|         self.assertEqual(resp['status'], '200') | ||||
|         self.assertHeaders(resp, 'Object', 'GET') | ||||
|         self.assertIn('x-delete-at', resp) | ||||
|         # check data | ||||
|         self.assertEqual(body, data) | ||||
|         # sleep for over 5 seconds, so that object expires | ||||
|   | ||||
| @@ -109,11 +109,13 @@ class ObjectFormPostTest(base.BaseObjectTest): | ||||
|         resp, body = self.object_client.http_obj.request(url, "POST", | ||||
|                                                          body, headers=headers) | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp, "Object", "POST") | ||||
|  | ||||
|         # Ensure object is available | ||||
|         resp, body = self.object_client.get("%s/%s%s" % ( | ||||
|             self.container_name, self.object_name, "testfile")) | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp, "Object", "GET") | ||||
|         self.assertEqual(body, "hello world") | ||||
|  | ||||
|     @attr(type=['gate', 'negative']) | ||||
|   | ||||
| @@ -113,13 +113,14 @@ class ObjectTempUrlTest(base.BaseObjectTest): | ||||
|  | ||||
|         # trying to get object using temp url within expiry time | ||||
|         resp, body = self.object_client.get_object_using_temp_url(url) | ||||
|  | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp, 'Object', 'GET') | ||||
|         self.assertEqual(body, self.data) | ||||
|  | ||||
|         # Testing a HEAD on this Temp URL | ||||
|         resp, body = self.object_client.head(url) | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp, 'Object', 'HEAD') | ||||
|  | ||||
|     @attr(type='gate') | ||||
|     def test_get_object_using_temp_url_key_2(self): | ||||
| @@ -157,10 +158,12 @@ class ObjectTempUrlTest(base.BaseObjectTest): | ||||
|             url, new_data) | ||||
|  | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp, 'Object', 'PUT') | ||||
|  | ||||
|         # Testing a HEAD on this Temp URL | ||||
|         resp, body = self.object_client.head(url) | ||||
|         self.assertIn(int(resp['status']), HTTP_SUCCESS) | ||||
|         self.assertHeaders(resp, 'Object', 'HEAD') | ||||
|  | ||||
|         # Validate that the content of the object has been modified | ||||
|         url = self._get_temp_url(self.container_name, | ||||
|   | ||||
| @@ -34,6 +34,7 @@ class ContainerTest(base.BaseObjectTest): | ||||
|     def assertContainer(self, container, count, byte, versioned): | ||||
|         resp, _ = self.container_client.list_container_metadata(container) | ||||
|         self.assertEqual(resp['status'], ('204')) | ||||
|         self.assertHeaders(resp, 'Container', 'HEAD') | ||||
|         header_value = resp.get('x-container-object-count', 'Missing Header') | ||||
|         self.assertEqual(header_value, count) | ||||
|         header_value = resp.get('x-container-bytes-used', 'Missing Header') | ||||
| @@ -49,6 +50,7 @@ class ContainerTest(base.BaseObjectTest): | ||||
|             vers_container_name) | ||||
|         self.containers.append(vers_container_name) | ||||
|         self.assertIn(resp['status'], ('202', '201')) | ||||
|         self.assertHeaders(resp, 'Container', 'PUT') | ||||
|         self.assertContainer(vers_container_name, '0', '0', 'Missing Header') | ||||
|  | ||||
|         base_container_name = data_utils.rand_name(name='TestBaseContainer') | ||||
| @@ -59,6 +61,7 @@ class ContainerTest(base.BaseObjectTest): | ||||
|             metadata_prefix='') | ||||
|         self.containers.append(base_container_name) | ||||
|         self.assertIn(resp['status'], ('202', '201')) | ||||
|         self.assertHeaders(resp, 'Container', 'PUT') | ||||
|         self.assertContainer(base_container_name, '0', '0', | ||||
|                              vers_container_name) | ||||
|         object_name = data_utils.rand_name(name='TestObject') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Daisuke Morita
					Daisuke Morita