def test_iterator_next_pagination(self): self.os_client.list_objects.side_effect = list_objects_side_effect iterator = CasperListIterator(self.os_client, "namespace", "bucket", None, "start_object", "end_object") item1 = iterator.get_next() item2 = iterator.get_next() self.assertDictEqual({"size": 10, "md5": "abc123", "path": "first_object"}, item1.__dict__) self.assertDictEqual({"size": 20, "md5": "def456", "path": "second_object"}, item2.__dict__)
def test_iterator_next(self): self.os_client.list_objects.side_effect = list_objects_side_effect iterator = CasperListIterator(self.os_client, "namespace", "bucket", None, "start_object", "end_object") current_item = iterator.get_next() self.assertDictEqual( { "size": 10, "md5": "abc123", "path": "first_object" }, current_item.__dict__)
def test_iterator_next_empty_list(self): self.os_client.list_objects.side_effect = list_objects_side_effect iterator = CasperListIterator(self.os_client, "namespace", "bucket", None, "start_empty_object", "end_object") item1 = iterator.get_next() self.assertDictEqual( { "size": 10, "md5": "abc123", "path": "first_object" }, item1.__dict__) self.assertRaises(Exception, iterator.get_next)
def generate_manifest_appliance_export_job_extended(ctx, **kwargs): if isinstance(kwargs['compartment_id'], six.string_types) and len( kwargs['compartment_id'].strip()) == 0: raise click.UsageError( 'Parameter --compartment-id cannot be whitespace or empty string') if isinstance(kwargs['job_id'], six.string_types) and len( kwargs['job_id'].strip()) == 0: raise click.UsageError( 'Parameter --job-id cannot be whitespace or empty string') if isinstance(kwargs['bucket'], six.string_types) and len( kwargs['bucket'].strip()) == 0: raise click.UsageError( 'Parameter --bucket cannot be whitespace or empty string') ctx_endpoint_dts = ctx.obj['endpoint'] ctx.obj['endpoint'] = None os_client = create_os_client(ctx) namespace = os_client.get_namespace().data result = os_client.get_bucket(namespace_name=namespace, bucket_name=kwargs['bucket']) if result.data.storage_tier == OBJECT_STORAGE_BUCKET_TYPE_ARCHIVE: raise click.UsageError( 'Export for Archive buckets is currently not supported') click.echo( "Starting manifest generation on bucket {}. This may take few minutes, please wait until it is completed ..." .format(kwargs['bucket'])) iterator = CasperListIterator(os_client, namespace, kwargs['bucket'], kwargs['prefix'], kwargs['start'], kwargs['end']) consumer = ManifestStatsConsumer() uploader = ObjectUploader(os_client, namespace, kwargs['bucket'], kwargs['job_id']) writer = ManifestWriter(iterator, uploader, consumer) _start_time = time.time() response = writer.write() if response: click.echo('Manifest file {} uploaded to bucket {}.'.format( response.get_manifest_object_name(), kwargs['bucket'])) _total_time = time.time() - _start_time click.echo( "\n************************* Manifest generation completed in {:.2f} mins **************************" .format(_total_time / 60)) else: click.echo( "\n*********************************** Manifest generation failed **************************************" ) ctx.obj['endpoint'] = ctx_endpoint_dts kwargs_update = { 'appliance_export_job_id': kwargs['job_id'], 'lifecycle_state': UpdateApplianceExportJobDetails.LIFECYCLE_STATE_CREATING, 'lifecycle_state_details': LIFECYCLE_STATE_DETAILS_PENDING_SUBMISSION, 'manifest_file': response.get_manifest_object_name(), 'manifest_md5': response.get_manifest_md5(), 'prefix': kwargs['prefix'], 'range_start': kwargs['start'], 'range_end': kwargs['end'], 'total_size_in_bytes': response.get_total_size(), 'number_of_objects': response.get_total_count(), 'first_object': response.get_first_object(), 'last_object': response.get_last_object(), 'next_object': response.get_next_start_with() } ctx.invoke(applianceexportjob_cli.update_appliance_export_job, **kwargs_update) click.echo("\n*** Export Job updated with above manifest details.")
def test_iterator_has_next(self): self.os_client.list_objects.side_effect = list_objects_side_effect iterator = CasperListIterator(self.os_client, "namespace", "bucket", None, "start_object", "end_object") has_next = iterator.has_next() self.assertEqual(True, has_next)