def test_copy_object(stub_and_patch, make_unique_name, make_bucket): """Test that copying an object from one bucket to another works as expected.""" stubber = stub_and_patch(bucket_wrapper, 'get_s3') src_bucket = make_bucket(stubber, bucket_wrapper.get_s3()) dest_bucket = make_bucket(stubber, bucket_wrapper.get_s3()) src_object_key = make_unique_name('src-object') dest_object_key = make_unique_name('dest-object') data = b"Some test data!" stubber.stub_put_object(src_bucket.name, src_object_key) stubber.stub_head_object(src_bucket.name, src_object_key) stubber.stub_copy_object(src_bucket.name, src_object_key, dest_bucket.name, dest_object_key) stubber.stub_head_object(dest_bucket.name, dest_object_key) stubber.stub_get_object(dest_bucket.name, dest_object_key, data) stubber.stub_list_objects(dest_bucket.name, [dest_object_key]) stubber.stub_delete_objects(dest_bucket.name, [dest_object_key]) stubber.stub_list_objects(src_bucket.name, [src_object_key]) stubber.stub_delete_objects(src_bucket.name, [src_object_key]) object_wrapper.put_object(src_bucket, src_object_key, data) copied_obj = object_wrapper.copy_object(src_bucket, src_object_key, dest_bucket, dest_object_key) assert data == copied_obj.get()['Body'].read() object_wrapper.empty_bucket(dest_bucket) object_wrapper.empty_bucket(src_bucket)
def test_list_objects_empty_bucket(stub_and_patch, make_unique_name, make_bucket, object_count): """Test that listing the objects in a test bucket returns the expected list and that the bucket can be emptied of objects.""" stubber = stub_and_patch(bucket_wrapper, 'get_s3') bucket = make_bucket(stubber, bucket_wrapper.get_s3()) object_key = make_unique_name('object') put_keys = [] for obj_suffix in range(0, object_count): key = f"{object_key}-{obj_suffix}" data = bytes(f"Test data-{obj_suffix}", 'utf-8') stubber.stub_put_object(bucket.name, key) stubber.stub_head_object(bucket.name, key) object_wrapper.put_object(bucket, key, data) put_keys.append(key) stubber.stub_list_objects(bucket.name, put_keys) stubber.stub_list_objects(bucket.name, put_keys, "object") stubber.stub_list_objects(bucket.name, put_keys) if put_keys: stubber.stub_delete_objects(bucket.name, put_keys) stubber.stub_list_objects(bucket.name) all_objects = object_wrapper.list_objects(bucket) assert set(put_keys).issubset([o.key for o in all_objects]) filtered_objects = object_wrapper.list_objects(bucket, "object") assert put_keys == [o.key for o in filtered_objects] object_wrapper.empty_bucket(bucket) assert [] == object_wrapper.list_objects(bucket)
def test_delete_objects(stub_and_patch, make_unique_name, make_bucket): """Test that deleting objects from a bucket works as expected.""" stubber = stub_and_patch(bucket_wrapper, 'get_s3') bucket = make_bucket(stubber, bucket_wrapper.get_s3()) object_key = make_unique_name('object') put_keys = [] for suffix in range(0, 5): put_key = f"{object_key}-{suffix}" stubber.stub_put_object(bucket.name, put_key) stubber.stub_head_object(bucket.name, put_key) object_wrapper.put_object(bucket, put_key, b"Test data!") put_keys.append(put_key) delete_keys = put_keys[3:] keep_keys = put_keys[:3] stubber.stub_delete_objects(bucket.name, delete_keys) stubber.stub_list_objects(bucket.name, keep_keys) stubber.stub_list_objects(bucket.name) response = object_wrapper.delete_objects(bucket, delete_keys) assert set(delete_keys) == set(obj['Key'] for obj in response['Deleted']) assert set(keep_keys) == set( obj.key for obj in object_wrapper.list_objects(bucket)) object_wrapper.empty_bucket(bucket)
def test_put_get_acl(stub_and_patch, make_unique_name, make_bucket): """ Test that put and get of an object ACL works as expected. To run this test against the non-stubbed AWS service, you must replace the email and canonical_user values with an existing AWS user or the test will fail. """ stubber = stub_and_patch(bucket_wrapper, 'get_s3') bucket = make_bucket(stubber, bucket_wrapper.get_s3()) object_key = make_unique_name('object') email = '*****@*****.**' canonical_user = '******' stubber.stub_put_object(bucket.name, object_key) stubber.stub_head_object(bucket.name, object_key) stubber.stub_get_object_acl(bucket.name, object_key) stubber.stub_put_object_acl(bucket.name, object_key, email) stubber.stub_get_object_acl(bucket.name, object_key, email) stubber.stub_list_objects(bucket.name) object_wrapper.put_object(bucket, object_key, b"Test data") object_wrapper.put_acl(bucket, object_key, email) acl = object_wrapper.get_acl(bucket, object_key) email_grantee = { 'Grantee': { 'Type': 'CanonicalUser', 'DisplayName': canonical_user, 'ID': ANY }, 'Permission': 'READ' } assert email_grantee in acl.grants owner_grantee = { 'Grantee': { 'Type': 'CanonicalUser', 'ID': acl.owner['ID'], 'DisplayName': acl.owner['DisplayName'] }, 'Permission': 'FULL_CONTROL' } assert owner_grantee in acl.grants object_wrapper.empty_bucket(bucket)