def test_dry_run(self): self.cli_params['dryrun'] = True self.transfer_request_submitter = CopyRequestSubmitter( self.transfer_manager, self.result_queue, self.cli_params) fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, src_type='s3', dest=self.bucket + '/' + self.key, dest_type='s3', operation_name='copy') self.transfer_request_submitter.submit(fileinfo) result = self.result_queue.get() self.assertIsInstance(result, DryRunResult) self.assertEqual(result.transfer_type, 'copy') source = 's3://' + self.source_bucket + '/' + self.source_key self.assertEqual(result.src, source) self.assertEqual(result.dest, 's3://' + self.bucket + '/' + self.key)
def test_dry_run(self): self.cli_params['dryrun'] = True self.transfer_request_submitter = CopyRequestSubmitter( self.transfer_manager, self.result_queue, self.cli_params) fileinfo = FileInfo( src=self.source_bucket + '/' + self.source_key, src_type='s3', dest=self.bucket + '/' + self.key, dest_type='s3', operation_name='copy') self.transfer_request_submitter.submit(fileinfo) result = self.result_queue.get() self.assertIsInstance(result, DryRunResult) self.assertEqual(result.transfer_type, 'copy') source = 's3://' + self.source_bucket + '/' + self.source_key self.assertEqual(result.src, source) self.assertEqual(result.dest, 's3://' + self.bucket + '/' + self.key)
def setUp(self): super(TestCopyRequestSubmitter, self).setUp() self.source_bucket = 'mysourcebucket' self.source_key = 'mysourcekey' self.transfer_request_submitter = CopyRequestSubmitter( self.transfer_manager, self.result_queue, self.cli_params)
class TestCopyRequestSubmitter(BaseTransferRequestSubmitterTest): def setUp(self): super(TestCopyRequestSubmitter, self).setUp() self.source_bucket = 'mysourcebucket' self.source_key = 'mysourcekey' self.transfer_request_submitter = CopyRequestSubmitter( self.transfer_manager, self.result_queue, self.cli_params) def test_can_submit(self): fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, dest=self.bucket + '/' + self.key, operation_name='copy') self.assertTrue(self.transfer_request_submitter.can_submit(fileinfo)) fileinfo.operation_name = 'foo' self.assertFalse(self.transfer_request_submitter.can_submit(fileinfo)) def test_submit(self): fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, dest=self.bucket + '/' + self.key) self.cli_params['guess_mime_type'] = True # Default settings future = self.transfer_request_submitter.submit(fileinfo) self.assertIs(self.transfer_manager.copy.return_value, future) copy_call_kwargs = self.transfer_manager.copy.call_args[1] self.assertEqual(copy_call_kwargs['copy_source'], { 'Bucket': self.source_bucket, 'Key': self.source_key }) self.assertEqual(copy_call_kwargs['bucket'], self.bucket) self.assertEqual(copy_call_kwargs['key'], self.key) self.assertEqual(copy_call_kwargs['extra_args'], {}) # Make sure the subscriber applied are of the correct type and order ref_subscribers = [ ProvideSizeSubscriber, ProvideCopyContentTypeSubscriber, CopyResultSubscriber ] actual_subscribers = copy_call_kwargs['subscribers'] self.assertEqual(len(ref_subscribers), len(actual_subscribers)) for i, actual_subscriber in enumerate(actual_subscribers): self.assertIsInstance(actual_subscriber, ref_subscribers[i]) def test_submit_with_extra_args(self): fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, dest=self.bucket + '/' + self.key) # Set some extra argument like storage_class to make sure cli # params get mapped to request parameters. self.cli_params['storage_class'] = 'STANDARD_IA' self.transfer_request_submitter.submit(fileinfo) copy_call_kwargs = self.transfer_manager.copy.call_args[1] self.assertEqual(copy_call_kwargs['extra_args'], {'StorageClass': 'STANDARD_IA'}) def test_submit_when_content_type_specified(self): fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, dest=self.bucket + '/' + self.key) self.cli_params['content_type'] = 'text/plain' self.transfer_request_submitter.submit(fileinfo) copy_call_kwargs = self.transfer_manager.copy.call_args[1] self.assertEqual(copy_call_kwargs['extra_args'], {'ContentType': 'text/plain'}) ref_subscribers = [ProvideSizeSubscriber, CopyResultSubscriber] actual_subscribers = copy_call_kwargs['subscribers'] self.assertEqual(len(ref_subscribers), len(actual_subscribers)) for i, actual_subscriber in enumerate(actual_subscribers): self.assertIsInstance(actual_subscriber, ref_subscribers[i]) def test_submit_when_no_guess_content_mime_type(self): fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, dest=self.bucket + '/' + self.key) self.cli_params['guess_mime_type'] = False self.transfer_request_submitter.submit(fileinfo) copy_call_kwargs = self.transfer_manager.copy.call_args[1] ref_subscribers = [ProvideSizeSubscriber, CopyResultSubscriber] actual_subscribers = copy_call_kwargs['subscribers'] self.assertEqual(len(ref_subscribers), len(actual_subscribers)) for i, actual_subscriber in enumerate(actual_subscribers): self.assertIsInstance(actual_subscriber, ref_subscribers[i]) def test_warn_glacier_for_incompatible(self): fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, dest=self.bucket + '/' + self.key, operation_name='copy', associated_response_data={ 'StorageClass': 'GLACIER', }) future = self.transfer_request_submitter.submit(fileinfo) # A warning should have been submitted because it is a non-restored # glacier object. warning_result = self.result_queue.get() self.assertIsInstance(warning_result, WarningResult) self.assertIn('Unable to perform copy operations on GLACIER objects', warning_result.message) # The transfer request should have never been sent therefore return # no future. self.assertIsNone(future) # The transfer should have been skipped. self.assertEqual(len(self.transfer_manager.copy.call_args_list), 0) def test_not_warn_glacier_for_compatible(self): fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, dest=self.bucket + '/' + self.key, operation_name='copy', associated_response_data={ 'StorageClass': 'GLACIER', 'Restore': 'ongoing-request="false"' }) future = self.transfer_request_submitter.submit(fileinfo) self.assertIs(self.transfer_manager.copy.return_value, future) # A warning should have not been submitted because it is a restored # glacier object. self.assertTrue(self.result_queue.empty()) # And the transfer should not have been skipped. self.assertEqual(len(self.transfer_manager.copy.call_args_list), 1) def test_warn_glacier_force_glacier(self): self.cli_params['force_glacier_transfer'] = True fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, dest=self.bucket + '/' + self.key, operation_name='copy', associated_response_data={ 'StorageClass': 'GLACIER', }) future = self.transfer_request_submitter.submit(fileinfo) self.assertIs(self.transfer_manager.copy.return_value, future) # A warning should have not been submitted because it is glacier # transfers were forced. self.assertTrue(self.result_queue.empty()) self.assertEqual(len(self.transfer_manager.copy.call_args_list), 1) def test_warn_glacier_ignore_glacier_warnings(self): self.cli_params['ignore_glacier_warnings'] = True fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, dest=self.bucket + '/' + self.key, operation_name='copy', associated_response_data={ 'StorageClass': 'GLACIER', }) future = self.transfer_request_submitter.submit(fileinfo) # The transfer request should have never been sent therefore return # no future. self.assertIsNone(future) # A warning should have not been submitted because it was specified # to ignore glacier warnings. self.assertTrue(self.result_queue.empty()) # But the transfer still should have been skipped. self.assertEqual(len(self.transfer_manager.copy.call_args_list), 0) def test_dry_run(self): self.cli_params['dryrun'] = True self.transfer_request_submitter = CopyRequestSubmitter( self.transfer_manager, self.result_queue, self.cli_params) fileinfo = FileInfo(src=self.source_bucket + '/' + self.source_key, src_type='s3', dest=self.bucket + '/' + self.key, dest_type='s3', operation_name='copy') self.transfer_request_submitter.submit(fileinfo) result = self.result_queue.get() self.assertIsInstance(result, DryRunResult) self.assertEqual(result.transfer_type, 'copy') source = 's3://' + self.source_bucket + '/' + self.source_key self.assertEqual(result.src, source) self.assertEqual(result.dest, 's3://' + self.bucket + '/' + self.key) def test_submit_move_adds_delete_source_subscriber(self): fileinfo = FileInfo(dest=self.source_bucket + '/' + self.source_key, src=self.bucket + '/' + self.key) self.cli_params['guess_mime_type'] = True # Default settings self.cli_params['is_move'] = True self.transfer_request_submitter.submit(fileinfo) ref_subscribers = [ ProvideSizeSubscriber, ProvideCopyContentTypeSubscriber, DeleteSourceObjectSubscriber, CopyResultSubscriber, ] copy_call_kwargs = self.transfer_manager.copy.call_args[1] actual_subscribers = copy_call_kwargs['subscribers'] self.assertEqual(len(ref_subscribers), len(actual_subscribers)) for i, actual_subscriber in enumerate(actual_subscribers): self.assertIsInstance(actual_subscriber, ref_subscribers[i])
def setUp(self): super(TestCopyRequestSubmitter, self).setUp() self.source_bucket = 'mysourcebucket' self.source_key = 'mysourcekey' self.transfer_request_submitter = CopyRequestSubmitter( self.transfer_manager, self.result_queue, self.cli_params)
class TestCopyRequestSubmitter(BaseTransferRequestSubmitterTest): def setUp(self): super(TestCopyRequestSubmitter, self).setUp() self.source_bucket = 'mysourcebucket' self.source_key = 'mysourcekey' self.transfer_request_submitter = CopyRequestSubmitter( self.transfer_manager, self.result_queue, self.cli_params) def test_can_submit(self): fileinfo = FileInfo( src=self.source_bucket+'/'+self.source_key, dest=self.bucket+'/'+self.key, operation_name='copy') self.assertTrue( self.transfer_request_submitter.can_submit(fileinfo)) fileinfo.operation_name = 'foo' self.assertFalse( self.transfer_request_submitter.can_submit(fileinfo)) def test_submit(self): fileinfo = FileInfo( src=self.source_bucket+'/'+self.source_key, dest=self.bucket+'/'+self.key) self.cli_params['guess_mime_type'] = True # Default settings future = self.transfer_request_submitter.submit(fileinfo) self.assertIs(self.transfer_manager.copy.return_value, future) copy_call_kwargs = self.transfer_manager.copy.call_args[1] self.assertEqual( copy_call_kwargs['copy_source'], {'Bucket': self.source_bucket, 'Key': self.source_key}) self.assertEqual(copy_call_kwargs['bucket'], self.bucket) self.assertEqual(copy_call_kwargs['key'], self.key) self.assertEqual(copy_call_kwargs['extra_args'], {}) # Make sure the subscriber applied are of the correct type and order ref_subscribers = [ ProvideSizeSubscriber, ProvideCopyContentTypeSubscriber, CopyResultSubscriber ] actual_subscribers = copy_call_kwargs['subscribers'] self.assertEqual(len(ref_subscribers), len(actual_subscribers)) for i, actual_subscriber in enumerate(actual_subscribers): self.assertIsInstance(actual_subscriber, ref_subscribers[i]) def test_submit_with_extra_args(self): fileinfo = FileInfo( src=self.source_bucket+'/'+self.source_key, dest=self.bucket+'/'+self.key) # Set some extra argument like storage_class to make sure cli # params get mapped to request parameters. self.cli_params['storage_class'] = 'STANDARD_IA' self.transfer_request_submitter.submit(fileinfo) copy_call_kwargs = self.transfer_manager.copy.call_args[1] self.assertEqual( copy_call_kwargs['extra_args'], {'StorageClass': 'STANDARD_IA'}) def test_submit_when_content_type_specified(self): fileinfo = FileInfo( src=self.source_bucket+'/'+self.source_key, dest=self.bucket+'/'+self.key) self.cli_params['content_type'] = 'text/plain' self.transfer_request_submitter.submit(fileinfo) copy_call_kwargs = self.transfer_manager.copy.call_args[1] self.assertEqual( copy_call_kwargs['extra_args'], {'ContentType': 'text/plain'}) ref_subscribers = [ ProvideSizeSubscriber, CopyResultSubscriber ] actual_subscribers = copy_call_kwargs['subscribers'] self.assertEqual(len(ref_subscribers), len(actual_subscribers)) for i, actual_subscriber in enumerate(actual_subscribers): self.assertIsInstance(actual_subscriber, ref_subscribers[i]) def test_submit_when_no_guess_content_mime_type(self): fileinfo = FileInfo( src=self.source_bucket+'/'+self.source_key, dest=self.bucket+'/'+self.key) self.cli_params['guess_mime_type'] = False self.transfer_request_submitter.submit(fileinfo) copy_call_kwargs = self.transfer_manager.copy.call_args[1] ref_subscribers = [ ProvideSizeSubscriber, CopyResultSubscriber ] actual_subscribers = copy_call_kwargs['subscribers'] self.assertEqual(len(ref_subscribers), len(actual_subscribers)) for i, actual_subscriber in enumerate(actual_subscribers): self.assertIsInstance(actual_subscriber, ref_subscribers[i]) def test_warn_glacier_for_incompatible(self): fileinfo = FileInfo( src=self.source_bucket+'/'+self.source_key, dest=self.bucket+'/'+self.key, operation_name='copy', associated_response_data={ 'StorageClass': 'GLACIER', } ) future = self.transfer_request_submitter.submit(fileinfo) # A warning should have been submitted because it is a non-restored # glacier object. warning_result = self.result_queue.get() self.assertIsInstance(warning_result, WarningResult) self.assertIn( 'Unable to perform copy operations on GLACIER objects', warning_result.message) # The transfer request should have never been sent therefore return # no future. self.assertIsNone(future) # The transfer should have been skipped. self.assertEqual(len(self.transfer_manager.copy.call_args_list), 0) def test_not_warn_glacier_for_compatible(self): fileinfo = FileInfo( src=self.source_bucket+'/'+self.source_key, dest=self.bucket+'/'+self.key, operation_name='copy', associated_response_data={ 'StorageClass': 'GLACIER', 'Restore': 'ongoing-request="false"' } ) future = self.transfer_request_submitter.submit(fileinfo) self.assertIs(self.transfer_manager.copy.return_value, future) # A warning should have not been submitted because it is a restored # glacier object. self.assertTrue(self.result_queue.empty()) # And the transfer should not have been skipped. self.assertEqual(len(self.transfer_manager.copy.call_args_list), 1) def test_warn_glacier_force_glacier(self): self.cli_params['force_glacier_transfer'] = True fileinfo = FileInfo( src=self.source_bucket+'/'+self.source_key, dest=self.bucket+'/'+self.key, operation_name='copy', associated_response_data={ 'StorageClass': 'GLACIER', } ) future = self.transfer_request_submitter.submit(fileinfo) self.assertIs(self.transfer_manager.copy.return_value, future) # A warning should have not been submitted because it is glacier # transfers were forced. self.assertTrue(self.result_queue.empty()) self.assertEqual(len(self.transfer_manager.copy.call_args_list), 1) def test_warn_glacier_ignore_glacier_warnings(self): self.cli_params['ignore_glacier_warnings'] = True fileinfo = FileInfo( src=self.source_bucket+'/'+self.source_key, dest=self.bucket+'/'+self.key, operation_name='copy', associated_response_data={ 'StorageClass': 'GLACIER', } ) future = self.transfer_request_submitter.submit(fileinfo) # The transfer request should have never been sent therefore return # no future. self.assertIsNone(future) # A warning should have not been submitted because it was specified # to ignore glacier warnings. self.assertTrue(self.result_queue.empty()) # But the transfer still should have been skipped. self.assertEqual(len(self.transfer_manager.copy.call_args_list), 0) def test_dry_run(self): self.cli_params['dryrun'] = True self.transfer_request_submitter = CopyRequestSubmitter( self.transfer_manager, self.result_queue, self.cli_params) fileinfo = FileInfo( src=self.source_bucket + '/' + self.source_key, src_type='s3', dest=self.bucket + '/' + self.key, dest_type='s3', operation_name='copy') self.transfer_request_submitter.submit(fileinfo) result = self.result_queue.get() self.assertIsInstance(result, DryRunResult) self.assertEqual(result.transfer_type, 'copy') source = 's3://' + self.source_bucket + '/' + self.source_key self.assertEqual(result.src, source) self.assertEqual(result.dest, 's3://' + self.bucket + '/' + self.key) def test_submit_move_adds_delete_source_subscriber(self): fileinfo = FileInfo( dest=self.source_bucket + '/' + self.source_key, src=self.bucket + '/' + self.key) self.cli_params['guess_mime_type'] = True # Default settings self.cli_params['is_move'] = True self.transfer_request_submitter.submit(fileinfo) ref_subscribers = [ ProvideSizeSubscriber, ProvideCopyContentTypeSubscriber, DeleteSourceObjectSubscriber, CopyResultSubscriber, ] copy_call_kwargs = self.transfer_manager.copy.call_args[1] actual_subscribers = copy_call_kwargs['subscribers'] self.assertEqual(len(ref_subscribers), len(actual_subscribers)) for i, actual_subscriber in enumerate(actual_subscribers): self.assertIsInstance(actual_subscriber, ref_subscribers[i])