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__)
示例#2
0
 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__)
示例#3
0
 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)
示例#4
0
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.")
示例#5
0
 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)