Merge "Add Functional Tests for PUT Object Copy"
This commit is contained in:
@@ -19,6 +19,7 @@ from swift3.test.functional.s3_test_client import Connection
|
|||||||
from swift3.test.functional.utils import get_error_code,\
|
from swift3.test.functional.utils import get_error_code,\
|
||||||
assert_common_response_headers
|
assert_common_response_headers
|
||||||
from swift3.test.functional import Swift3FunctionalTestCase
|
from swift3.test.functional import Swift3FunctionalTestCase
|
||||||
|
from swift3.etree import fromstring
|
||||||
|
|
||||||
|
|
||||||
class TestSwift3Object(Swift3FunctionalTestCase):
|
class TestSwift3Object(Swift3FunctionalTestCase):
|
||||||
@@ -40,6 +41,21 @@ class TestSwift3Object(Swift3FunctionalTestCase):
|
|||||||
self.assertTrue(headers['etag'] is not None)
|
self.assertTrue(headers['etag'] is not None)
|
||||||
self.assertEquals(headers['content-length'], '0')
|
self.assertEquals(headers['content-length'], '0')
|
||||||
|
|
||||||
|
# PUT Object Copy
|
||||||
|
self.conn.make_request('PUT', 'dst_bucket')
|
||||||
|
headers = {'x-amz-copy-source': '/%s/%s' % (self.bucket, obj)}
|
||||||
|
status, headers, body = \
|
||||||
|
self.conn.make_request('PUT', 'dst_bucket', 'dst_obj',
|
||||||
|
headers=headers)
|
||||||
|
self.assertEquals(status, 200)
|
||||||
|
|
||||||
|
assert_common_response_headers(self, headers)
|
||||||
|
self.assertEquals(headers['content-length'], str(len(body)))
|
||||||
|
|
||||||
|
elem = fromstring(body, 'CopyObjectResult')
|
||||||
|
self.assertTrue(elem.find('LastModified').text is not None)
|
||||||
|
self.assertTrue(elem.find('ETag').text is not None)
|
||||||
|
|
||||||
# GET Object
|
# GET Object
|
||||||
status, headers, body = \
|
status, headers, body = \
|
||||||
self.conn.make_request('GET', self.bucket, obj)
|
self.conn.make_request('GET', self.bucket, obj)
|
||||||
@@ -79,6 +95,38 @@ class TestSwift3Object(Swift3FunctionalTestCase):
|
|||||||
self.conn.make_request('PUT', 'bucket2', 'object')
|
self.conn.make_request('PUT', 'bucket2', 'object')
|
||||||
self.assertEquals(get_error_code(body), 'NoSuchBucket')
|
self.assertEquals(get_error_code(body), 'NoSuchBucket')
|
||||||
|
|
||||||
|
def test_put_object_copy_error(self):
|
||||||
|
obj = 'object'
|
||||||
|
self.conn.make_request('PUT', self.bucket, obj)
|
||||||
|
dst_bucket = 'dst_bucket'
|
||||||
|
self.conn.make_request('PUT', dst_bucket)
|
||||||
|
dst_obj = 'dst_object'
|
||||||
|
|
||||||
|
headers = {'x-amz-copy-source': '/%s/%s' % (self.bucket, obj)}
|
||||||
|
auth_error_conn = Connection(aws_secret_key='invalid')
|
||||||
|
status, headers, body = \
|
||||||
|
auth_error_conn.make_request('PUT', dst_bucket, dst_obj, headers)
|
||||||
|
self.assertEquals(get_error_code(body), 'SignatureDoesNotMatch')
|
||||||
|
|
||||||
|
# /src/nothing -> /dst/dst
|
||||||
|
headers = {'X-Amz-Copy-Source': '/%s/%s' % (self.bucket, 'nothing')}
|
||||||
|
status, headers, body = \
|
||||||
|
self.conn.make_request('PUT', dst_bucket, dst_obj, headers)
|
||||||
|
self.assertEquals(get_error_code(body), 'NoSuchKey')
|
||||||
|
|
||||||
|
# /nothing/src -> /dst/dst
|
||||||
|
headers = {'X-Amz-Copy-Source': '/%s/%s' % ('nothing', obj)}
|
||||||
|
status, headers, body = \
|
||||||
|
self.conn.make_request('PUT', dst_bucket, dst_obj, headers)
|
||||||
|
# TODO: source bucket is not check.
|
||||||
|
# self.assertEquals(get_error_code(body), 'NoSuchBucket')
|
||||||
|
|
||||||
|
# /src/src -> /nothing/dst
|
||||||
|
headers = {'X-Amz-Copy-Source': '/%s/%s' % (self.bucket, obj)}
|
||||||
|
status, headers, body = \
|
||||||
|
self.conn.make_request('PUT', 'nothing', dst_obj, headers)
|
||||||
|
self.assertEquals(get_error_code(body), 'NoSuchBucket')
|
||||||
|
|
||||||
def test_get_object_error(self):
|
def test_get_object_error(self):
|
||||||
obj = 'object'
|
obj = 'object'
|
||||||
self.conn.make_request('PUT', self.bucket, obj)
|
self.conn.make_request('PUT', self.bucket, obj)
|
||||||
|
|||||||
Reference in New Issue
Block a user