Esempio n. 1
0
 def test_xattr_bad_content_container(self):
     self.init_content()
     xattr.setxattr(self.chunk_path,
                    'user.' + chunk_xattr_keys['container_id'],
                    self.bad_container_id)
     self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit,
                       self.chunk_path)
Esempio n. 2
0
    def test_xattr_bad_chunk_size(self):
        self.init_content()
        xattr.setxattr(self.chunk_path,
                       'user.' + chunk_xattr_keys['chunk_size'], '-1')

        self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit,
                          self.chunk_path)
Esempio n. 3
0
    def test_xattr_bad_chunk_id(self):
        self.init_content()
        xattr.setxattr(self.chunk_path, 'user.' + chunk_xattr_keys['chunk_id'],
                       'WRONG_ID')

        self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit,
                          self.chunk_path)
Esempio n. 4
0
    def test_xattr_bad_xattr_metachunk_size(self):
        self.init_content()
        xattr.setxattr(self.chunk.path,
                       'user.' + CHUNK_XATTR_KEYS['metachunk_size'], b'320')

        self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit,
                          self.chunk.path, self.chunk.id)
Esempio n. 5
0
    def test_xattr_bad_xattr_chunk_position(self):
        self.init_content()
        xattr.setxattr(self.chunk.path,
                       'user.' + CHUNK_XATTR_KEYS['chunk_pos'], b'42')

        self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit,
                          self.chunk.path, self.chunk.id)
Esempio n. 6
0
 def test_xattr_bad_chunk_hash(self):
     self.init_content()
     xattr.setxattr(
         self.chunk_path, 'user.' + chunk_xattr_keys['chunk_hash'],
         'WRONG_HASH')
     self.assertRaises(exc.CorruptedChunk, self.auditor.chunk_audit,
                       self.chunk_path)
Esempio n. 7
0
    def test_xattr_bad_chunk_position(self):
        self.init_content()
        xattr.setxattr(self.chunk_path, 'user.grid.chunk.position', '42')

        xattr.setxattr(self.chunk_path,
                       'user.' + chunk_xattr_keys['chunk_pos'], '42')
        self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit,
                          self.chunk_path)
Esempio n. 8
0
    def test_xattr_bad_xattr_metachunk_hash(self):
        self.init_content()
        xattr.setxattr(self.chunk.path,
                       'user.' + CHUNK_XATTR_KEYS['metachunk_hash'],
                       b'0123456789ABCDEF0123456789ABCDEF')

        self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit,
                          self.chunk.path, self.chunk.id)
Esempio n. 9
0
    def test_xattr_bad_xattr_content_id(self):
        self.init_content()
        xattr.setxattr(
            self.chunk.path,
            'user.' + CHUNK_XATTR_CONTENT_FULLPATH_PREFIX + str(self.chunk.id),
            encode_fullpath(self.account, self.ref, self.content.path,
                            self.content.version, '0123456789ABCDEF'))

        self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit,
                          self.chunk.path, self.chunk.id)
Esempio n. 10
0
    def test_xattr_bad_xattr_content_container(self):
        self.init_content()
        xattr.setxattr(
            self.chunk.path,
            'user.' + CHUNK_XATTR_CONTENT_FULLPATH_PREFIX + str(self.chunk.id),
            encode_fullpath(self.account, 'WRONG_REF', self.content.path,
                            self.content.version, self.content.id))

        self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit,
                          self.chunk.path, self.chunk.id)
Esempio n. 11
0
    def test_xattr_bad_xattr_chunk_id(self):
        self.init_content()
        xattr.removexattr(
            self.chunk.path,
            'user.' + CHUNK_XATTR_CONTENT_FULLPATH_PREFIX + str(self.chunk.id))
        xattr.setxattr(
            self.chunk.path,
            'user.' + CHUNK_XATTR_CONTENT_FULLPATH_PREFIX + 'WRONG_ID',
            self.content.fullpath.encode('utf-8'))

        self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit,
                          self.chunk.path, self.chunk.id)
Esempio n. 12
0
def copy_chunk(src, dst):
    shutil.copyfile(src, dst)
    all_xattrs = xattr.get_all(src)
    with open(dst, 'r') as fd:
        for k, v in all_xattrs:
            xattr.setxattr(fd, k, v)
Esempio n. 13
0
def convert_to_old_chunk(chunk_path,
                         account,
                         container,
                         path,
                         version,
                         content_id,
                         add_old_fullpath=False):
    chunk_id = chunk_path.rsplit('/', 1)[1]
    cid = cid_from_name(account, container)
    with open(chunk_path) as fd:
        xattr.setxattr(fd, 'user.' + CHUNK_XATTR_KEYS['chunk_id'],
                       chunk_id.encode('utf-8'))
        xattr.setxattr(fd, 'user.' + CHUNK_XATTR_KEYS['container_id'],
                       cid.encode('utf-8'))
        xattr.setxattr(fd, 'user.' + CHUNK_XATTR_KEYS['content_path'],
                       path.encode('utf-8'))
        xattr.setxattr(fd, 'user.' + CHUNK_XATTR_KEYS['content_version'],
                       str(version).encode('utf-8'))
        xattr.setxattr(fd, 'user.' + CHUNK_XATTR_KEYS['content_id'],
                       content_id.encode('utf-8'))
        if add_old_fullpath:
            old_fullpath = encode_old_fullpath(account, container, path,
                                               version).encode('utf-8')
            hasher = sha256()
            hasher.update(old_fullpath)
            hash_old_fullpath = hasher.hexdigest().upper()
            xattr.setxattr(fd, 'user.oio:' + hash_old_fullpath, old_fullpath)
        xattr.setxattr(fd, 'user.' + CHUNK_XATTR_KEYS['oio_version'], b'4.0')
        try:
            xattr.removexattr(
                fd, 'user.' + CHUNK_XATTR_CONTENT_FULLPATH_PREFIX + chunk_id)
        except IOError:
            pass
Esempio n. 14
0
    def _create_chunk(self, rawx_path, alias="toto"):
        container_id = random_id(64)
        content_id = random_id(32)
        chunk_id = random_id(64)

        chunk_dir = "%s/%s" % (rawx_path, chunk_id[0:3])
        if not os.path.isdir(chunk_dir):
            os.makedirs(chunk_dir)

        chunk_path = "%s/%s" % (chunk_dir, chunk_id)
        with open(chunk_path, "w") as f:
            f.write("toto")

        xattr.setxattr(chunk_path, 'user.' + chunk_xattr_keys['chunk_hash'],
                       32 * '0')
        xattr.setxattr(chunk_path, 'user.' + chunk_xattr_keys['chunk_id'],
                       chunk_id)
        xattr.setxattr(chunk_path, 'user.' + chunk_xattr_keys['chunk_pos'],
                       '0')
        xattr.setxattr(chunk_path, 'user.' + chunk_xattr_keys['chunk_size'],
                       '4')
        xattr.setxattr(chunk_path, 'user.' + chunk_xattr_keys['container_id'],
                       container_id)
        xattr.setxattr(chunk_path, 'user.' + chunk_xattr_keys['content_id'],
                       content_id)
        xattr.setxattr(chunk_path, 'user.' + chunk_xattr_keys['content_path'],
                       alias)
        xattr.setxattr(chunk_path,
                       'user.' + chunk_xattr_keys['content_policy'],
                       'TESTPOLICY')
        xattr.setxattr(chunk_path,
                       'user.' + chunk_xattr_keys['content_chunkmethod'],
                       'plain/nb_copy=3')
        xattr.setxattr(chunk_path,
                       'user.' + chunk_xattr_keys['content_version'], '0')
        xattr.setxattr(chunk_path, 'user.' + chunk_xattr_keys['oio_version'],
                       OIO_VERSION)

        return chunk_path, container_id, content_id, chunk_id
Esempio n. 15
0
    def _create_chunk(self, rawx_path, alias="toto", suffix=''):
        cname = random_str(8)
        container_id = cid_from_name(self.account, cname)
        content_id = random_id(32)
        chunk_id = random_id(64)

        chunk_dir = "%s/%s" % (rawx_path, chunk_id[0:3])
        if not os.path.isdir(chunk_dir):
            os.makedirs(chunk_dir)

        chunk_path = "%s/%s%s" % (chunk_dir, chunk_id, suffix)
        with open(chunk_path, "w") as chunk_file:
            chunk_file.write("toto")

        # pylint: disable=no-member
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['chunk_hash'], 32 * '0')
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['chunk_id'], chunk_id)
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['chunk_pos'], '0')
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['chunk_size'], '4')
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['content_policy'],
            'TESTPOLICY')
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['content_chunkmethod'],
            'plain/nb_copy=3')
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['content_version'], '1')
        # Old (oio-sds < 4.2) extended attributes
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['container_id'],
            container_id)
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['content_id'], content_id)
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['content_path'], alias)
        # New (oio-sds >= 4.2) extended attributes
        xattr.setxattr(
            chunk_path, 'user.' + chunk_xattr_keys['oio_version'], OIO_VERSION)
        fullpath = encode_fullpath(self.account, cname, alias, 1, content_id)
        xattr.setxattr(
            chunk_path,
            'user.%s%s' % (CHUNK_XATTR_CONTENT_FULLPATH_PREFIX, chunk_id),
            fullpath)

        return chunk_path, container_id, content_id, chunk_id