diff --git a/s3tests/functional/test_s3.py b/s3tests/functional/test_s3.py index 2fe81e8..04352b0 100644 --- a/s3tests/functional/test_s3.py +++ b/s3tests/functional/test_s3.py @@ -4918,6 +4918,50 @@ def test_object_copy_key_not_found(): eq(e.reason, 'Not Found') eq(e.error_code, 'NoSuchKey') +@attr(resource='object') +@attr(method='put') +@attr(operation='copy object to/from versioned bucket') +@attr(assertion='works') +def test_object_copy_versioned_bucket(): + bucket = get_new_bucket() + check_configure_versioning_retry(bucket, True, "Enabled") + + key = bucket.new_key('foo123bar') + _create_key_with_random_content(key.name, 1*1024*1024) + + # copy object in the same bucket + key2 = bucket.copy_key('bar321foo', bucket.name, key.name, src_version_id = key.version_id) + res = _make_request('GET', bucket, key2) + eq(res.status, 200) + eq(res.reason, 'OK') + + # second copy + key3 = bucket.copy_key('bar321foo2', bucket.name, key2.name, src_version_id = key2.version_id) + res = _make_request('GET', bucket, key3) + eq(res.status, 200) + eq(res.reason, 'OK') + + # copy to another versioned bucket + bucket2 = get_new_bucket() + check_configure_versioning_retry(bucket2, True, "Enabled") + key4 = bucket2.copy_key('bar321foo3', bucket.name, key.name, src_version_id = key.version_id) + res = _make_request('GET', bucket, key4) + eq(res.status, 200) + eq(res.reason, 'OK') + + # copy to another non versioned bucket + bucket3 = get_new_bucket() + key5 = bucket3.copy_key('bar321foo4', bucket.name, key.name , src_version_id = key.version_id) + res = _make_request('GET', bucket, key5) + eq(res.status, 200) + eq(res.reason, 'OK') + + # copy from a non versioned bucket + key6 = bucket.copy_key('foo123bar2', bucket3.name, key5.name) + res = _make_request('GET', bucket, key6) + eq(res.status, 200) + eq(res.reason, 'OK') + def transfer_part(bucket, mp_id, mp_keyname, i, part): """Transfer a part of a multipart upload. Designed to be run in parallel. """