示例#1
0
    def test_upload_blocks(self):
        cname = self.create_container()[0]

        url = join_urls(self.pithos_path, self.user, cname)
        r = self.post(url, data=get_random_data())
        self.assertEqual(r.status_code, 202)

        url = join_urls(self.pithos_path, 'chuck', cname)
        r = self.post(url, data=get_random_data())
        self.assertEqual(r.status_code, 403)

        # share object for read only
        oname = self.upload_object(cname)[0]
        url = join_urls(self.pithos_path, self.user, cname, oname)
        self.post(url, content_type='', HTTP_CONTENT_RANGE='bytes */*',
                  HTTP_X_OBJECT_SHARING='read=*')
        url = join_urls(self.pithos_path, 'chuck', cname)
        r = self.post(url, data=get_random_data())
        self.assertEqual(r.status_code, 403)

        # share object for write only
        oname = self.upload_object(cname)[0]
        url = join_urls(self.pithos_path, self.user, cname, oname)
        self.post(url, content_type='', HTTP_CONTENT_RANGE='bytes */*',
                  HTTP_X_OBJECT_SHARING='write=*')
        url = join_urls(self.pithos_path, 'chuck', cname)
        r = self.post(url, data=get_random_data())
        self.assertEqual(r.status_code, 403)
示例#2
0
    def test_not_allowed(self):
        cname = self.create_container()[0]
        oname, odata = self.upload_object(cname)[:-1]

        url = join_urls(self.pithos_path, self.user)
        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.post(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)

        url = join_urls(self.pithos_path, self.user, cname)
        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.put(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)
        r = self.post(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)
        r = self.delete(url, user='******')
        self.assertEqual(r.status_code, 403)

        url = join_urls(self.pithos_path, self.user, cname, oname)
        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.put(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)
        r = self.post(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)
        r = self.delete(url, user='******')
        self.assertEqual(r.status_code, 403)
示例#3
0
    def test_not_allowed(self):
        cname = self.create_container()[0]
        oname, odata = self.upload_object(cname)[:-1]

        url = join_urls(self.pithos_path, self.user)
        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.post(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)

        url = join_urls(self.pithos_path, self.user, cname)
        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.put(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)
        r = self.post(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)
        r = self.delete(url, user='******')
        self.assertEqual(r.status_code, 403)

        url = join_urls(self.pithos_path, self.user, cname, oname)
        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.put(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)
        r = self.post(url, user='******', data=get_random_data())
        self.assertEqual(r.status_code, 403)
        r = self.delete(url, user='******')
        self.assertEqual(r.status_code, 403)
示例#4
0
    def test_groups(self):
        # create a group
        headers = {"HTTP_X_ACCOUNT_GROUP_γκρουπ": "chazapis,διογένης"}
        url = join_urls(self.pithos_path, self.user)
        r = self.post(url, **headers)
        self.assertEqual(r.status_code, 202)

        groups = self.get_account_groups()
        self.assertTrue("γκρουπ" in groups)
        self.assertEqual(groups["γκρουπ"], "chazapis,διογένης")

        # check read access
        self.create_container("φάκελος")
        odata = self.upload_object("φάκελος", "ο1")[1]

        r = self.head(url, user="******")
        self.assertEqual(r.status_code, 403)
        r = self.get(url, user="******")
        self.assertEqual(r.status_code, 403)

        # share for read
        url = join_urls(self.pithos_path, self.user, "φάκελος", "ο1")
        r = self.post(url, content_type="", HTTP_X_OBJECT_SHARING="read=%s:γκρουπ" % self.user)
        self.assertEqual(r.status_code, 202)

        r = self.head(url, user="******")
        self.assertEqual(r.status_code, 200)
        r = self.get(url, user="******")
        self.assertEqual(r.status_code, 200)

        # check write access
        appended_data = get_random_data()
        r = self.post(
            url,
            user="******",
            data=appended_data,
            content_type="application/octet-stream",
            HTTP_CONTENT_LENGTH=str(len(appended_data)),
            HTTP_CONTENT_RANGE="bytes */*",
        )
        self.assertEqual(r.status_code, 403)

        # share for write
        url = join_urls(self.pithos_path, self.user, "φάκελος", "ο1")
        r = self.post(url, content_type="", HTTP_X_OBJECT_SHARING="write=%s:γκρουπ" % self.user)
        self.assertEqual(r.status_code, 202)

        r = self.post(
            url,
            user="******",
            data=appended_data,
            content_type="application/octet-stream",
            HTTP_CONTENT_LENGTH=str(len(appended_data)),
            HTTP_CONTENT_RANGE="bytes */*",
        )
        self.assertEqual(r.status_code, 204)

        r = self.get(url, user="******")
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.content, odata + appended_data)
示例#5
0
 def update_object_data(self,
                        cname,
                        oname=None,
                        length=None,
                        content_type=None,
                        content_range=None,
                        verify_status=True,
                        user=None,
                        **meta):
     oname = oname or get_random_name()
     length = length or random.randint(TEST_BLOCK_SIZE, 2 * TEST_BLOCK_SIZE)
     content_type = content_type or 'application/octet-stream'
     user = user or self.user
     data = get_random_data(length=length)
     headers = dict(('HTTP_X_OBJECT_META_%s' % k.upper(), v)
                    for k, v in meta.iteritems())
     if content_range:
         headers['HTTP_CONTENT_RANGE'] = content_range
     url = join_urls(self.pithos_path, user, cname, oname)
     r = self.post(url,
                   user=user,
                   data=data,
                   content_type=content_type,
                   **headers)
     if verify_status:
         self.assertEqual(r.status_code, 204)
     return oname, data, r
示例#6
0
    def test_groups(self):
        # create a group
        headers = {'HTTP_X_ACCOUNT_GROUP_γκρουπ': 'chazapis,διογένης'}
        url = join_urls(self.pithos_path, self.user)
        r = self.post(url, **headers)
        self.assertEqual(r.status_code, 202)

        groups = self.get_account_groups()
        self.assertTrue('γκρουπ' in groups)
        self.assertEqual(groups['γκρουπ'], 'chazapis,διογένης')

        # check read access
        self.create_container('φάκελος')
        odata = self.upload_object('φάκελος', 'ο1')[1]

        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 403)

        # share for read
        url = join_urls(self.pithos_path, self.user, 'φάκελος', 'ο1')
        r = self.post(url,
                      content_type='',
                      HTTP_X_OBJECT_SHARING='read=%s:γκρουπ' % self.user)
        self.assertEqual(r.status_code, 202)

        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 200)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 200)

        # check write access
        appended_data = get_random_data()
        r = self.post(url,
                      user='******',
                      data=appended_data,
                      content_type='application/octet-stream',
                      HTTP_CONTENT_LENGTH=str(len(appended_data)),
                      HTTP_CONTENT_RANGE='bytes */*')
        self.assertEqual(r.status_code, 403)

        # share for write
        url = join_urls(self.pithos_path, self.user, 'φάκελος', 'ο1')
        r = self.post(url,
                      content_type='',
                      HTTP_X_OBJECT_SHARING='write=%s:γκρουπ' % self.user)
        self.assertEqual(r.status_code, 202)

        r = self.post(url,
                      user='******',
                      data=appended_data,
                      content_type='application/octet-stream',
                      HTTP_CONTENT_LENGTH=str(len(appended_data)),
                      HTTP_CONTENT_RANGE='bytes */*')
        self.assertEqual(r.status_code, 204)

        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.content, odata + appended_data)
示例#7
0
文件: unicode.py 项目: grnet/synnefo
    def test_object_meta(self):
        self.create_container('φάκελος')
        url = join_urls(self.pithos_path, self.user, 'φάκελος', 'αντικείμενο')
        headers = {'HTTP_X_OBJECT_META_Ποιότητα': 'Ααα'}
        r = self.put(url, data=get_random_data(), **headers)
        self.assertEqual(r.status_code, 201)

        meta = self.get_object_meta('φάκελος', 'αντικείμενο')
        self.assertTrue('Ποιότητα' in meta)
        self.assertEqual(meta['Ποιότητα'], 'Ααα')
示例#8
0
    def test_object_meta(self):
        self.create_container("φάκελος")
        url = join_urls(self.pithos_path, self.user, "φάκελος", "αντικείμενο")
        headers = {"HTTP_X_OBJECT_META_Ποιότητα": "Ααα"}
        r = self.put(url, data=get_random_data(), **headers)
        self.assertEqual(r.status_code, 201)

        meta = self.get_object_meta("φάκελος", "αντικείμενο")
        self.assertTrue("Ποιότητα" in meta)
        self.assertEqual(meta["Ποιότητα"], "Ααα")
示例#9
0
        def assert_multiple_match(etag):
            quoted = lambda s: '"%s"' % s
            r = self.get(public_url, HTTP_IF_MATCH=','.join(
                [quoted(etag), quoted(get_random_data(64))]))

            # assert get success
            self.assertEqual(r.status_code, 200)

            # assert response content
            self.assertEqual(r.content, odata)
示例#10
0
文件: unicode.py 项目: vgerak/synnefo
    def test_object_meta(self):
        self.create_container('φάκελος')
        url = join_urls(self.pithos_path, self.user, 'φάκελος', 'αντικείμενο')
        headers = {'HTTP_X_OBJECT_META_Ποιότητα': 'Ααα'}
        r = self.put(url, data=get_random_data(), **headers)
        self.assertEqual(r.status_code, 201)

        meta = self.get_object_meta('φάκελος', 'αντικείμενο')
        self.assertTrue('Ποιότητα' in meta)
        self.assertEqual(meta['Ποιότητα'], 'Ααα')
示例#11
0
    def test_delete_contents(self):
        folder = self.create_folder('c1')[0]
        for i in range(11):
            descendant = '%s_%d' % (strnextling(folder), i)
            self.upload_object('c1', descendant)
        self.create_folder('c1', '%s/%s' % (folder, get_random_data(5)))[0]

        r = self.delete('%s?delimiter=/' % join_urls(
            self.pithos_path, self.user, 'c1'))
        self.assertEqual(r.status_code, 204)
        self.assertEqual([], self.list_objects('c1'))
        self.assertTrue('c1' in self.list_containers(format=None))
示例#12
0
文件: public.py 项目: vgerak/synnefo
        def assert_multiple_match(etag):
            quoted = lambda s: '"%s"' % s
            r = self.get(public_url,
                         HTTP_IF_MATCH=','.join(
                             [quoted(etag),
                              quoted(get_random_data(64))]))

            # assert get success
            self.assertEqual(r.status_code, 200)

            # assert response content
            self.assertEqual("".join(r.streaming_content), odata)
示例#13
0
 def upload_object(self, cname, oname=None, length=None, verify_status=True,
                   user=None, **meta):
     oname = oname or get_random_name()
     length = length or random.randint(TEST_BLOCK_SIZE, 2 * TEST_BLOCK_SIZE)
     user = user or self.user
     data = get_random_data(length=length)
     headers = dict(('HTTP_X_OBJECT_META_%s' % k.upper(), v)
                    for k, v in meta.iteritems())
     url = join_urls(self.pithos_path, user, cname, oname)
     r = self.put(url, user=user, data=data, **headers)
     if verify_status:
         self.assertEqual(r.status_code, 201)
     return oname, data, r
示例#14
0
 def upload_object(self, cname, oname=None, length=None, verify_status=True,
                   user=None, **meta):
     oname = oname or get_random_name()
     length = length or random.randint(TEST_BLOCK_SIZE, 2 * TEST_BLOCK_SIZE)
     user = user or self.user
     data = get_random_data(length=length)
     headers = dict(('HTTP_X_OBJECT_META_%s' % k.upper(), v)
                    for k, v in meta.iteritems())
     url = join_urls(self.pithos_path, user, cname, oname)
     r = self.put(url, user=user, data=data, **headers)
     if verify_status:
         self.assertEqual(r.status_code, 201)
     return oname, data, r
示例#15
0
文件: views.py 项目: apyrgio/synnefo
    def test_get_multiple_if_match(self):
        if pithos_settings.UPDATE_MD5:
            etag = md5_hash(self.odata)
        else:
            etag = merkle(self.odata)

        quoted = lambda s: '"%s"' % s
        r = self.view(self.view_url, HTTP_IF_MATCH=','.join(
            [quoted(etag), quoted(get_random_data(64))]))

        # assert get success
        self.assertEqual(r.status_code, 200)

        # assert response content
        self.assertEqual(r.content, self.odata)
示例#16
0
    def test_get_multiple_if_match(self):
        if pithos_settings.UPDATE_MD5:
            etag = md5_hash(self.odata)
        else:
            etag = merkle(self.odata)

        quoted = lambda s: '"%s"' % s
        r = self.view(self.view_url,
                      HTTP_IF_MATCH=','.join(
                          [quoted(etag),
                           quoted(get_random_data(64))]))

        # assert get success
        self.assertEqual(r.status_code, 200)

        # assert response content
        self.assertEqual(r.content, self.odata)
示例#17
0
 def update_object_data(self, cname, oname=None, length=None,
                        content_type=None, content_range=None,
                        verify_status=True, user=None, **meta):
     oname = oname or get_random_name()
     length = length or random.randint(TEST_BLOCK_SIZE, 2 * TEST_BLOCK_SIZE)
     content_type = content_type or 'application/octet-stream'
     user = user or self.user
     data = get_random_data(length=length)
     headers = dict(('HTTP_X_OBJECT_META_%s' % k.upper(), v)
                    for k, v in meta.iteritems())
     if content_range:
         headers['HTTP_CONTENT_RANGE'] = content_range
     url = join_urls(self.pithos_path, user, cname, oname)
     r = self.post(url, user=user, data=data, content_type=content_type,
                   **headers)
     if verify_status:
         self.assertEqual(r.status_code, 204)
     return oname, data, r
示例#18
0
文件: unicode.py 项目: grnet/synnefo
    def test_groups(self):
        # create a group
        headers = {'HTTP_X_ACCOUNT_GROUP_γκρουπ': 'chazapis,διογένης'}
        url = join_urls(self.pithos_path, self.user)
        r = self.post(url, **headers)
        self.assertEqual(r.status_code, 202)

        groups = self.get_account_groups()
        self.assertTrue('γκρουπ' in groups)
        self.assertEqual(groups['γκρουπ'], 'chazapis,διογένης')

        headers = {'HTTP_X_ACCOUNT_GROUP_γκρουπ': 'διογένης'}
        url = join_urls(self.pithos_path, self.user)
        r = self.post('%s?update=' % url, **headers)
        self.assertEqual(r.status_code, 202)

        groups = self.get_account_groups()
        self.assertTrue('γκρουπ' in groups)
        self.assertEqual(groups['γκρουπ'], 'διογένης')

        # check read access
        self.create_container('φάκελος')
        odata = self.upload_object('φάκελος', 'ο1')[1]

        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 403)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 403)

        # share for read
        url = join_urls(self.pithos_path, self.user, 'φάκελος', 'ο1')
        r = self.post(url, content_type='',
                      HTTP_X_OBJECT_SHARING='read=%s:γκρουπ' % self.user)
        self.assertEqual(r.status_code, 202)

        r = self.head(url, user='******')
        self.assertEqual(r.status_code, 200)
        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 200)

        # check write access
        appended_data = get_random_data()
        r = self.post(url, user='******',  data=appended_data,
                      content_type='application/octet-stream',
                      HTTP_CONTENT_LENGTH=str(len(appended_data)),
                      HTTP_CONTENT_RANGE='bytes */*')
        self.assertEqual(r.status_code, 403)

        # share for write
        url = join_urls(self.pithos_path, self.user, 'φάκελος', 'ο1')
        r = self.post(url, content_type='',
                      HTTP_X_OBJECT_SHARING='write=%s:γκρουπ' % self.user)
        self.assertEqual(r.status_code, 202)

        r = self.post(url, user='******', data=appended_data,
                      content_type='application/octet-stream',
                      HTTP_CONTENT_LENGTH=str(len(appended_data)),
                      HTTP_CONTENT_RANGE='bytes */*')
        self.assertEqual(r.status_code, 204)

        r = self.get(url, user='******')
        self.assertEqual(r.status_code, 200)
        self.assertEqual("".join(r.streaming_content), odata + appended_data)

        gname = ('a' * 256).capitalize()
        headers = {'HTTP_X_ACCOUNT_GROUP_%s' % gname: 'β'}
        url = join_urls(self.pithos_path, self.user)
        r = self.post(url, **headers)
        self.assertEqual(r.status_code, 202)

        groups = self.get_account_groups()
        self.assertTrue(gname in groups)
        self.assertEqual(groups[gname], 'β')

        gname = ('a' * 257).capitalize()
        headers = {'HTTP_X_ACCOUNT_GROUP_%s' % gname: 'β'}
        url = join_urls(self.pithos_path, self.user)
        r = self.post(url, **headers)
        self.assertEqual(r.status_code, 400)
示例#19
0
    def _assert_write(self, object, authorized=None):
        authorized = authorized or []

        url = join_urls(self.pithos_path, self.user, self.container, object)
        for user in self.users:
            if user in authorized:
                r = self.get(url)
                self.assertEqual(r.status_code, 200)
                initial_data = r.content

                # test write access
                data = get_random_data()
                r = self.post(url,
                              user=user,
                              data=data,
                              content_type='application/octet-stream',
                              HTTP_CONTENT_LENGTH=str(len(data)),
                              HTTP_CONTENT_RANGE='bytes */*')
                self.assertEqual(r.status_code, 204)

                # test read access
                r = self.get(url, user=user)
                self.assertEqual(r.status_code, 200)
                server_data = r.content
                self.assertEqual(server_data, initial_data + data)
            else:
                # test write access
                data = get_random_data()
                r = self.post(url,
                              user=user,
                              data=data,
                              content_type='application/octet-stream',
                              HTTP_CONTENT_LENGTH=str(len(data)),
                              HTTP_CONTENT_RANGE='bytes */*')
                self.assertEqual(r.status_code, 403)

        # check inheritance
        info = self.get_object_info(self.container, object)
        is_directory = info['Content-Type'] in ('application/directory',
                                                'application/folder')
        prefix = object + '/'

        derivatives = [
            o['name'] for o in self.list_objects(self.container, prefix=object)
            if o['name'] != object
        ]

        for o in derivatives:
            url = join_urls(self.pithos_path, self.user, self.container, o)
            for user in self.users:
                if (user in authorized and is_directory
                        and o.startswith(prefix)):
                    # get initial data
                    r = self.get(url)
                    self.assertEqual(r.status_code, 200)
                    initial_data = r.content

                    # test write access
                    data = get_random_data()
                    r = self.post(url,
                                  user=user,
                                  data=data,
                                  content_type='application/octet-stream',
                                  HTTP_CONTENT_LENGTH=str(len(data)),
                                  HTTP_CONTENT_RANGE='bytes */*')
                    self.assertEqual(r.status_code, 204)

                    # test read access
                    r = self.get(url, user=user)
                    self.assertEqual(r.status_code, 200)
                    server_data = r.content
                    self.assertEqual(server_data, initial_data + data)
                    initial_data = server_data
                else:
                    # test write access
                    data = get_random_data()
                    r = self.post(url,
                                  user=user,
                                  data=data,
                                  content_type='application/octet-stream',
                                  HTTP_CONTENT_LENGTH=str(len(data)),
                                  HTTP_CONTENT_RANGE='bytes */*')
                    self.assertEqual(r.status_code, 403)
示例#20
0
    def _assert_write(self, object, authorized=None):
        authorized = authorized or []

        url = join_urls(self.pithos_path, self.user, self.container, object)
        for user in self.users:
            if user in authorized:
                r = self.get(url)
                self.assertEqual(r.status_code, 200)
                initial_data = r.content

                # test write access
                data = get_random_data()
                r = self.post(url, user=user, data=data,
                              content_type='application/octet-stream',
                              HTTP_CONTENT_LENGTH=str(len(data)),
                              HTTP_CONTENT_RANGE='bytes */*')
                self.assertEqual(r.status_code, 204)

                # test read access
                r = self.get(url, user=user)
                self.assertEqual(r.status_code, 200)
                server_data = r.content
                self.assertEqual(server_data, initial_data + data)
            else:
                # test write access
                data = get_random_data()
                r = self.post(url, user=user, data=data,
                              content_type='application/octet-stream',
                              HTTP_CONTENT_LENGTH=str(len(data)),
                              HTTP_CONTENT_RANGE='bytes */*')
                self.assertEqual(r.status_code, 403)

        # check inheritance
        info = self.get_object_info(self.container, object)
        is_directory = info['Content-Type'] in ('application/directory',
                                                'application/folder')
        prefix = object + '/'

        derivatives = [o['name'] for o in self.list_objects(
            self.container, prefix=object) if o['name'] != object]

        for o in derivatives:
            url = join_urls(self.pithos_path, self.user, self.container, o)
            for user in self.users:
                if (user in authorized and is_directory and
                        o.startswith(prefix)):
                    # get initial data
                    r = self.get(url)
                    self.assertEqual(r.status_code, 200)
                    initial_data = r.content

                    # test write access
                    data = get_random_data()
                    r = self.post(url, user=user, data=data,
                                  content_type='application/octet-stream',
                                  HTTP_CONTENT_LENGTH=str(len(data)),
                                  HTTP_CONTENT_RANGE='bytes */*')
                    self.assertEqual(r.status_code, 204)

                    # test read access
                    r = self.get(url, user=user)
                    self.assertEqual(r.status_code, 200)
                    server_data = r.content
                    self.assertEqual(server_data, initial_data + data)
                    initial_data = server_data
                else:
                    # test write access
                    data = get_random_data()
                    r = self.post(url, user=user, data=data,
                                  content_type='application/octet-stream',
                                  HTTP_CONTENT_LENGTH=str(len(data)),
                                  HTTP_CONTENT_RANGE='bytes */*')
                    self.assertEqual(r.status_code, 403)