Exemplo n.º 1
0
    def test_object_list_with_xml_accept_header(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(self.client.force_delete_containers, [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name = '{0}_{1}'.format(self.base_object_name,
                                       randstring.get_random_string())

        headers = {
            'Content-Length': content_length,
            'Content-Type': CONTENT_TYPE_TEXT
        }

        self.client.create_object(container_name,
                                  object_name,
                                  headers=headers,
                                  data=object_data)

        headers = {'Accept': 'application/xml'}
        response = self.client.list_objects(container_name, headers=headers)

        self.assertEqual(
            response.status_code, 200,
            'should list objects using content-type application/xml')

        headers = {'Accept': 'text/xml'}

        response = self.client.list_objects(container_name, headers=headers)

        self.assertEqual(response.status_code, 200,
                         'should list objects using content-type text/xml')
Exemplo n.º 2
0
    def test_object_list_with_json_accept_header(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name = '{0}_{1}'.format(
            self.base_object_name,
            randstring.get_random_string())

        headers = {'Content-Length': content_length,
                   'Content-Type': CONTENT_TYPE_TEXT}

        self.client.create_object(
            container_name,
            object_name,
            headers=headers,
            data=object_data)

        headers = {'Accept': 'application/json'}

        response = self.client.list_objects(
            container_name,
            headers=headers)

        self.assertEqual(
            response.status_code,
            200,
            'should list objects using content-type application/json')
Exemplo n.º 3
0
    def test_objects_list_with_format_xml_query_parameter(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name = '{0}_{1}'.format(
            self.base_object_name,
            randstring.get_random_string())

        headers = {'Content-Length': content_length,
                   'Content-Type': CONTENT_TYPE_TEXT}

        self.client.create_object(
            container_name,
            object_name,
            headers=headers,
            data=object_data)

        format_ = {'format': 'xml'}

        response = self.client.list_objects(container_name, params=format_)

        self.assertEqual(
            response.status_code,
            200,
            'should list object using content-type xml')
Exemplo n.º 4
0
    def test_objects_list_with_delimiter_query_parameter(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(self.client.force_delete_containers, [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name_prefix = 'delimiter_test/'
        object_name_postfix = '{0}_{1}'.format(self.base_object_name,
                                               randstring.get_random_string())
        object_name = '{0}{1}'.format(object_name_prefix, object_name_postfix)

        headers = {
            'Content-Length': content_length,
            'Content-Type': CONTENT_TYPE_TEXT
        }

        self.client.create_object(container_name,
                                  object_name,
                                  headers=headers,
                                  data=object_data)

        params = {'delimiter': '/'}
        response = self.client.list_objects(container_name, params=params)

        self.assertEqual(response.status_code, 200,
                         'should list the simulated directory')

        params = {'prefix': object_name_prefix, 'delimiter': '/'}

        response = self.client.list_objects(container_name, params=params)

        self.assertEqual(response.status_code, 200,
                         'should list the object in the simulated directory')
Exemplo n.º 5
0
    def test_objects_list_with_format_xml_query_parameter(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(self.client.force_delete_containers, [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name = '{0}_{1}'.format(self.base_object_name,
                                       randstring.get_random_string())

        headers = {
            'Content-Length': content_length,
            'Content-Type': CONTENT_TYPE_TEXT
        }

        self.client.create_object(container_name,
                                  object_name,
                                  headers=headers,
                                  data=object_data)

        format_ = {'format': 'xml'}

        response = self.client.list_objects(container_name, params=format_)

        self.assertEqual(response.status_code, 200,
                         'should list object using content-type xml')
Exemplo n.º 6
0
    def test_tempurl_object_download(self):
        time.sleep(61)

        container_name = '{0}_{1}'.format(
                self.base_container_name,
                randomstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(
                self.client.force_delete_containers,
                [container_name])

        object_name = '{0}_{1}'.format(
                self.base_object_name,
                randomstring.get_random_string())
        object_data = 'Test file data'
        content_length = str(len(object_data))
        etag = md5hash.get_md5_hash(object_data)

        headers = {'Content-Length': content_length,
                   'Content-Type': CONTENT_TYPE_TEXT,
                   'Etag': etag}

        self.client.create_object(
                container_name,
                object_name,
                headers=headers,
                data=object_data)

        temp_key = '{0}_{1}'.format(
                'temp_url_dl_test_key',
                randomstring.get_random_string())
        key = md5hash.get_md5_hash(temp_key)
        headers = {'X-Account-Meta-Temp-URL-Key': key}

        resp = self.client.set_temp_url_key(headers=headers)

        self.assertEqual(resp.status_code, 204)

        tempurl_data = self.client.create_temp_url(
                'GET',
                container_name,
                object_name,
                '86400',
                key)

        dl_tempurl = '{0}?temp_url_sig={1}&temp_url_expires={2}'.format(
                tempurl_data['target_url'],
                tempurl_data['signature'],
                tempurl_data['expires'])

        resp = self.client.get(dl_tempurl)

        if resp.headers['content-disposition'] is not None:
            expected = 'attachment; filename="{0}"'.format(object_name)
            recieved = resp.headers['content-disposition']
            self.assertEqual(expected, recieved)
        else:
            self.assertIsNotNone(resp.headers['content-disposition'])
Exemplo n.º 7
0
    def test_tempurl_object_upload(self):
        time.sleep(61)

        container_name = '{0}_{1}'.format(
                self.base_container_name,
                randomstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(
                self.client.force_delete_containers,
                [container_name])

        object_name = '{0}_{1}'.format(
                self.base_object_name,
                randomstring.get_random_string())

        headers = {'Content-Length': '0'}

        self.client.create_object(
                container_name,
                object_name,
                headers=headers)

        temp_key = '{0}_{1}'.format(
                'temp_url_dl_test_key',
                randomstring.get_random_string())
        key = md5hash.get_md5_hash(temp_key)
        headers = {'X-Account-Meta-Temp-URL-Key': key}

        resp = self.client.set_temp_url_key(headers=headers)

        self.assertEqual(resp.status_code, 204)

        tempurl_data = self.client.create_temp_url(
                'PUT',
                container_name,
                object_name,
                '86400',
                key)

        ul_tempurl = '{0}?temp_url_sig={1}&temp_url_expires={2}'.format(
                tempurl_data['target_url'],
                tempurl_data['signature'],
                tempurl_data['expires'])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        etag = md5hash.get_md5_hash(object_data)

        headers = {'Content-Length': content_length,
                   'Content-Type': CONTENT_TYPE_TEXT,
                   'Etag': etag}

        resp = self.client.put(ul_tempurl, data=object_data, headers=headers)
        self.assertEqual(resp.status_code, 201)

        resp = self.client.get_object(container_name, object_name)
        self.assertEqual(resp.content, object_data)
Exemplo n.º 8
0
    def test_objects_list_with_prefix_delimiter_query_parameters(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        self.client.create_container(container_name)

        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name_prefix = 'delimiter_test/'
        object_name_postfix = '{0}_{1}'.format(
            self.base_object_name,
            randstring.get_random_string())
        object_name = '{0}{1}'.format(object_name_prefix, object_name_postfix)

        headers = {'Content-Length': content_length,
                   'Content-Type': CONTENT_TYPE_TEXT}

        self.client.create_object(
            container_name,
            object_name,
            headers=headers,
            data=object_data)

        params = {'delimiter': '/'}
        response = self.client.list_objects(self.container_name, params=params)

        method = "simulated directory list"
        expected = 200
        received = response.status_code

        self.assertEqual(
            expected,
            received,
            msg=STATUS_CODE_MSG.format(
                method=method,
                expected=expected,
                received=str(received)))

        params = {'prefix': object_name_prefix, 'delimiter': '/'}

        response = self.client.list_objects(container_name, params=params)

        method = "simulated obj in directory list"
        expected = 200
        received = response.status_code

        self.assertEqual(
            expected,
            received,
            msg=STATUS_CODE_MSG.format(
                method=method,
                expected=expected,
                received=str(received)))
Exemplo n.º 9
0
    def __init__(self):
        alphanumeric = randomstring.get_random_string(prefix='1a2b')
        random255 = randomstring.get_random_string(size=255)
        punctuation = '~!@#$%^&*()_+`-={}[]|:;<>,.?"'
        uuid = str(uuid4())

        self.append_new_dataset('alphanumeric', {'name': alphanumeric})
        self.append_new_dataset('punctuation', {'name': punctuation})
        self.append_new_dataset('len_255', {'name': random255})
        self.append_new_dataset('uuid', {'name': uuid})
Exemplo n.º 10
0
    def __init__(self):
        alphanumeric = randomstring.get_random_string(prefix='1a2b')
        random255 = randomstring.get_random_string(size=255)
        punctuation = '~!@#$%^&*()_+`-={}[]|:;<>,.?"'
        uuid = str(uuid4())

        self.append_new_dataset('alphanumeric', {'name': alphanumeric})
        self.append_new_dataset('punctuation', {'name': punctuation})
        self.append_new_dataset('len_255', {'name': random255})
        self.append_new_dataset('uuid', {'name': uuid})
Exemplo n.º 11
0
    def test_objects_list_with_prefix_delimiter_query_parameters(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        self.client.create_container(container_name)

        self.addCleanup(self.client.force_delete_containers, [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name_prefix = 'delimiter_test/'
        object_name_postfix = '{0}_{1}'.format(self.base_object_name,
                                               randstring.get_random_string())
        object_name = '{0}{1}'.format(object_name_prefix, object_name_postfix)

        headers = {
            'Content-Length': content_length,
            'Content-Type': CONTENT_TYPE_TEXT
        }

        self.client.create_object(container_name,
                                  object_name,
                                  headers=headers,
                                  data=object_data)

        params = {'delimiter': '/'}
        response = self.client.list_objects(self.container_name, params=params)

        method = "simulated directory list"
        expected = 200
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))

        params = {'prefix': object_name_prefix, 'delimiter': '/'}

        response = self.client.list_objects(container_name, params=params)

        method = "simulated obj in directory list"
        expected = 200
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))
Exemplo n.º 12
0
    def test_tempurl_object_download(self):
        time.sleep(61)

        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randomstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(self.client.force_delete_containers, [container_name])

        object_name = '{0}_{1}'.format(self.base_object_name,
                                       randomstring.get_random_string())
        object_data = 'Test file data'
        content_length = str(len(object_data))
        etag = md5hash.get_md5_hash(object_data)

        headers = {
            'Content-Length': content_length,
            'Content-Type': CONTENT_TYPE_TEXT,
            'Etag': etag
        }

        self.client.create_object(container_name,
                                  object_name,
                                  headers=headers,
                                  data=object_data)

        temp_key = '{0}_{1}'.format('temp_url_dl_test_key',
                                    randomstring.get_random_string())
        key = md5hash.get_md5_hash(temp_key)
        headers = {'X-Account-Meta-Temp-URL-Key': key}

        resp = self.client.set_temp_url_key(headers=headers)

        self.assertEqual(resp.status_code, 204)

        tempurl_data = self.client.create_temp_url('GET', container_name,
                                                   object_name, '86400', key)

        dl_tempurl = '{0}?temp_url_sig={1}&temp_url_expires={2}'.format(
            tempurl_data['target_url'], tempurl_data['signature'],
            tempurl_data['expires'])

        resp = self.client.get(dl_tempurl)

        if resp.headers['content-disposition'] is not None:
            expected = 'attachment; filename="{0}"'.format(object_name)
            recieved = resp.headers['content-disposition']
            self.assertEqual(expected, recieved)
        else:
            self.assertIsNotNone(resp.headers['content-disposition'])
    def ddtest_object_list_with_extended_accept_header(self, descriptor=None,
                                                       hdrs=None):
        """
        test for openstack bug #1202453 fix
        and expansion of accept to take 'q' and
        arbitrary extensions
        """
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(
            self.behaviors.force_delete_containers,
            [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name = '{0}_{1}'.format(
            'extended_accept_header',
            randstring.get_random_string())

        headers = {'Content-Length': content_length,
                   'Content-Type': CONTENT_TYPE_TEXT}

        self.client.create_object(
            container_name,
            object_name,
            headers=headers,
            data=object_data)

        # headers from the data set
        headers = hdrs

        response = self.client.list_objects(
            container_name,
            headers=hdrs)

        method = 'list objects'
        expected = 200
        received = response.status_code

        self.assertEqual(
            expected,
            received,
            msg=STATUS_CODE_MSG.format(
                method=method,
                expected=expected,
                received=str(received),
                headers=str(hdrs)))
Exemplo n.º 14
0
    def test_metadata_retrieval_with_newly_created_container(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        metadata = {'ebooks': 'grok_volumes_1_through_10'}
        response = self.client.create_container(container_name, metadata)

        self.addCleanup(self.client.force_delete_containers, [container_name])

        method = "container creation"
        expected = 201
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))

        response = self.client.get_container_metadata(container_name)

        method = "container metadata retrieval"
        expected = 204
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))
Exemplo n.º 15
0
    def test_container_creation_with_existing_container_name(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        response = self.client.create_container(container_name)

        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        method = "container creation"
        expected = 201
        received = response.status_code

        self.assertEqual(
            expected,
            received,
            msg=STATUS_CODE_MSG.format(
                method=method,
                expected=expected,
                received=str(received)))

        response = self.client.create_container(container_name)

        method = "container creation with existing container name"
        expected = 202
        received = response.status_code

        self.assertEqual(
            expected,
            received,
            msg=STATUS_CODE_MSG.format(
                method=method,
                expected=expected,
                received=str(received)))
Exemplo n.º 16
0
    def test_metadata_update_with_container_possessing_metadata(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        self.client.create_container(container_name)

        self.addCleanup(self.client.force_delete_containers, [container_name])

        metadata = {'ebooks': 'grok_volumes_1_through_10'}

        response = self.client.set_container_metadata(container_name, metadata)

        method = "set container metadata"
        expected = 204
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))

        metadata = {'ebooks': 'drok_volumes_10_through_20'}

        response = self.client.set_container_metadata(container_name, metadata)

        method = "container metadata update"
        expected = 204
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))
Exemplo n.º 17
0
    def test_container_creation_with_existing_container_name(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        response = self.client.create_container(container_name)

        self.addCleanup(self.client.force_delete_containers, [container_name])

        method = "container creation"
        expected = 201
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))

        response = self.client.create_container(container_name)

        method = "container creation with existing container name"
        expected = 202
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))
Exemplo n.º 18
0
    def test_metadata_retrieval_after_setting_metadata(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        self.client.create_container(container_name)

        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        metadata = {'ebooks': 'grok_volumes_1_through_10'}

        response = self.client.set_container_metadata(
            container_name,
            metadata)

        response = self.client.get_container_metadata(container_name)

        method = "container metadata retrieval"
        expected = 204
        received = response.status_code

        self.assertEqual(
            expected,
            received,
            msg=STATUS_CODE_MSG.format(
                method=method,
                expected=expected,
                received=str(received)))
    def test_failure_reported_with_invalid_tar_archive(self):
        """
        Scenario: Verify behavior when an invalid archive file is uploaded

        Expected Results: Errors are reported. Objects are not created
        """
        container_name = "{0}_container_{1}".format(BASE_NAME, randstring.get_random_string())

        self.behaviors.create_container(container_name)

        self.addCleanup(self.behaviors.force_delete_containers, [container_name])

        url = "{0}/{1}".format(self.storage_url, container_name)
        params = {"extract-archive": "tar"}
        headers = {"Accept": "application/json"}
        response = self.client.put(url, data=self.bad_data, params=params, headers=headers)

        expected = HTTP_OK
        received = response.status_code
        self.assertEqual(
            expected,
            received,
            "upload corrupted tar.gz expected" " successful status code: {0} received: {1}".format(expected, received),
        )

        # inspect the body of the response
        content = None

        try:
            content = json.loads(response.content)
        except ValueError, error:
            self.fixture_log.exception(error)
Exemplo n.º 20
0
    def test_container_creation_with_valid_container_name(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        response = self.client.create_container(container_name)
        self.addCleanup(self.client.force_delete_containers, [container_name])

        self.assertEqual(response.status_code, 201, 'should be created')
Exemplo n.º 21
0
    def create_archive(self, object_names, compression_type,
                       archive_name=BULK_ARCHIVE_NAME):
        """
        Bulk creates objects in the opencafe's temp directory specified in the
        engine config. Each object's data will be the md5sum of the object's
        name.

        @type  object_names: strings
        @param object_names: a list of object names

        @type  object_names: string
        @param object_names: file compression to apply to the archive

        @rtype:  string
        @return: Returns full path of the archive that was created in
        opencafe's temp directory specified in the engine config
        """
        supported = [None, "gz", "bz2"]
        if compression_type not in supported:
            raise NameError("supported compression: {0}".format(supported))

        ext = ''

        if not compression_type:
            ext = 'tar'
            compression_type = ''
        else:
            ext = 'tar.{0}'.format(compression_type)

        archive_name = '{0}.{1}.{2}'.format(
            archive_name,
            randstring.get_random_string(),
            ext)

        archive_dir = self.engine_config.temp_directory
        archive_filename = '{0}/{1}'.format(archive_dir, archive_name)
        archive = tarfile.open(
            archive_filename,
            'w:{0}'.format(compression_type))

        for object_name in object_names:
            object_data = get_md5_hash(object_name)
            object_size = len(object_data)
            object_time = int(mktime(datetime.now().timetuple()))

            object_buffer = StringIO(object_data)
            object_buffer.seek(0)

            object_info = tarfile.TarInfo(name=object_name)
            object_info.size = object_size
            object_info.mtime = object_time

            archive.addfile(tarinfo=object_info, fileobj=object_buffer)
        archive.close()

        archive_path = "{0}/{1}".format(
            self.engine_config.temp_directory,
            archive_name)

        return archive_path
Exemplo n.º 22
0
    def setUpClass(cls):
        super(ObjectVersioningTest, cls).setUpClass()

        cls.container_name = CONTAINER_NAME
        cls.object_name = "{0}_{1}".format(
            cls.behaviors.VALID_OBJECT_NAME,
            randstring.get_random_string())
Exemplo n.º 23
0
    def test_metadata_update_with_container_possessing_metadata(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        metadata = {'Book-One': 'fight_club',
                    'Book-Two': 'a_clockwork_orange'}

        response = self.client.set_container_metadata(
            container_name,
            metadata)

        self.assertEqual(response.status_code, 204, 'metadata should be added')

        metadata = {'Book-One': 'Fight_Club'}

        response = self.client.set_container_metadata(
            container_name,
            metadata)

        self.assertEqual(
            response.status_code,
            204,
            'metadata should be updated')
Exemplo n.º 24
0
 def test_creating_secret_w_alphanumeric_name(self):
     """Covers case of creating secret with an alphanumeric name."""
     name = randomstring.get_random_string(prefix='1a2b')
     resps = self.behaviors.create_and_check_secret(name=name)
     self.assertEqual(resps.create_resp.status_code, 201,
                      'Returned unexpected response code')
     secret = resps.get_resp.entity
     self.assertEqual(secret.name, name, 'Secret name is not correct')
Exemplo n.º 25
0
    def test_tempurl_object_upload(self):
        time.sleep(61)

        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randomstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(self.client.force_delete_containers, [container_name])

        object_name = '{0}_{1}'.format(self.base_object_name,
                                       randomstring.get_random_string())

        headers = {'Content-Length': '0'}

        self.client.create_object(container_name, object_name, headers=headers)

        temp_key = '{0}_{1}'.format('temp_url_dl_test_key',
                                    randomstring.get_random_string())
        key = md5hash.get_md5_hash(temp_key)
        headers = {'X-Account-Meta-Temp-URL-Key': key}

        resp = self.client.set_temp_url_key(headers=headers)

        self.assertEqual(resp.status_code, 204)

        tempurl_data = self.client.create_temp_url('PUT', container_name,
                                                   object_name, '86400', key)

        ul_tempurl = '{0}?temp_url_sig={1}&temp_url_expires={2}'.format(
            tempurl_data['target_url'], tempurl_data['signature'],
            tempurl_data['expires'])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        etag = md5hash.get_md5_hash(object_data)

        headers = {
            'Content-Length': content_length,
            'Content-Type': CONTENT_TYPE_TEXT,
            'Etag': etag
        }

        resp = self.client.put(ul_tempurl, data=object_data, headers=headers)
        self.assertEqual(resp.status_code, 201)

        resp = self.client.get_object(container_name, object_name)
        self.assertEqual(resp.content, object_data)
Exemplo n.º 26
0
    def test_create_order_w_name_of_len_255(self):
        """Covers case of creating an order with a 255 character name."""
        name = randomstring.get_random_string(size=255)
        resps = self.behaviors.create_and_check_order(name=name)
        self.assertEqual(resps.create_resp.status_code, 202,
                         'Returned unexpected response code')

        secret = resps.get_resp.entity.secret
        self.assertEqual(secret.name, name, 'Secret name is not correct')
Exemplo n.º 27
0
    def generate_unique_container_name(self, identifier=None):
        if identifier:
            identifier = '{0}_'.format(identifier)

        container_name = '{0}({1}{2})'.format(self.config.base_container_name,
                                              identifier,
                                              randomstring.get_random_string())

        return container_name
Exemplo n.º 28
0
    def generate_unique_container_name(self, identifier=None):
        if identifier:
            identifier = '{0}_'.format(identifier)

        container_name = '{0}({1}{2})'.format(
            self.config.base_container_name, identifier,
            randomstring.get_random_string())

        return container_name
Exemplo n.º 29
0
    def ddtest_object_list_with_extended_accept_header(self,
                                                       descriptor=None,
                                                       hdrs=None):
        """
        test for openstack bug #1202453 fix
        and expansion of accept to take 'q' and
        arbitrary extensions
        """
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(self.behaviors.force_delete_containers,
                        [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name = '{0}_{1}'.format('extended_accept_header',
                                       randstring.get_random_string())

        headers = {
            'Content-Length': content_length,
            'Content-Type': CONTENT_TYPE_TEXT
        }

        self.client.create_object(container_name,
                                  object_name,
                                  headers=headers,
                                  data=object_data)

        # headers from the data set
        headers = hdrs

        response = self.client.list_objects(container_name, headers=hdrs)

        method = 'list objects'
        expected = 200
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received),
                                                    headers=str(hdrs)))
Exemplo n.º 30
0
    def test_container_creation_with_valid_container_name(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        response = self.client.create_container(container_name)
        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        self.assertEqual(response.status_code, 201, 'should be created')
Exemplo n.º 31
0
    def test_container_creation_with_metadata(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        metadata = {'Book-One': 'fight_club', 'Book-Two': 'a_clockwork_orange'}

        response = self.client.create_container(container_name,
                                                metadata=metadata)

        self.addCleanup(self.client.force_delete_containers, [container_name])

        self.assertEqual(response.status_code, 201, 'should be created')
Exemplo n.º 32
0
    def test_objects_list_with_delimiter_query_parameter(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name_prefix = 'delimiter_test/'
        object_name_postfix = '{0}_{1}'.format(
            self.base_object_name,
            randstring.get_random_string())
        object_name = '{0}{1}'.format(object_name_prefix, object_name_postfix)

        headers = {'Content-Length': content_length,
                   'Content-Type': CONTENT_TYPE_TEXT}

        self.client.create_object(
            container_name,
            object_name,
            headers=headers,
            data=object_data)

        params = {'delimiter': '/'}
        response = self.client.list_objects(container_name, params=params)

        self.assertEqual(
            response.status_code, 200,
            'should list the simulated directory')

        params = {'prefix': object_name_prefix, 'delimiter': '/'}

        response = self.client.list_objects(container_name, params=params)

        self.assertEqual(
            response.status_code,
            200,
            'should list the object in the simulated directory')
Exemplo n.º 33
0
    def test_psuedo_dirs_delimiter_test(self):
        container_name = "{0}_{1}".format(
            CONTAINER_NAME,
            randstring.get_random_string())

        obj_names = {"/": "music/grok",
                     "-": "music-drok",
                     ">": "music>foo",
                     "|": "music|bar"}

        content_length = str(len(self.default_obj_data))
        headers = {"Content-Length": content_length,
                   "Content-Type": CONTENT_TYPE_TEXT}

        for key in obj_names.keys():
            self.behaviors.create_object(
                container_name,
                obj_names.get(key),
                data=self.default_obj_data,
                headers=headers)

        self.addCleanup(
            self.behaviors.force_delete_containers,
            [container_name])

        for delimiter in obj_names.keys():
            prefix = "music{0}".format(delimiter)

            params = {"prefix": prefix,
                      "delimiter": delimiter,
                      "format": "json"}
            response = self.client.list_objects(container_name, params=params)

            members = self.get_members(["subdir", "name"], response.content)

            expected = 1
            received = len(members)
            self.assertEqual(
                expected,
                received,
                msg="container list with prefix: {0} and delimiter: {1}"
                " expected: {2} members received: {3}".format(
                    prefix,
                    delimiter,
                    expected,
                    received))

            obj_name = obj_names.get(delimiter)
            self.assertIn(
                obj_name,
                members,
                msg="object name: {0} was not found in response body:"
                " {1}".format(obj_name, members))
Exemplo n.º 34
0
    def setup_container(self, base_name, headers=None):
        container_name = '{0}_{1}'.format(
            base_name,
            randomstring.get_random_string())

        self.client.create_container(container_name, headers=headers)

        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        return container_name
Exemplo n.º 35
0
    def setup_container(self, base_name, headers=None):
        container_name = '{0}_{1}'.format(
            base_name,
            randomstring.get_random_string())

        self.client.create_container(container_name, headers=headers)

        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        return container_name
    def ddtest_failure_reported_with_incorrect_archive_identifier(
            self, archive_format, wrong_format):
        """
        Scenario: archive file is uploaded with incorrect extract-archive
        format identifier

        Expected Results: Errors are reported. Objects are not created

        @param archive_format: Type of archive file to upload.
        @type  archive_format: string
        @param wrong_format: Format to incorrectly label the archive file as.
        @type  wrong_format: string
        """
        container_name = '{0}_container_{1}'.format(
            BASE_NAME,
            randstring.get_random_string())

        self.behaviors.create_container(container_name)

        self.addCleanup(
            self.behaviors.force_delete_containers,
            [container_name])

        url = "{0}/{1}".format(
            self.storage_url,
            container_name)
        data = self.read_archive_data(self.archive_paths[archive_format])
        params = {'extract-archive': wrong_format}
        headers = {'Accept': 'application/json'}
        response = self.client.put(
            url,
            data=data,
            params=params,
            headers=headers)

        expected = HTTP_OK
        received = response.status_code
        self.assertEqual(
            expected,
            received,
            "tar archive with data format tar.gz extraction expected"
            " successful status code: {0} received: {1}".format(
                expected,
                received))

        # inspect the body of the response
        content = None

        try:
            content = json.loads(response.content)
        except ValueError, error:
            self.fixture_log.exception(error)
Exemplo n.º 37
0
    def test_metadata_retrieval_with_container_possessing_metadata(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        self.client.create_container(container_name)
        self.addCleanup(self.client.force_delete_containers, [container_name])

        metadata = {'Book-One': 'fight_club', 'Book-Two': 'a_clockwork_orange'}

        response = self.client.set_container_metadata(container_name, metadata)

        response = self.client.get_container_metadata(container_name)

        self.assertEqual(response.status_code, 204,
                         'container should return metadata')
Exemplo n.º 38
0
    def test_container_deletion_with_existing_empty_container(self):
        container_name = '{0}_{1}'.format(self.base_container_name,
                                          randstring.get_random_string())
        response = self.client.create_container(container_name)
        self.addCleanup(self.client.force_delete_containers, [container_name])

        self.assertEqual(response.status_code, 201, 'should be created')

        response = self.client.delete_container(container_name)

        self.assertEqual(response.status_code, 204, 'should be deleted')

        response = self.client.list_objects(container_name)

        self.assertEqual(response.status_code, 404,
                         'should not exist after deletion')
Exemplo n.º 39
0
    def test_container_creation_with_metadata(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        metadata = {'Book-One': 'fight_club',
                    'Book-Two': 'a_clockwork_orange'}

        response = self.client.create_container(
            container_name,
            metadata=metadata)

        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        self.assertEqual(response.status_code, 201, 'should be created')
Exemplo n.º 40
0
    def ddtest_failure_reported_with_incorrect_archive_identifier(
            self, archive_format, wrong_format, **kwargs):
        """
        Scenario: archive file is uploaded with incorrect extract-archive
        format identifier

        Expected Results: Errors are reported. Objects are not created

        @param archive_format: Type of archive file to upload.
        @type  archive_format: string
        @param wrong_format: Format to incorrectly label the archive file as.
        @type  wrong_format: string
        """
        container_name = '{0}_container_{1}'.format(
            BASE_NAME, randstring.get_random_string())

        self.behaviors.create_container(container_name)

        self.addCleanup(self.behaviors.force_delete_containers,
                        [container_name])

        url = "{0}/{1}".format(self.storage_url, container_name)
        data = self.read_archive_data(self.archive_paths[archive_format])
        params = {'extract-archive': wrong_format}
        headers = {'Accept': 'application/json'}
        response = self.client.put(url,
                                   data=data,
                                   params=params,
                                   headers=headers)

        expected = HTTP_OK
        received = response.status_code
        self.assertEqual(
            expected, received,
            "tar archive with data format tar.gz extraction expected"
            " successful status code: {0} received: {1}".format(
                expected, received))

        # inspect the body of the response
        content = None

        try:
            content = json.loads(response.content)
        except ValueError, error:
            self.fixture_log.exception(error)
Exemplo n.º 41
0
    def test_container_deletion_with_existing_empty_container(self):
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        response = self.client.create_container(container_name)
        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        self.assertEqual(response.status_code, 201, 'should be created')

        response = self.client.delete_container(container_name)

        self.assertEqual(response.status_code, 204, 'should be deleted')

        response = self.client.list_objects(container_name)

        self.assertEqual(
            response.status_code,
            404,
            'should not exist after deletion')
    def test_failure_reported_with_invalid_tar_archive(self):
        """
        Scenario: Verify behavior when an invalid archive file is uploaded

        Expected Results: Errors are reported. Objects are not created
        """
        container_name = '{0}_container_{1}'.format(
            BASE_NAME, randstring.get_random_string())

        self.behaviors.create_container(container_name)

        self.addCleanup(self.behaviors.force_delete_containers,
                        [container_name])

        url = "{0}/{1}".format(self.storage_url, container_name)
        params = {'extract-archive': 'tar'}
        headers = {'Accept': 'application/json'}
        response = self.client.put(url,
                                   data=self.bad_data,
                                   params=params,
                                   headers=headers)

        expected = HTTP_OK
        received = response.status_code
        self.assertEqual(
            expected, received, "upload corrupted tar.gz expected"
            " successful status code: {0} received: {1}".format(
                expected, received))

        # inspect the body of the response
        content = None

        try:
            content = json.loads(response.content)
        except ValueError, error:
            self.fixture_log.exception(error)
    def test_failure_reported_with_corrupt_tar_archive_bad_checksum(self):
        """
        Scenario: Verify behavior when a corrupt archive file is uploaded.
                  Checksum is overwritten with Null Bytes.

        Expected Results: Errors are reported. Objects are not created
        """
        container_name = '{0}_container_{1}'.format(
            BASE_NAME, randstring.get_random_string())

        self.behaviors.create_container(container_name)

        self.addCleanup(self.behaviors.force_delete_containers,
                        [container_name])

        archive_format = "tar"

        temp_data = self.read_archive_data(self.archive_paths[archive_format])

        enumerated_data = enumerate(temp_data)

        temp = []

        for i, char in enumerated_data:
            if (i >= TAR_CHKSUM_HEADER_OFFSET and i < TAR_CHKSUM_HEADER_END):
                temp.append("\x00")
            else:
                temp.append(char)

        data = ''.join(temp)

        headers = {'Accept': 'application/json'}

        response = self.client.create_archive_object(
            data, archive_format, upload_path=container_name, headers=headers)

        expected = HTTP_OK
        received = response.status_code
        self.assertEqual(
            expected, received, "upload corrupted tar expected"
            " successful status code: {0} received: {1}".format(
                expected, received))

        expected = 0
        received = int(response.entity.num_files_created)
        self.assertEqual(
            expected,
            received,
            msg="response body 'Number Files Created' expected: {0}"
            " received {1}".format(expected, received))

        expected = '400 Bad Request'
        received = response.entity.status
        self.assertEqual(expected,
                         received,
                         msg="response body 'Response Status' expected: {0}"
                         " received {1}".format(expected, received))

        expected = 0
        received = len(response.entity.errors)
        self.assertEqual(
            expected,
            received,
            msg="response body 'Errors' expected None received {0}".format(
                response.entity.errors))

        expected = 'Invalid Tar File: bad checksum'
        received = response.entity.body
        self.assertIn(expected,
                      received,
                      msg=("response body 'Response Body' expected '{0}'"
                           " received {1}").format(expected,
                                                   response.entity.body))
    def test_failure_reported_with_corrupt_tar_archive_bad_checksum(self):
        """
        Scenario: Verify behavior when a corrupt archive file is uploaded.
                  Checksum is overwritten with Null Bytes.

        Expected Results: Errors are reported. Objects are not created
        """
        container_name = '{0}_container_{1}'.format(
            BASE_NAME,
            randstring.get_random_string())

        self.behaviors.create_container(container_name)

        self.addCleanup(
            self.behaviors.force_delete_containers,
            [container_name])

        archive_format = "tar"

        temp_data = self.read_archive_data(self.archive_paths[archive_format])

        enumerated_data = enumerate(temp_data)

        temp = []

        for i, char in enumerated_data:
            if (i >= TAR_CHKSUM_HEADER_OFFSET and i < TAR_CHKSUM_HEADER_END):
                temp.append("\x00")
            else:
                temp.append(char)

        data = ''.join(temp)

        headers = {'Accept': 'application/json'}

        response = self.client.create_archive_object(
            data,
            archive_format,
            upload_path=container_name,
            headers=headers)

        expected = HTTP_OK
        received = response.status_code
        self.assertEqual(
            expected,
            received,
            "upload corrupted tar expected"
            " successful status code: {0} received: {1}".format(
                expected,
                received))

        expected = 0
        received = int(response.entity.num_files_created)
        self.assertEqual(
            expected,
            received,
            msg="response body 'Number Files Created' expected: {0}"
            " received {1}".format(expected, received))

        expected = '400 Bad Request'
        received = response.entity.status
        self.assertEqual(
            expected,
            received,
            msg="response body 'Response Status' expected: {0}"
            " received {1}".format(expected, received))

        expected = 0
        received = len(response.entity.errors)
        self.assertEqual(
            expected,
            received,
            msg="response body 'Errors' expected None received {0}".format(
                response.entity.errors))

        expected = 'Invalid Tar File: bad checksum'
        received = response.entity.body
        self.assertIn(
            expected,
            received,
            msg=("response body 'Response Body' expected '{0}'"
                 " received {1}").format(expected, response.entity.body))
Exemplo n.º 45
0
    def test_psuedo_dirs_traversal(self):
        container_name = "{0}_{1}".format(
            CONTAINER_NAME,
            randstring.get_random_string())

        content_length = str(len(self.default_obj_data))
        headers = {"Content-Length": content_length,
                   "Content-Type": CONTENT_TYPE_TEXT}

        base_name = "music/the_best_of_grok_and_drok/grok_live/"

        vol1_obj1 = "{0}{1}".format(base_name, "vol_1/rage_against_the_foo")
        vol1_obj2 = "{0}{1}".format(base_name, "vol_1/a_fist_full_of_foo")
        vol1_obj3 = "{0}{1}".format(base_name, "vol_1/nevermind_the_foo")
        vol2_obj1 = "{0}{1}".format(base_name, "vol_2/iron_foo")
        vol2_obj2 = "{0}{1}".format(base_name, "vol_2/foo_master")

        self.behaviors.create_object(
            container_name,
            vol1_obj1,
            data=self.default_obj_data,
            headers=headers)

        self.behaviors.create_object(
            container_name,
            vol1_obj2,
            data=self.default_obj_data,
            headers=headers)

        self.behaviors.create_object(
            container_name,
            vol1_obj3,
            data=self.default_obj_data,
            headers=headers)

        self.behaviors.create_object(
            container_name,
            vol2_obj1,
            data=self.default_obj_data,
            headers=headers)

        self.behaviors.create_object(
            container_name,
            vol2_obj2,
            data=self.default_obj_data,
            headers=headers)

        self.addCleanup(
            self.behaviors.force_delete_containers,
            [container_name])

        delimiter = "/"

        prefix = "music/"
        params = {"prefix": prefix, "delimiter": delimiter, "format": "json"}
        response = self.client.list_objects(container_name, params=params)

        members = self.get_members(["subdir", "name"], response.content)

        expected = 1
        received = len(members)
        self.assertEqual(
            expected,
            received,
            msg="container list with prefix: {0} and delimiter: {1}"
            " expected: {2} members received: {3}".format(
                prefix,
                delimiter,
                expected,
                received))

        obj_name = "music/the_best_of_grok_and_drok/"
        self.assertIn(
            obj_name,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(obj_name, members))

        prefix = "music/the_best_of_grok_and_drok/"
        params = {"prefix": prefix, "delimiter": delimiter, "format": "json"}
        response = self.client.list_objects(container_name, params=params)

        members = self.get_members(["subdir", "name"], response.content)

        expected = 1
        received = len(members)
        self.assertEqual(
            expected,
            received,
            msg="container list with prefix: {0} and delimiter: {1}"
            " expected: {2} members received: {3}".format(
                prefix,
                delimiter,
                expected,
                received))

        obj_name = "music/the_best_of_grok_and_drok/grok_live/"
        self.assertIn(
            obj_name,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(obj_name, members))

        prefix = "music/the_best_of_grok_and_drok/grok_live/"
        params = {"prefix": prefix, "delimiter": delimiter, "format": "json"}
        response = self.client.list_objects(container_name, params=params)

        members = self.get_members(["subdir", "name"], response.content)

        expected = 2
        received = len(members)
        self.assertEqual(
            expected,
            received,
            msg="container list with prefix: {0} and delimiter: {1}"
            " expected: {2} members received: {3}".format(
                prefix,
                delimiter,
                expected,
                received))

        obj_name = "music/the_best_of_grok_and_drok/grok_live/vol_1/"
        self.assertIn(
            obj_name,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(obj_name, members))

        obj_name = "music/the_best_of_grok_and_drok/grok_live/vol_2/"
        self.assertIn(
            obj_name,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(obj_name, members))

        prefix = "music/the_best_of_grok_and_drok/grok_live/vol_1/"
        params = {"prefix": prefix, "delimiter": delimiter, "format": "json"}
        response = self.client.list_objects(container_name, params=params)

        members = self.get_members(["subdir", "name"], response.content)

        expected = 3
        received = len(members)
        self.assertEqual(
            expected,
            received,
            msg="container list with prefix: {0} and delimiter: {1}"
            " expected: {2} members received: {3}".format(
                prefix,
                delimiter,
                expected,
                received))

        self.assertIn(
            vol1_obj1,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(vol1_obj1, members))

        self.assertIn(
            vol1_obj2,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(vol1_obj2, members))

        self.assertIn(
            vol1_obj3,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(vol1_obj3, members))

        prefix = "music/the_best_of_grok_and_drok/grok_live/vol_2/"
        params = {"prefix": prefix, "delimiter": delimiter, "format": "json"}
        response = self.client.list_objects(container_name, params=params)

        members = self.get_members(["subdir", "name"], response.content)

        expected = 2
        received = len(members)
        self.assertEqual(
            expected,
            received,
            msg="container list with prefix: {0} and delimiter: {1}"
            " expected: {2} members received: {3}".format(
                prefix,
                delimiter,
                expected,
                received))

        self.assertIn(
            vol2_obj1,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(vol2_obj1, members))

        self.assertIn(
            vol2_obj2,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(vol2_obj2, members))
Exemplo n.º 46
0
    def test_psuedo_dirs_with_path_query_parameter(self):
        """
        This is a depricated feature that has little documentation.
        The following things need to be done for the path parameter to work.
          1. For every "directory" a "directory marker" must be added as a
            object. The directory marker does not need to contain data, and
            thus can have a length of 0.
            Example:
            If you want a directory "foo/bar/", you would upload a object
            named "foo/bar/" to your container.

          2. You must upload your objects, prefixed with the "directory" path.
            Example:
            If you wanted to create an object in "foo/" and another in
            "foo/bar/", you would have to name the objects as follows:
                foo/object1.txt
                foo/bar/object2.txt

          3. Once this has been done, you can use the path query string
            parameter to list the objects in the simulated directory structure.
            Example:
            Using the above examples, setting path to "foo/" should list
            the following:
                foo/object1.txt
                foo/bar/
        """
        container_name = "{0}_{1}".format(
            CONTAINER_NAME,
            randstring.get_random_string())

        self.behaviors.create_container(container_name)

        self.addCleanup(
            self.behaviors.force_delete_containers,
            [container_name])

        """
        create dir markers
        """
        dir_marker_headers = {"Content-Length": "0"}

        lvl1_dir_marker = "level_1/"
        lvl2_dir_marker = "level_1/level_2/"
        lvl3_dir_marker = "level_1/level_2/level_3/"

        self.client.create_object(
            container_name,
            lvl1_dir_marker,
            headers=dir_marker_headers)

        self.client.create_object(
            container_name,
            lvl2_dir_marker,
            headers=dir_marker_headers)

        self.client.create_object(
            container_name,
            lvl3_dir_marker,
            headers=dir_marker_headers)

        """
        create objects
        """
        headers = {"Content-Length": str(len(self.default_obj_data)),
                   "Content-Type": CONTENT_TYPE_TEXT}

        """
        level 1 objects
        """
        lvl1_obj1 = "{0}{1}".format(lvl1_dir_marker, "lvl1_obj1")
        lvl1_obj2 = "{0}{1}".format(lvl1_dir_marker, "lvl1_obj2")

        self.client.create_object(
            container_name,
            lvl1_obj1,
            headers=headers,
            data=self.default_obj_data)

        self.client.create_object(
            container_name,
            lvl1_obj2,
            headers=headers,
            data=self.default_obj_data)

        """
        level 2 objects
        """
        lvl2_obj1 = "{0}{1}".format(lvl2_dir_marker, "lvl2_obj1")
        lvl2_obj2 = "{0}{1}".format(lvl2_dir_marker, "lvl2_obj2")

        self.client.create_object(
            container_name,
            lvl2_obj1,
            headers=headers,
            data=self.default_obj_data)

        self.client.create_object(
            container_name,
            lvl2_obj2,
            headers=headers,
            data=self.default_obj_data)

        """
        level 3 objects
        """
        lvl3_obj1 = "{0}{1}".format(lvl3_dir_marker, "lvl3_obj1")
        lvl3_obj2 = "{0}{1}".format(lvl3_dir_marker, "lvl3_obj2")

        self.client.create_object(
            container_name,
            lvl3_obj1,
            headers=headers,
            data=self.default_obj_data)

        self.client.create_object(
            container_name,
            lvl3_obj2,
            headers=headers,
            data=self.default_obj_data)

        """
        list objects
        """
        params = {"path": lvl1_dir_marker, "format": "json"}
        response = self.client.list_objects(container_name, params=params)

        members = self.get_members(["name"], response.content)

        expected = 3
        received = len(members)
        self.assertEqual(
            expected,
            received,
            msg="container list with path: {0} expected: {1} members"
            " received: {2}".format(lvl1_dir_marker, expected, received))

        self.assertIn(
            lvl2_dir_marker,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(lvl2_dir_marker, members))

        self.assertIn(
            lvl1_obj1,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(lvl1_obj1, members))

        self.assertIn(
            lvl1_obj2,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(lvl1_obj2, members))

        params = {"path": lvl2_dir_marker, "format": "json"}
        response = self.client.list_objects(container_name, params=params)

        members = self.get_members(["name"], response.content)

        expected = 3
        received = len(members)
        self.assertEqual(
            expected,
            received,
            msg="container list with path: {0} expected: {1} members"
            " received: {2}".format(lvl3_dir_marker, expected, received))

        self.assertIn(
            lvl3_dir_marker,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(lvl3_dir_marker, members))

        self.assertIn(
            lvl2_obj1,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(lvl2_obj1, members))

        self.assertIn(
            lvl2_obj2,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(lvl2_obj2, members))

        params = {"path": lvl3_dir_marker, "format": "json"}
        response = self.client.list_objects(container_name, params=params)

        members = self.get_members(["name"], response.content)

        expected = 2
        received = len(members)
        self.assertEqual(
            expected,
            received,
            msg="container list with path: {0} expected: {1} members"
            " received: {2}".format(lvl1_dir_marker, expected, received))

        self.assertIn(
            lvl3_obj1,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(lvl3_obj1, members))

        self.assertIn(
            lvl3_obj2,
            members,
            msg="object name: {0} was not found in response body:"
            " {1}".format(lvl3_obj2, members))
Exemplo n.º 47
0
    def test_objects_list_with_path_query_parameter(self):
        """
        This is a depricated feature that has little documentation.
        The following things need to be done for the path parameter to work.
          1. For every 'directory' a 'directory marker' must be added as a
            object. The directory marker does not need to contain data, and
            thus can have a length of 0.
            Example:
            If you want a directory 'foo/bar/', you would upload a object
            named 'foo/bar/' to your container.

          2. You must upload your objects, prefixed with the 'directory' path.
            Example:
            If you wanted to create an object in 'foo/' and another in
            'foo/bar/', you would have to name the objects as follows:
                foo/object1.txt
                foo/bar/object2.txt

          3. Once this has been done, you can use the path query string
            parameter to list the objects in the simulated directory structure.
            Example:
            Using the above examples, setting path to 'foo/' should list
            the following:
                foo/objet1.txt
                foo/bar/
        """
        container_name = '{0}_{1}'.format(
            self.base_container_name,
            randstring.get_random_string())
        self.client.create_container(container_name)

        self.addCleanup(
            self.client.force_delete_containers,
            [container_name])

        dir_marker = 'path_test/'

        headers = {'Content-Length': '0'}

        self.client.create_object(
            container_name,
            dir_marker,
            headers=headers)

        dir_marker = 'path_test/nested_dir/'

        headers = {'Content-Length': '0'}

        self.client.create_object(
            container_name,
            dir_marker,
            headers=headers)

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name_prefix = 'path_test/nested_dir/'
        object_name_postfix = '{0}_{1}'.format(
            self.base_object_name,
            randstring.get_random_string())
        object_name = '{0}{1}'.format(object_name_prefix, object_name_postfix)

        headers = {'Content-Length': content_length,
                   'Content-Type': CONTENT_TYPE_TEXT}

        self.client.create_object(
            container_name,
            object_name,
            headers=headers,
            data=object_data)

        params = {'path': 'path_test/'}

        response = self.client.list_objects(container_name, params=params)

        method = "simulated directory list"
        expected = 200
        received = response.status_code

        self.assertEqual(
            expected,
            received,
            msg=STATUS_CODE_MSG.format(
                method=method,
                expected=expected,
                received=str(received)))

        params = {'path': 'path_test/nested_dir/'}

        response = self.client.list_objects(container_name, params=params)

        method = "simulated obj in directory list"
        expected = 200
        received = response.status_code

        self.assertEqual(
            expected,
            received,
            msg=STATUS_CODE_MSG.format(
                method=method,
                expected=expected,
                received=str(received)))
Exemplo n.º 48
0
    def setUpClass(cls):
        super(ObjectVersioningTest, cls).setUpClass()

        cls.container_name = CONTAINER_NAME
        cls.object_name = "{0}_{1}".format(cls.behaviors.VALID_OBJECT_NAME,
                                           randstring.get_random_string())
Exemplo n.º 49
0
    def test_objects_list_with_path_query_parameter(self):
        """
        This is a depricated feature that has little documentation.
        The following things need to be done for the path parameter to work.
          1. For every 'directory' a 'directory marker' must be added as a
            object. The directory marker does not need to contain data, and
            thus can have a length of 0.
            Example:
            If you want a directory 'foo/bar/', you would upload a object
            named 'foo/bar/' to your container.

          2. You must upload your objects, prefixed with the 'directory' path.
            Example:
            If you wanted to create an object in 'foo/' and another in
            'foo/bar/', you would have to name the objects as follows:
                foo/object1.txt
                foo/bar/object2.txt

          3. Once this has been done, you can use the path query string
            parameter to list the objects in the simulated directory structure.
            Example:
            Using the above examples, setting path to 'foo/' should list
            the following:
                foo/objet1.txt
                foo/bar/
        """
        container_name = self.behaviors.generate_unique_container_name(
            self.base_container_name)

        self.client.create_container(container_name)

        self.addCleanup(self.behaviors.force_delete_containers,
                        [container_name])

        dir_marker = 'path_test/'

        headers = {'Content-Length': '0'}

        self.client.create_object(container_name, dir_marker, headers=headers)

        dir_marker = 'path_test/nested_dir/'

        headers = {'Content-Length': '0'}

        self.client.create_object(container_name, dir_marker, headers=headers)

        object_data = 'Test file data'
        content_length = str(len(object_data))
        object_name_prefix = 'path_test/nested_dir/'
        object_name_postfix = 'object_{0}'.format(
            randstring.get_random_string())
        object_name = '{0}{1}'.format(object_name_prefix, object_name_postfix)

        headers = {
            'Content-Length': content_length,
            'Content-Type': CONTENT_TYPE_TEXT
        }

        self.client.create_object(container_name,
                                  object_name,
                                  headers=headers,
                                  data=object_data)

        params = {'path': 'path_test/'}

        response = self.client.list_objects(container_name, params=params)

        method = "simulated directory list"
        expected = 200
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))

        params = {'path': 'path_test/nested_dir/'}

        response = self.client.list_objects(container_name, params=params)

        method = "simulated obj in directory list"
        expected = 200
        received = response.status_code

        self.assertEqual(expected,
                         received,
                         msg=STATUS_CODE_MSG.format(method=method,
                                                    expected=expected,
                                                    received=str(received)))
Exemplo n.º 50
0
def rand_name(name='test'):
    return "{name}{suffix}".format(name=name,
                                   suffix=randomstring.get_random_string())
Exemplo n.º 51
0
def rand_name(name='test'):
    return "cloudroast-{name}{suffix}".format(
        name=name, suffix=randomstring.get_random_string())