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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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
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
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