def test_copy_object_in_same_container(self):
        # create source object
        src_object_name = data_utils.rand_name(name='SrcObject')
        src_data = data_utils.random_bytes(size=len(src_object_name) * 2)
        resp, _ = self.object_client.create_object(self.container_name,
                                                   src_object_name,
                                                   src_data)
        # create destination object
        dst_object_name = data_utils.rand_name(name='DstObject')
        dst_data = data_utils.random_bytes(size=len(dst_object_name) * 3)
        resp, _ = self.object_client.create_object(self.container_name,
                                                   dst_object_name,
                                                   dst_data)
        # copy source object to destination
        headers = {}
        headers['X-Copy-From'] = "%s/%s" % (str(self.container_name),
                                            str(src_object_name))
        resp, body = self.object_client.create_object(self.container_name,
                                                      dst_object_name,
                                                      data=None,
                                                      headers=headers)
        self.assertHeaders(resp, 'Object', 'PUT')

        # check data
        resp, body = self.object_client.get_object(self.container_name,
                                                   dst_object_name)
        self.assertEqual(body, src_data)
    def test_random_bytes(self):
        actual = data_utils.random_bytes()  # default size=1024
        self.assertIsInstance(actual, bytes)
        self.assertEqual(1024, len(actual))
        actual2 = data_utils.random_bytes()
        self.assertNotEqual(actual, actual2)

        actual = data_utils.random_bytes(size=2048)
        self.assertEqual(2048, len(actual))
Exemple #3
0
    def test_random_bytes(self):
        actual = data_utils.random_bytes()  # default size=1024
        self.assertIsInstance(actual, str)
        self.assertRegex(actual, "^[\x00-\xFF]{1024}")
        actual2 = data_utils.random_bytes()
        self.assertNotEqual(actual, actual2)

        actual = data_utils.random_bytes(size=2048)
        self.assertRegex(actual, "^[\x00-\xFF]{2048}")
Exemple #4
0
    def test_deactivate_reactivate_image(self):
        # Create image
        image_name = data_utils.rand_name('image')
        image = self.create_image(name=image_name,
                                  container_format='bare',
                                  disk_format='raw',
                                  visibility='private')

        # Upload an image file
        content = data_utils.random_bytes()
        image_file = six.BytesIO(content)
        self.client.store_image_file(image['id'], image_file)

        # Deactivate image
        self.client.deactivate_image(image['id'])
        body = self.client.show_image(image['id'])
        self.assertEqual("deactivated", body['status'])

        # User unable to download deactivated image
        self.assertRaises(lib_exc.Forbidden, self.client.show_image_file,
                          image['id'])

        # Reactivate image
        self.client.reactivate_image(image['id'])
        body = self.client.show_image(image['id'])
        self.assertEqual("active", body['status'])

        # User able to download image after reactivation
        body = self.client.show_image_file(image['id'])
        self.assertEqual(content, body.data)
Exemple #5
0
    def _create_manifest(self):
        # Create a manifest file for SLO uploading
        object_name = data_utils.rand_name(name='TestObject')
        object_name_base_1 = object_name + '_01'
        object_name_base_2 = object_name + '_02'
        data_size = MIN_SEGMENT_SIZE
        self.content = data_utils.random_bytes(data_size)
        self._create_object(self.container_name,
                            object_name_base_1,
                            self.content)
        self._create_object(self.container_name,
                            object_name_base_2,
                            self.content)

        path_object_1 = '/%s/%s' % (self.container_name,
                                    object_name_base_1)
        path_object_2 = '/%s/%s' % (self.container_name,
                                    object_name_base_2)
        data_manifest = [{'path': path_object_1,
                          'etag': hashlib.md5(self.content).hexdigest(),
                          'size_bytes': data_size},
                         {'path': path_object_2,
                          'etag': hashlib.md5(self.content).hexdigest(),
                          'size_bytes': data_size}]

        return json.dumps(data_manifest)
Exemple #6
0
    def test_update_image(self):
        # Updates an image by image_id

        # Create image
        image_name = data_utils.rand_name('image')
        container_format = CONF.image.container_formats[0]
        disk_format = CONF.image.disk_formats[0]
        image = self.create_image(name=image_name,
                                  container_format=container_format,
                                  disk_format=disk_format,
                                  visibility='private')
        self.assertEqual('queued', image['status'])

        # Now try uploading an image file
        image_file = six.BytesIO(data_utils.random_bytes())
        self.client.store_image_file(image['id'], image_file)

        # Update Image
        new_image_name = data_utils.rand_name('new-image')
        body = self.client.update_image(image['id'], [
            dict(replace='/name', value=new_image_name)])

        # Verifying updating

        body = self.client.show_image(image['id'])
        self.assertEqual(image['id'], body['id'])
        self.assertEqual(new_image_name, body['name'])
Exemple #7
0
    def test_update_image(self):
        # Updates an image by image_id

        # Create image
        image_name = data_utils.rand_name('image')
        container_format = CONF.image.container_formats[0]
        disk_format = CONF.image.disk_formats[0]
        image = self.create_image(name=image_name,
                                  container_format=container_format,
                                  disk_format=disk_format,
                                  visibility='private')
        self.assertEqual('queued', image['status'])

        # NOTE: This Glance API returns different status codes for image
        # condition. In this empty data case, Glance should return 204,
        # so here should check the status code.
        image_file = self.client.show_image_file(image['id'])
        self.assertEqual(0, len(image_file.data))
        self.assertEqual(204, image_file.response.status)

        # Now try uploading an image file
        image_file = six.BytesIO(data_utils.random_bytes())
        self.client.store_image_file(image['id'], image_file)

        # Update Image
        new_image_name = data_utils.rand_name('new-image')
        self.client.update_image(image['id'], [
            dict(replace='/name', value=new_image_name)])

        # Verifying updating

        body = self.client.show_image(image['id'])
        self.assertEqual(image['id'], body['id'])
        self.assertEqual(new_image_name, body['name'])
    def test_access_public_container_object_without_using_creds(self):
        # make container public-readable and access an object in it object
        # anonymously, without using credentials

        # update container metadata to make it publicly readable
        cont_headers = {'X-Container-Read': '.r:*,.rlistings'}
        resp_meta, body = self.container_client.update_container_metadata(
            self.container_name, metadata=cont_headers, metadata_prefix='')
        self.assertHeaders(resp_meta, 'Container', 'POST')

        # create object
        object_name = data_utils.rand_name(name='Object')
        data = data_utils.random_bytes(size=len(object_name))
        resp, _ = self.object_client.create_object(self.container_name,
                                                   object_name, data)
        self.assertHeaders(resp, 'Object', 'PUT')

        # list container metadata
        resp_meta, _ = self.container_client.list_container_metadata(
            self.container_name)
        self.assertHeaders(resp_meta, 'Container', 'HEAD')

        self.assertIn('x-container-read', resp_meta)
        self.assertEqual(resp_meta['x-container-read'], '.r:*,.rlistings')

        # trying to get object with empty headers as it is public readable
        self.object_client.auth_provider.set_alt_auth_data(
            request_part='headers',
            auth_data=None
        )
        resp, body = self.object_client.get_object(
            self.container_name, object_name)
        self.assertHeaders(resp, 'Object', 'GET')

        self.assertEqual(body, data)
    def test_update_object_metadata_with_create_and_remove_metadata(self):
        # creation and deletion of metadata with one request
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        create_metadata = {'X-Object-Meta-test-meta1': 'Meta1'}
        self.object_client.create_object(self.container_name,
                                         object_name,
                                         data,
                                         metadata=create_metadata)

        update_metadata = {'X-Object-Meta-test-meta2': 'Meta2',
                           'X-Remove-Object-Meta-test-meta1': 'Meta1'}
        resp, _ = self.object_client.update_object_metadata(
            self.container_name,
            object_name,
            update_metadata,
            metadata_prefix='')
        self.assertHeaders(resp, 'Object', 'POST')

        resp, _ = self.object_client.list_object_metadata(
            self.container_name,
            object_name)
        self.assertNotIn('x-object-meta-test-meta1', resp)
        self.assertIn('x-object-meta-test-meta2', resp)
        self.assertEqual(resp['x-object-meta-test-meta2'], 'Meta2')
Exemple #10
0
 def _create_image(self):
     image_file = six.BytesIO(data_utils.random_bytes())
     image = self.create_image(container_format='bare',
                               disk_format='raw',
                               is_public=False,
                               data=image_file)
     return image['id']
 def test_admin_deactivate_reactivate_image(self):
     # Create image by non-admin tenant
     image_name = data_utils.rand_name('image')
     body = self.client.create_image(name=image_name,
                                     container_format='bare',
                                     disk_format='raw',
                                     visibility='private')
     image_id = body['id']
     self.addCleanup(self.client.delete_image, image_id)
     # upload an image file
     content = data_utils.random_bytes()
     image_file = moves.cStringIO(content)
     self.client.store_image_file(image_id, image_file)
     # deactivate image
     self.admin_client.deactivate_image(image_id)
     body = self.client.show_image(image_id)
     self.assertEqual("deactivated", body['status'])
     # non-admin user unable to download deactivated image
     self.assertRaises(lib_exc.Forbidden, self.client.show_image_file,
                       image_id)
     # reactivate image
     self.admin_client.reactivate_image(image_id)
     body = self.client.show_image(image_id)
     self.assertEqual("active", body['status'])
     # non-admin user able to download image after reactivation by admin
     body = self.client.show_image_file(image_id)
     self.assertEqual(content, body.data)
    def test_versioned_container(self):
        # create container
        vers_container_name = data_utils.rand_name(name='TestVersionContainer')
        resp, body = self.container_client.create_container(
            vers_container_name)
        self.containers.append(vers_container_name)
        self.assertHeaders(resp, 'Container', 'PUT')
        self.assertContainer(vers_container_name, '0', '0', 'Missing Header')

        base_container_name = data_utils.rand_name(name='TestBaseContainer')
        headers = {'X-versions-Location': vers_container_name}
        resp, body = self.container_client.create_container(
            base_container_name,
            metadata=headers,
            metadata_prefix='')
        self.containers.append(base_container_name)
        self.assertHeaders(resp, 'Container', 'PUT')
        self.assertContainer(base_container_name, '0', '0',
                             vers_container_name)
        object_name = data_utils.rand_name(name='TestObject')
        # create object
        data_1 = data_utils.random_bytes()
        resp, _ = self.object_client.create_object(base_container_name,
                                                   object_name, data_1)
        # create 2nd version of object
        data_2 = data_utils.random_bytes()
        resp, _ = self.object_client.create_object(base_container_name,
                                                   object_name, data_2)
        resp, body = self.object_client.get_object(base_container_name,
                                                   object_name)
        self.assertEqual(body, data_2)
        # delete object version 2
        resp, _ = self.object_client.delete_object(base_container_name,
                                                   object_name)
        self.assertContainer(base_container_name, '1', '1024',
                             vers_container_name)
        resp, body = self.object_client.get_object(base_container_name,
                                                   object_name)
        self.assertEqual(body, data_1)
        # delete object version 1
        resp, _ = self.object_client.delete_object(base_container_name,
                                                   object_name)
        # containers should be empty
        self.assertContainer(base_container_name, '0', '0',
                             vers_container_name)
        self.assertContainer(vers_container_name, '0', '0',
                             'Missing Header')
    def test_create_object(self):
        # create object
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        resp, _ = self.object_client.create_object(self.container_name,
                                                   object_name, data)
        # create another object
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        resp, _ = self.object_client.create_object(self.container_name,
                                                   object_name, data)
        self.assertHeaders(resp, 'Object', 'PUT')

        # check uploaded content
        _, body = self.object_client.get_object(self.container_name,
                                                object_name)
        self.assertEqual(data, body)
Exemple #14
0
    def test_store_image_file(self):
        data = six.BytesIO(data_utils.random_bytes())

        self.check_service_client_function(
            self.client.store_image_file,
            'tempest.lib.common.rest_client.RestClient.raw_request',
            {},
            image_id=self.FAKE_CREATE_UPDATE_SHOW_IMAGE["id"],
            status=204,
            data=data)
    def test_get_object_with_if_none_match(self):
        # get object with if_none_match
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        create_md5 = hashlib.md5(data).hexdigest()
        create_metadata = {'Etag': create_md5}
        self.object_client.create_object(self.container_name,
                                         object_name,
                                         data,
                                         metadata=create_metadata)

        list_data = data_utils.random_bytes()
        list_md5 = hashlib.md5(list_data).hexdigest()
        list_metadata = {'If-None-Match': list_md5}
        resp, body = self.object_client.get_object(self.container_name,
                                                   object_name,
                                                   metadata=list_metadata)
        self.assertHeaders(resp, 'Object', 'GET')
        self.assertEqual(body, data)
 def test_delete_object(self):
     # create object
     object_name = data_utils.rand_name(name='TestObject')
     data = data_utils.random_bytes()
     resp, _ = self.object_client.create_object(self.container_name,
                                                object_name, data)
     # delete object
     resp, _ = self.object_client.delete_object(self.container_name,
                                                object_name)
     self.assertHeaders(resp, 'Object', 'DELETE')
 def test_delete_object(self):
     # create object
     object_name = data_utils.rand_name(name='TestObject')
     data = data_utils.random_bytes()
     resp, _ = self.object_client.create_object(self.container_name,
                                                object_name, data)
     # delete object
     resp, _ = self.object_client.delete_object(self.container_name,
                                                object_name)
     self.assertHeaders(resp, 'Object', 'DELETE')
Exemple #18
0
    def test_versioned_container(self):
        # create container
        vers_container_name = data_utils.rand_name(name='TestVersionContainer')
        resp, _ = self.container_client.update_container(vers_container_name)
        self.containers.append(vers_container_name)
        self.assertHeaders(resp, 'Container', 'PUT')
        self.assertContainer(vers_container_name, '0', '0', 'Missing Header')

        base_container_name = data_utils.rand_name(name='TestBaseContainer')
        headers = {'X-versions-Location': vers_container_name}
        resp, _ = self.container_client.update_container(
            base_container_name, **headers)
        self.containers.append(base_container_name)
        self.assertHeaders(resp, 'Container', 'PUT')
        self.assertContainer(base_container_name, '0', '0',
                             vers_container_name)
        object_name = data_utils.rand_name(name='TestObject')
        # create object
        data_1 = data_utils.random_bytes()
        resp, _ = self.object_client.create_object(base_container_name,
                                                   object_name, data_1)
        # create 2nd version of object
        data_2 = data_utils.random_bytes()
        resp, _ = self.object_client.create_object(base_container_name,
                                                   object_name, data_2)
        _, body = self.object_client.get_object(base_container_name,
                                                object_name)
        self.assertEqual(body, data_2)
        # delete object version 2
        resp, _ = self.object_client.delete_object(base_container_name,
                                                   object_name)
        self.assertContainer(base_container_name, '1', '1024',
                             vers_container_name)
        _, body = self.object_client.get_object(base_container_name,
                                                object_name)
        self.assertEqual(body, data_1)
        # delete object version 1
        self.object_client.delete_object(base_container_name, object_name)
        # containers should be empty
        self.assertContainer(base_container_name, '0', '0',
                             vers_container_name)
        self.assertContainer(vers_container_name, '0', '0', 'Missing Header')
    def test_get_object_with_if_none_match(self):
        # get object with if_none_match
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        create_md5 = hashlib.md5(data).hexdigest()
        create_metadata = {'Etag': create_md5}
        self.object_client.create_object(self.container_name,
                                         object_name,
                                         data,
                                         metadata=create_metadata)

        list_data = data_utils.random_bytes()
        list_md5 = hashlib.md5(list_data).hexdigest()
        list_metadata = {'If-None-Match': list_md5}
        resp, body = self.object_client.get_object(
            self.container_name,
            object_name,
            metadata=list_metadata)
        self.assertHeaders(resp, 'Object', 'GET')
        self.assertEqual(body, data)
    def test_copy_object_2d_way(self):
        # create source object
        src_object_name = data_utils.rand_name(name='SrcObject')
        src_data = data_utils.random_bytes(size=len(src_object_name) * 2)
        resp, _ = self.object_client.create_object(self.container_name,
                                                   src_object_name, src_data)
        # create destination object
        dst_object_name = data_utils.rand_name(name='DstObject')
        dst_data = data_utils.random_bytes(size=len(dst_object_name) * 3)
        resp, _ = self.object_client.create_object(self.container_name,
                                                   dst_object_name, dst_data)
        # copy source object to destination
        resp, _ = self.object_client.copy_object_2d_way(
            self.container_name, src_object_name, dst_object_name)
        self.assertHeaders(resp, 'Object', 'COPY')
        self.assertEqual(resp['x-copied-from'],
                         self.container_name + "/" + src_object_name)

        # check data
        self._check_copied_obj(dst_object_name, src_data)
    def test_copy_object_in_same_container(self):
        # create source object
        src_object_name = data_utils.rand_name(name='SrcObject')
        src_data = data_utils.random_bytes(size=len(src_object_name) * 2)
        resp, _ = self.object_client.create_object(self.container_name,
                                                   src_object_name, src_data)
        # create destination object
        dst_object_name = data_utils.rand_name(name='DstObject')
        dst_data = data_utils.random_bytes(size=len(dst_object_name) * 3)
        resp, _ = self.object_client.create_object(self.container_name,
                                                   dst_object_name, dst_data)
        # copy source object to destination
        resp, _ = self.object_client.copy_object_in_same_container(
            self.container_name, src_object_name, dst_object_name)
        self.assertHeaders(resp, 'Object', 'PUT')

        # check data
        resp, body = self.object_client.get_object(self.container_name,
                                                   dst_object_name)
        self.assertEqual(body, src_data)
Exemple #22
0
 def _stage_and_check(self):
     image = self._create_image()
     # Stage image data
     file_content = data_utils.random_bytes()
     image_file = io.BytesIO(file_content)
     self.client.stage_image_file(image['id'], image_file)
     # Check image status is 'uploading'
     body = self.client.show_image(image['id'])
     self.assertEqual(image['id'], body['id'])
     self.assertEqual('uploading', body['status'])
     return image['id']
Exemple #23
0
    def _create_standard_image(cls, name, container_format, disk_format, size):
        """Create a new standard image and return newly-registered image-id"""

        image_file = six.BytesIO(data_utils.random_bytes(size))
        name = 'New Standard Image %s' % name
        image = cls.create_image(name=name,
                                 container_format=container_format,
                                 disk_format=disk_format,
                                 is_public=False,
                                 data=image_file,
                                 properties={'key1': 'value1'})
        return image['id']
Exemple #24
0
    def _create_standard_image(cls, name, container_format,
                               disk_format, size):
        """Create a new standard image and return newly-registered image-id"""

        image_file = six.BytesIO(data_utils.random_bytes(size))
        name = 'New Standard Image %s' % name
        image = cls.create_image(name=name,
                                 container_format=container_format,
                                 disk_format=disk_format,
                                 is_public=False, data=image_file,
                                 properties={'key1': 'value1'})
        return image['id']
    def test_check_glance_v2_notifications(self):
        body = self.create_image(self.image_client_v2, visibility='private')

        file_content = data_utils.random_bytes()
        image_file = six.BytesIO(file_content)
        self.image_client_v2.store_image_file(body['id'], image_file)
        self.image_client_v2.show_image_file(body['id'])

        query = 'resource', 'eq', body['id']

        for metric in self.glance_v2_notifications:
            self.await_samples(metric, query)
Exemple #26
0
    def test_check_glance_v2_notifications(self):
        body = self.create_image(self.image_client_v2, visibility='private')

        file_content = data_utils.random_bytes()
        image_file = six.BytesIO(file_content)
        self.image_client_v2.store_image_file(body['id'], image_file)
        self.image_client_v2.show_image_file(body['id'])

        query = 'resource', 'eq', body['id']

        for metric in self.glance_v2_notifications:
            self.await_samples(metric, query)
    def test_copy_object_2d_way(self):
        # create source object
        src_object_name = data_utils.rand_name(name='SrcObject')
        src_data = data_utils.random_bytes(size=len(src_object_name) * 2)
        resp, _ = self.object_client.create_object(self.container_name,
                                                   src_object_name, src_data)
        # create destination object
        dst_object_name = data_utils.rand_name(name='DstObject')
        dst_data = data_utils.random_bytes(size=len(dst_object_name) * 3)
        resp, _ = self.object_client.create_object(self.container_name,
                                                   dst_object_name, dst_data)
        # copy source object to destination
        resp, _ = self.object_client.copy_object_2d_way(self.container_name,
                                                        src_object_name,
                                                        dst_object_name)
        self.assertHeaders(resp, 'Object', 'COPY')
        self.assertEqual(
            resp['x-copied-from'],
            self.container_name + "/" + src_object_name)

        # check data
        self._check_copied_obj(dst_object_name, src_data)
Exemple #28
0
    def create_object(cls, container_name, object_name=None,
                      data=None, metadata=None):
        # wrapper that returns a test object
        if object_name is None:
            object_name = data_utils.rand_name(name='TestObject')
        if data is None:
            data = data_utils.random_bytes()
        cls.object_client.create_object(container_name,
                                        object_name,
                                        data,
                                        metadata=metadata)

        return object_name, data
Exemple #29
0
    def create_object(cls, container_name, object_name=None,
                      data=None, metadata=None):
        # wrapper that returns a test object
        if object_name is None:
            object_name = data_utils.rand_name(name='TestObject')
        if data is None:
            data = data_utils.random_bytes()
        cls.object_client.create_object(container_name,
                                        object_name,
                                        data,
                                        metadata=metadata)

        return object_name, data
Exemple #30
0
    def test_register_upload_get_image_file(self):
        """Here we test these functionalities

        Register image, upload the image file, get image and get image
        file api's
        """

        uuid = '00000000-1111-2222-3333-444455556666'
        image_name = data_utils.rand_name('image')
        container_format = CONF.image.container_formats[0]
        disk_format = CONF.image.disk_formats[0]
        image = self.create_image(name=image_name,
                                  container_format=container_format,
                                  disk_format=disk_format,
                                  visibility='private',
                                  ramdisk_id=uuid)
        self.assertIn('name', image)
        self.assertEqual(image_name, image['name'])
        self.assertIn('visibility', image)
        self.assertEqual('private', image['visibility'])
        self.assertIn('status', image)
        self.assertEqual('queued', image['status'])

        # NOTE: This Glance API returns different status codes for image
        # condition. In this empty data case, Glance should return 204,
        # so here should check the status code.
        image_file = self.client.show_image_file(image['id'])
        self.assertEqual(0, len(image_file.data))
        self.assertEqual(204, image_file.response.status)

        # Now try uploading an image file
        file_content = data_utils.random_bytes()
        image_file = six.BytesIO(file_content)
        self.client.store_image_file(image['id'], image_file)

        # Now try to get image details
        body = self.client.show_image(image['id'])
        self.assertEqual(image['id'], body['id'])
        self.assertEqual(image_name, body['name'])
        self.assertEqual(uuid, body['ramdisk_id'])
        self.assertIn('size', body)
        self.assertEqual(1024, body.get('size'))

        # Now try get image file
        # NOTE: This Glance API returns different status codes for image
        # condition. In this non-empty data case, Glance should return 200,
        # so here should check the status code.
        body = self.client.show_image_file(image['id'])
        self.assertEqual(file_content, body.data)
        self.assertEqual(200, body.response.status)
    def test_create_object_with_transfer_encoding(self):
        # create object with transfer_encoding
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes(1024)
        _, _, resp_headers = self.object_client.put_object_with_chunk(
            container=self.container_name,
            name=object_name,
            contents=data_utils.chunkify(data, 512))
        self.assertHeaders(resp_headers, 'Object', 'PUT')

        # check uploaded content
        _, body = self.object_client.get_object(self.container_name,
                                                object_name)
        self.assertEqual(data, body)
    def test_create_object_with_expect_continue(self):
        """Test creating object with expect_continue"""
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()

        status, _ = self.object_client.create_object_continue(
            self.container_name, object_name, data)

        self.assertEqual(status, 201)

        # check uploaded content
        _, body = self.object_client.get_object(self.container_name,
                                                object_name)
        self.assertEqual(data, body)
Exemple #33
0
    def _create_standard_image(cls, name, container_format,
                               disk_format, size):
        """Create a new standard image and return newly-registered image-id

        Note that the size of the new image is a random number between
        1024 and 4096
        """
        image_file = six.BytesIO(data_utils.random_bytes(size))
        name = 'New Standard Image %s' % name
        image = cls.create_image(name=name,
                                 container_format=container_format,
                                 disk_format=disk_format,
                                 is_public=False, data=image_file)
        return image['id']
Exemple #34
0
    def _create_standard_image(cls, name, container_format, disk_format, size):
        """Create a new standard image and return newly-registered image-id

        Note that the size of the new image is a random number between
        1024 and 4096
        """
        image_file = six.BytesIO(data_utils.random_bytes(size))
        name = 'New Standard Image %s' % name
        image = cls.create_image(name=name,
                                 container_format=container_format,
                                 disk_format=disk_format,
                                 is_public=False,
                                 data=image_file)
        return image['id']
    def test_create_object_with_transfer_encoding(self):
        # create object with transfer_encoding
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes(1024)
        _, _, resp_headers = self.object_client.put_object_with_chunk(
            container=self.container_name,
            name=object_name,
            contents=data_utils.chunkify(data, 512)
        )
        self.assertHeaders(resp_headers, 'Object', 'PUT')

        # check uploaded content
        _, body = self.object_client.get_object(self.container_name,
                                                object_name)
        self.assertEqual(data, body)
    def test_list_object_metadata(self):
        """Test listing object metadata"""
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        metadata = {'X-Object-Meta-test-meta': 'Meta'}
        self.object_client.create_object(self.container_name,
                                         object_name,
                                         data,
                                         metadata=metadata)

        resp, _ = self.object_client.list_object_metadata(
            self.container_name, object_name)
        self.assertHeaders(resp, 'Object', 'HEAD')
        self.assertIn('x-object-meta-test-meta', resp)
        self.assertEqual(resp['x-object-meta-test-meta'], 'Meta')
    def test_create_object_with_expect_continue(self):
        # create object with expect_continue

        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()

        status, _ = self.object_client.create_object_continue(
            self.container_name, object_name, data)

        self.assertEqual(status, 201)

        # check uploaded content
        _, body = self.object_client.get_object(self.container_name,
                                                object_name)
        self.assertEqual(data, body)
 def test_get_object_with_range(self):
     """Test getting object with range"""
     object_name = data_utils.rand_name(name='TestObject')
     data = data_utils.random_bytes(100)
     self.object_client.create_object(self.container_name,
                                      object_name,
                                      data,
                                      metadata=None)
     rand_num = random.randint(3, len(data) - 1)
     metadata = {'Range': 'bytes=%s-%s' % (rand_num - 3, rand_num - 1)}
     resp, body = self.object_client.get_object(self.container_name,
                                                object_name,
                                                metadata=metadata)
     self.assertHeaders(resp, 'Object', 'GET')
     self.assertEqual(body, data[rand_num - 3:rand_num])
Exemple #39
0
    def test_image_copy_image_import(self):
        """Test 'copy-image' import functionalities

        Create image, import image with copy-image method and
        verify that import succeeded.
        """
        available_stores = self.get_available_stores()
        available_import_methods = self.client.info_import()[
            'import-methods']['value']
        # NOTE(gmann): Skip if copy-image import method and multistore
        # are not available.
        if ('copy-image' not in available_import_methods or
            not available_stores):
            raise self.skipException('Either copy-image import method or '
                                     'multistore is not available')
        uuid = data_utils.rand_uuid()
        image_name = data_utils.rand_name('copy-image')
        container_format = CONF.image.container_formats[0]
        disk_format = CONF.image.disk_formats[0]
        image = self.create_image(name=image_name,
                                  container_format=container_format,
                                  disk_format=disk_format,
                                  visibility='private',
                                  ramdisk_id=uuid)
        self.assertEqual('queued', image['status'])

        file_content = data_utils.random_bytes()
        image_file = io.BytesIO(file_content)
        self.client.store_image_file(image['id'], image_file)

        body = self.client.show_image(image['id'])
        self.assertEqual(image['id'], body['id'])
        self.assertEqual(len(file_content), body.get('size'))
        self.assertEqual('active', body['status'])

        # Copy image to all the stores. In case of all_stores request
        # glance will skip the stores where image is already available.
        self.admin_client.image_import(image['id'], method='copy-image',
                                       all_stores=True,
                                       all_stores_must_succeed=False)

        # Wait for copy to finished on all stores.
        failed_stores = waiters.wait_for_image_copied_to_stores(
            self.client, image['id'])
        # Assert if copy is failed on any store.
        self.assertEqual(0, len(failed_stores),
                         "Failed to copy the following stores: %s" %
                         str(failed_stores))
    def test_create_object_with_x_object_meta(self):
        # create object with object_meta
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        metadata = {'X-Object-Meta-test-meta': 'Meta'}
        resp, _ = self.object_client.create_object(self.container_name,
                                                   object_name,
                                                   data,
                                                   metadata=metadata)
        self.assertHeaders(resp, 'Object', 'PUT')

        resp, body = self.object_client.get_object(self.container_name,
                                                   object_name)
        self.assertIn('x-object-meta-test-meta', resp)
        self.assertEqual(resp['x-object-meta-test-meta'], 'Meta')
        self.assertEqual(data, body)
    def test_create_object_with_etag(self):
        """Test creating object with Etag"""
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        md5 = hashlib.md5(data).hexdigest()
        metadata = {'Etag': md5}
        resp, _ = self.object_client.create_object(self.container_name,
                                                   object_name,
                                                   data,
                                                   metadata=metadata)
        self.assertHeaders(resp, 'Object', 'PUT')

        # check uploaded content
        _, body = self.object_client.get_object(self.container_name,
                                                object_name)
        self.assertEqual(data, body)
    def test_create_object_with_x_object_metakey(self):
        """Test creating object with the blank value of metadata"""
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        metadata = {'X-Object-Meta-test-meta': ''}
        resp, _ = self.object_client.create_object(self.container_name,
                                                   object_name,
                                                   data,
                                                   metadata=metadata)
        self.assertHeaders(resp, 'Object', 'PUT')

        resp, body = self.object_client.get_object(self.container_name,
                                                   object_name)
        self.assertIn('x-object-meta-test-meta', resp)
        self.assertEqual(resp['x-object-meta-test-meta'], '')
        self.assertEqual(data, body)
 def test_get_object_with_range(self):
     # get object with range
     object_name = data_utils.rand_name(name='TestObject')
     data = data_utils.random_bytes(100)
     self.object_client.create_object(self.container_name,
                                      object_name,
                                      data,
                                      metadata=None)
     rand_num = random.randint(3, len(data) - 1)
     metadata = {'Range': 'bytes=%s-%s' % (rand_num - 3, rand_num - 1)}
     resp, body = self.object_client.get_object(
         self.container_name,
         object_name,
         metadata=metadata)
     self.assertHeaders(resp, 'Object', 'GET')
     self.assertEqual(body, data[rand_num - 3: rand_num])
    def test_list_object_metadata(self):
        # get object metadata
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        metadata = {'X-Object-Meta-test-meta': 'Meta'}
        self.object_client.create_object(self.container_name,
                                         object_name,
                                         data,
                                         metadata=metadata)

        resp, _ = self.object_client.list_object_metadata(
            self.container_name,
            object_name)
        self.assertHeaders(resp, 'Object', 'HEAD')
        self.assertIn('x-object-meta-test-meta', resp)
        self.assertEqual(resp['x-object-meta-test-meta'], 'Meta')
 def test_get_object_with_metadata(self):
     """Test getting object with metadata"""
     object_name = data_utils.rand_name(name='TestObject')
     data = data_utils.random_bytes()
     metadata = {'X-Object-Meta-test-meta': 'Meta'}
     self.object_client.create_object(self.container_name,
                                      object_name,
                                      data,
                                      metadata=metadata)
     resp, body = self.object_client.get_object(self.container_name,
                                                object_name,
                                                metadata=None)
     self.assertHeaders(resp, 'Object', 'GET')
     self.assertIn('x-object-meta-test-meta', resp)
     self.assertEqual(resp['x-object-meta-test-meta'], 'Meta')
     self.assertEqual(body, data)
    def test_get_object_with_if_modified_since(self):
        """Test getting object with if_modified_since"""
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        time_now = time.time()
        self.object_client.create_object(self.container_name,
                                         object_name,
                                         data,
                                         metadata=None)

        http_date = time.ctime(time_now - 86400)
        list_metadata = {'If-Modified-Since': http_date}
        resp, body = self.object_client.get_object(self.container_name,
                                                   object_name,
                                                   metadata=list_metadata)
        self.assertHeaders(resp, 'Object', 'GET')
        self.assertEqual(body, data)
 def test_get_object_with_metadata(self):
     # get object with metadata
     object_name = data_utils.rand_name(name='TestObject')
     data = data_utils.random_bytes()
     metadata = {'X-Object-Meta-test-meta': 'Meta'}
     self.object_client.create_object(self.container_name,
                                      object_name,
                                      data,
                                      metadata=metadata)
     resp, body = self.object_client.get_object(
         self.container_name,
         object_name,
         metadata=None)
     self.assertHeaders(resp, 'Object', 'GET')
     self.assertIn('x-object-meta-test-meta', resp)
     self.assertEqual(resp['x-object-meta-test-meta'], 'Meta')
     self.assertEqual(body, data)
    def test_create_object_with_x_object_metakey(self):
        # create object with the blank value of metadata
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        metadata = {'X-Object-Meta-test-meta': ''}
        resp, _ = self.object_client.create_object(
            self.container_name,
            object_name,
            data,
            metadata=metadata)
        self.assertHeaders(resp, 'Object', 'PUT')

        resp, body = self.object_client.get_object(self.container_name,
                                                   object_name)
        self.assertIn('x-object-meta-test-meta', resp)
        self.assertEqual(resp['x-object-meta-test-meta'], '')
        self.assertEqual(data, body)
    def test_create_object_with_etag(self):
        # create object with etag
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        md5 = hashlib.md5(data).hexdigest()
        metadata = {'Etag': md5}
        resp, _ = self.object_client.create_object(
            self.container_name,
            object_name,
            data,
            metadata=metadata)
        self.assertHeaders(resp, 'Object', 'PUT')

        # check uploaded content
        _, body = self.object_client.get_object(self.container_name,
                                                object_name)
        self.assertEqual(data, body)
Exemple #50
0
    def test_get_object_with_if_match(self):
        """Test getting object with if_match"""
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes(10)
        create_md5 = md5(data, usedforsecurity=False).hexdigest()
        create_metadata = {'Etag': create_md5}
        self.object_client.create_object(self.container_name,
                                         object_name,
                                         data,
                                         metadata=create_metadata)

        list_metadata = {'If-Match': create_md5}
        resp, body = self.object_client.get_object(self.container_name,
                                                   object_name,
                                                   metadata=list_metadata)
        self.assertHeaders(resp, 'Object', 'GET')
        self.assertEqual(body, data)
Exemple #51
0
    def create_image(self):
        # Create image
        image_name = data_utils.rand_name(self.__class__.__name__ + "-image")
        image = self.images_client.create_image(
            name=image_name,
            container_format=CONF.image.container_formats[0],
            disk_format=CONF.image.disk_formats[0],
            visibility='private',
            min_disk=CONF.volume.volume_size + 1)
        self.addCleanup(test_utils.call_and_ignore_notfound_exc,
                        self.images_client.delete_image, image['id'])

        # Upload image with 1KB data
        image_file = six.BytesIO(data_utils.random_bytes())
        self.images_client.store_image_file(image['id'], image_file)
        waiters.wait_for_image_status(self.images_client, image['id'],
                                      'active')
        return image
Exemple #52
0
    def _create_standard_image(cls, container_format, disk_format):
        """Create a new standard image and return the newly-registered image-id

        Note that the size of the new image is a random number between
        1024 and 4096
        """
        size = random.randint(1024, 4096)
        image_file = six.BytesIO(data_utils.random_bytes(size))
        tags = [data_utils.rand_name('tag'), data_utils.rand_name('tag')]
        image = cls.create_image(container_format=container_format,
                                 disk_format=disk_format,
                                 visibility='private',
                                 tags=tags)
        cls.client.store_image_file(image['id'], data=image_file)
        # Keep the data of one test image so it can be used to filter lists
        cls.test_data = image

        return image['id']
    def test_create_object_with_transfer_encoding(self):
        """Test creating object with transfer_encoding"""
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes(1024)
        headers = {'Transfer-Encoding': 'chunked'}
        resp, _ = self.object_client.create_object(self.container_name,
                                                   object_name,
                                                   data=data_utils.chunkify(
                                                       data, 512),
                                                   headers=headers,
                                                   chunked=True)

        self.assertHeaders(resp, 'Object', 'PUT')

        # check uploaded content
        _, body = self.object_client.get_object(self.container_name,
                                                object_name)
        self.assertEqual(data, body)
    def test_create_object_with_content_disposition(self):
        """Test creating object with content-disposition"""
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        metadata = {}
        metadata['content-disposition'] = 'inline'
        resp, _ = self.object_client.create_object(self.container_name,
                                                   object_name,
                                                   data,
                                                   metadata=metadata)
        self.assertHeaders(resp, 'Object', 'PUT')

        resp, body = self.object_client.get_object(self.container_name,
                                                   object_name,
                                                   metadata=None)
        self.assertIn('content-disposition', resp)
        self.assertEqual(resp['content-disposition'], 'inline')
        self.assertEqual(body, data)
    def test_update_object_metadata_with_remove_metadata(self):
        """Test updating object metadata with remove metadata"""
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        create_metadata = {'X-Object-Meta-test-meta1': 'Meta1'}
        self.object_client.create_object(self.container_name,
                                         object_name,
                                         data,
                                         metadata=create_metadata)

        update_metadata = {'X-Remove-Object-Meta-test-meta1': 'Meta1'}
        resp, _ = self.object_client.create_or_update_object_metadata(
            self.container_name, object_name, headers=update_metadata)
        self.assertHeaders(resp, 'Object', 'POST')

        resp, _ = self.object_client.list_object_metadata(
            self.container_name, object_name)
        self.assertNotIn('x-object-meta-test-meta1', resp)
    def test_create_object_with_transfer_encoding(self):
        # create object with transfer_encoding
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes(1024)
        headers = {'Transfer-Encoding': 'chunked'}
        resp, _ = self.object_client.create_object(
            self.container_name,
            object_name,
            data=data_utils.chunkify(data, 512),
            headers=headers,
            chunked=True)

        self.assertHeaders(resp, 'Object', 'PUT')

        # check uploaded content
        _, body = self.object_client.get_object(self.container_name,
                                                object_name)
        self.assertEqual(data, body)
    def test_get_object_with_if_modified_since(self):
        # get object with if_modified_since
        object_name = data_utils.rand_name(name='TestObject')
        data = data_utils.random_bytes()
        time_now = time.time()
        self.object_client.create_object(self.container_name,
                                         object_name,
                                         data,
                                         metadata=None)

        http_date = time.ctime(time_now - 86400)
        list_metadata = {'If-Modified-Since': http_date}
        resp, body = self.object_client.get_object(
            self.container_name,
            object_name,
            metadata=list_metadata)
        self.assertHeaders(resp, 'Object', 'GET')
        self.assertEqual(body, data)
Exemple #58
0
    def test_boot_with_low_ram(self):
        """Try boot a vm with lower than min ram

        Create an image with min_ram value
        Try to create server with flavor of insufficient ram size from
        that image
        """
        flavor = self.flavors_client.show_flavor(
            CONF.compute.flavor_ref)['flavor']
        min_img_ram = flavor['ram'] + 1
        size = random.randint(1024, 4096)
        image_file = six.BytesIO(data_utils.random_bytes(size))
        params = {
            'name': data_utils.rand_name('image'),
            'container_format': CONF.image.container_formats[0],
            'disk_format': CONF.image.disk_formats[0],
            'min_ram': min_img_ram
        }

        if CONF.image_feature_enabled.api_v1:
            params.update({'is_public': False})
            params = {'headers': common_image.image_meta_to_headers(**params)}
        else:
            params.update({'visibility': 'private'})

        image = self.images_client.create_image(**params)
        image = image['image'] if 'image' in image else image
        self.addCleanup(self.images_client.delete_image, image['id'])

        if CONF.image_feature_enabled.api_v1:
            self.images_client.update_image(image['id'], data=image_file)
        else:
            self.images_client.store_image_file(image['id'], data=image_file)

        self.assertEqual(min_img_ram, image['min_ram'])

        # Try to create server with flavor of insufficient ram size
        self.assertRaisesRegex(lib_exc.BadRequest,
                               "Flavor's memory is too small for "
                               "requested image",
                               self.create_test_server,
                               image_id=image['id'],
                               flavor=flavor['id'])
    def test_copy_object_across_containers(self):
        """Test copying object to another container"""
        # create a container to use as a source container
        src_container_name = data_utils.rand_name(name='TestSourceContainer')
        self.container_client.update_container(src_container_name)
        self.containers.append(src_container_name)
        # create a container to use as a destination container
        dst_container_name = data_utils.rand_name(
            name='TestDestinationContainer')
        self.container_client.update_container(dst_container_name)
        self.containers.append(dst_container_name)
        # create object in source container
        object_name = data_utils.rand_name(name='Object')
        data = data_utils.random_bytes(size=len(object_name) * 2)
        resp, _ = self.object_client.create_object(src_container_name,
                                                   object_name, data)
        # set object metadata
        meta_key = data_utils.rand_name(name='test')
        meta_value = data_utils.rand_name(name='MetaValue')
        orig_metadata = {'X-Object-Meta-' + meta_key: meta_value}
        resp, _ = self.object_client.create_or_update_object_metadata(
            src_container_name,
            object_name,
            headers=orig_metadata)
        self.assertHeaders(resp, 'Object', 'POST')

        # copy object from source container to destination container
        headers = {}
        headers['X-Copy-From'] = "%s/%s" % (str(src_container_name),
                                            str(object_name))
        resp, body = self.object_client.create_object(dst_container_name,
                                                      object_name,
                                                      data=None,
                                                      headers=headers)
        self.assertHeaders(resp, 'Object', 'PUT')

        # check if object is present in destination container
        resp, body = self.object_client.get_object(dst_container_name,
                                                   object_name)
        self.assertEqual(body, data)
        actual_meta_key = 'x-object-meta-' + meta_key
        self.assertIn(actual_meta_key, resp)
        self.assertEqual(resp[actual_meta_key], meta_value)
Exemple #60
0
    def test_get_image(self):
        """Get Image Test

        RBAC test for the glance get_image policy.
        """
        image_name = data_utils.rand_name(self.__class__.__name__ + '-Image')
        properties = {'prop1': 'val1'}
        body = self.create_image(name=image_name,
                                 container_format='bare',
                                 disk_format='raw',
                                 is_public=False,
                                 properties=properties)
        image_id = body['id']
        # Now try uploading an image file
        image_file = six.BytesIO(data_utils.random_bytes())
        self.client.update_image(image_id, data=image_file)
        # Toggle role and get created image
        self.rbac_utils.switch_role(self, toggle_rbac_role=True)
        self.client.check_image(image_id)