Add error response tests for object that are insufficient.

This patch add error response tests for object that are insufficient.

Change-Id: I8035fb6bbb879d0cfc2f22ac435eeba979d70e4a
This commit is contained in:
Naoto Nishizono
2014-10-08 10:28:40 +09:00
parent 88ebdd3f41
commit babc3654b3
2 changed files with 57 additions and 4 deletions

View File

@@ -26,7 +26,7 @@ from swift.common.http import HTTP_OK, HTTP_CREATED, HTTP_ACCEPTED, \
HTTP_CONFLICT, HTTP_UNPROCESSABLE_ENTITY, HTTP_REQUEST_ENTITY_TOO_LARGE, \
HTTP_PARTIAL_CONTENT, HTTP_NOT_MODIFIED, HTTP_PRECONDITION_FAILED, \
HTTP_REQUESTED_RANGE_NOT_SATISFIABLE, HTTP_LENGTH_REQUIRED, \
HTTP_BAD_REQUEST, HTTP_SERVICE_UNAVAILABLE
HTTP_BAD_REQUEST
from swift.common.constraints import check_utf8
@@ -37,7 +37,7 @@ from swift3.controllers import ServiceController, BucketController, \
UnsupportedController
from swift3.response import AccessDenied, InvalidArgument, InvalidDigest, \
RequestTimeTooSkewed, Response, SignatureDoesNotMatch, \
ServiceUnavailable, BucketAlreadyExists, BucketNotEmpty, EntityTooLarge, \
BucketAlreadyExists, BucketNotEmpty, EntityTooLarge, \
InternalError, NoSuchBucket, NoSuchKey, PreconditionFailed, InvalidRange, \
MissingContentLength, InvalidStorageClass, S3NotImplemented, InvalidURI, \
MalformedXML, InvalidRequest
@@ -533,7 +533,5 @@ class Request(swob.Request):
raise SignatureDoesNotMatch()
if status == HTTP_FORBIDDEN:
raise AccessDenied()
if status == HTTP_SERVICE_UNAVAILABLE:
raise ServiceUnavailable()
raise InternalError('unexpected status code %d' % status)

View File

@@ -64,6 +64,38 @@ class TestSwift3Obj(Swift3TestCase):
if method == 'GET':
self.assertEquals(body, self.object_body)
def test_object_HEAD_error(self):
# HEAD does not return the body even an error resonse in the
# specifications of the REST API.
# So, check the response code for error test of HEAD.
req = Request.blank('/bucket/object',
environ={'REQUEST_METHOD': 'HEAD'},
headers={'Authorization': 'AWS test:tester:hmac'})
self.swift.register('HEAD', '/v1/AUTH_test/bucket/object',
swob.HTTPUnauthorized, {}, None)
status, headers, body = self.call_swift3(req)
self.assertEquals(status.split()[0], '403')
self.swift.register('HEAD', '/v1/AUTH_test/bucket/object',
swob.HTTPForbidden, {}, None)
status, headers, body = self.call_swift3(req)
self.assertEquals(status.split()[0], '403')
self.swift.register('HEAD', '/v1/AUTH_test/bucket/object',
swob.HTTPNotFound, {}, None)
status, headers, body = self.call_swift3(req)
self.assertEquals(status.split()[0], '404')
self.swift.register('HEAD', '/v1/AUTH_test/bucket/object',
swob.HTTPPreconditionFailed, {}, None)
status, headers, body = self.call_swift3(req)
self.assertEquals(status.split()[0], '412')
self.swift.register('HEAD', '/v1/AUTH_test/bucket/object',
swob.HTTPServerError, {}, None)
status, headers, body = self.call_swift3(req)
self.assertEquals(status.split()[0], '500')
self.swift.register('HEAD', '/v1/AUTH_test/bucket/object',
swob.HTTPServiceUnavailable, {}, None)
status, headers, body = self.call_swift3(req)
self.assertEquals(status.split()[0], '500')
def test_object_HEAD(self):
self._test_object_GETorHEAD('HEAD')
@@ -80,6 +112,12 @@ class TestSwift3Obj(Swift3TestCase):
code = self._test_method_error('GET', '/bucket/object',
swob.HTTPServerError)
self.assertEquals(code, 'InternalError')
code = self._test_method_error('GET', '/bucket/object',
swob.HTTPPreconditionFailed)
self.assertEquals(code, 'PreconditionFailed')
code = self._test_method_error('GET', '/bucket/object',
swob.HTTPServiceUnavailable)
self.assertEquals(code, 'InternalError')
def test_object_GET(self):
self._test_object_GETorHEAD('GET')
@@ -95,6 +133,11 @@ class TestSwift3Obj(Swift3TestCase):
self.assertTrue('content-range' in headers)
self.assertTrue(headers['content-range'].startswith('bytes 0-3'))
def test_object_GET_Range_error(self):
code = self._test_method_error('GET', '/bucket/object',
swob.HTTPRequestedRangeNotSatisfiable)
self.assertEquals(code, 'InvalidRange')
def test_object_GET_Response(self):
req = Request.blank('/bucket/object',
environ={'REQUEST_METHOD': 'GET',
@@ -144,6 +187,15 @@ class TestSwift3Obj(Swift3TestCase):
code = self._test_method_error('PUT', '/bucket/object',
swob.HTTPServerError)
self.assertEquals(code, 'InternalError')
code = self._test_method_error('PUT', '/bucket/object',
swob.HTTPUnprocessableEntity)
self.assertEquals(code, 'InvalidDigest')
code = self._test_method_error('PUT', '/bucket/object',
swob.HTTPLengthRequired)
self.assertEquals(code, 'MissingContentLength')
code = self._test_method_error('PUT', '/bucket/object',
swob.HTTPServiceUnavailable)
self.assertEquals(code, 'InternalError')
def test_object_PUT(self):
etag = self.response_headers['etag']
@@ -208,6 +260,9 @@ class TestSwift3Obj(Swift3TestCase):
code = self._test_method_error('DELETE', '/bucket/object',
swob.HTTPServerError)
self.assertEquals(code, 'InternalError')
code = self._test_method_error('DELETE', '/bucket/object',
swob.HTTPServiceUnavailable)
self.assertEquals(code, 'InternalError')
def test_object_DELETE(self):
req = Request.blank('/bucket/object',