def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.test_dir = self.conf['sds_path'] rawx_num, rawx_path, rawx_addr = self.get_service_url('rawx') self.rawx = 'http://' + rawx_addr self.h = hashlib.new('md5') conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = random_str(8) self.container_c.container_create(self.account, self.ref) self.url_rand = random_id(64) self.data = random_str(1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent(random_str(6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name(self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = { "hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url } chunk_meta = { 'content_path': self.content.path, 'container_id': self.content.id_container, 'chunk_method': 'plain/nb_copy=3', 'policy': 'TESTPOLICY', 'id': '0000', 'version': 1, 'chunk_id': self.chunk.id_chunk, 'chunk_pos': self.chunk.pos, 'chunk_hash': self.chunk.md5, } self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = self.test_dir + '/data/' + self.namespace + \ '-rawx-1/' + self.chunk.id_chunk[0:3] + "/" + self.chunk.id_chunk self.bad_container_id = '0' * 64
def test_audit(self): chunk = random.choice(self.chunks) chunk_volume = chunk['url'].split('/')[2] chunk_id = chunk['url'].split('/')[3] auditor = BlobAuditorWorker(self.conf, None, self.rawx_volumes[chunk_volume]) auditor.chunk_audit(self._chunk_path(chunk), chunk_id)
def test_audit_old_chunk(self): for c in self.chunks: convert_to_old_chunk( self._chunk_path(c), self.account, self.container, self.path, self.version, self.content_id) chunk = random.choice(self.chunks) chunk_volume = chunk['url'].split('/')[2] chunk_id = chunk['url'].split('/')[3] auditor = BlobAuditorWorker(self.conf, None, self.rawx_volumes[chunk_volume]) auditor.chunk_audit(self._chunk_path(chunk), chunk_id)
def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.test_dir = self.conf['sds_path'] self.chars = string.ascii_lowercase + string.ascii_uppercase +\ string.digits self.chars_id = string.digits + 'ABCDEF' self.rawx = 'http://' + self.conf["rawx"][0]['addr'] self.h = hashlib.new('md5') conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = rand_generator(self.chars, 8) self.container_c.container_create(self.account, self.ref) self.url_rand = rand_generator(self.chars_id, 64) self.data = rand_generator(self.chars, 1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent( rand_generator(self.chars, 6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name( self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = {"hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url} chunk_meta = {'content_size': self.content.size, 'content_chunksnb': self.content.nb_chunks, 'content_path': self.content.path, 'content_cid': self.content.id_container, 'content_mimetype': 'application/octet-stream', 'content_chunkmethod': 'bytes', 'content_policy': 'TESTPOLICY', 'content_id': '0000', 'content_version': 1, 'chunk_id': self.chunk.id_chunk, 'chunk_pos': self.chunk.pos} self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = self.test_dir + '/data/NS-rawx-1/' +\ self.chunk.id_chunk[0:2] + "/" + self.chunk.id_chunk self.bad_container_id = '0'*64
def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf["namespace"] self.account = self.conf["account"] self.test_dir = self.conf["sds_path"] rawx_num, rawx_path, rawx_addr = self.get_service_url("rawx") self.rawx = "http://" + rawx_addr self.h = hashlib.new("md5") conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = random_str(8) self.container_c.container_create(self.account, self.ref) self.url_rand = random_id(64) self.data = random_str(1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent(random_str(6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name(self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = {"hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url} chunk_meta = { "content_path": self.content.path, "container_id": self.content.id_container, "chunk_method": "plain/nb_copy=3", "policy": "TESTPOLICY", "id": "0000", "version": 1, "chunk_id": self.chunk.id_chunk, "chunk_pos": self.chunk.pos, "chunk_hash": self.chunk.md5, } self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = ( self.test_dir + "/data/" + self.namespace + "-rawx-1/" + self.chunk.id_chunk[0:3] + "/" + self.chunk.id_chunk ) self.bad_container_id = "0" * 64
def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.test_dir = self.conf['sds_path'] rawx_num, rawx_path, rawx_addr = self.get_service_url('rawx') self.rawx = 'http://' + rawx_addr self.h = hashlib.new('md5') conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = random_str(8) self.container_c.container_create(self.account, self.ref) self.url_rand = random_id(64) self.data = random_str(1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent( random_str(6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name( self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = {"hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url} chunk_meta = {'content_path': self.content.path, 'container_id': self.content.id_container, 'content_chunkmethod': 'plain/nb_copy=3', 'content_policy': 'TESTPOLICY', 'content_id': '0000', 'content_version': 1, 'chunk_id': self.chunk.id_chunk, 'chunk_pos': self.chunk.pos} self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = self.test_dir + '/data/' + self.namespace + \ '-rawx-1/' + self.chunk.id_chunk[0:3] + "/" + self.chunk.id_chunk self.bad_container_id = '0'*64
def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.ref = random_str(8) _, rawx_loc, rawx_addr, rawx_uuid = \ self.get_service_url('rawx') self.rawx_id = 'http://' + (rawx_uuid if rawx_uuid else rawx_addr) self.auditor = BlobAuditorWorker(self.conf, get_logger(None), None) self.container_client = ContainerClient(self.conf) self.blob_client = BlobClient(conf=self.conf) self.container_client.container_create(self.account, self.ref) self.content = TestContent(self.account, self.ref) self.chunk = TestChunk(self.content.cid, self.content.path, self.content.version, self.storage_policy, self.rawx_id, rawx_loc, self.content.size, self.content.hash) chunk_meta = { 'container_id': self.content.cid, 'content_path': self.content.path, 'version': self.content.version, 'id': self.content.id, 'full_path': self.content.fullpath, 'chunk_method': 'plain/nb_copy=3', 'policy': self.storage_policy, 'chunk_id': self.chunk.id, 'chunk_pos': self.chunk.pos, 'chunk_hash': self.chunk.metachunk_hash, 'chunk_size': self.chunk.metachunk_size, 'metachunk_hash': self.chunk.metachunk_hash, 'metachunk_size': self.chunk.metachunk_size, 'oio_version': OIO_VERSION } self.blob_client.chunk_put(self.chunk.url, chunk_meta, self.content.data)
class TestBlobAuditorFunctional(BaseTestCase): def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.test_dir = self.conf['sds_path'] rawx_num, rawx_path, rawx_addr = self.get_service_url('rawx') self.rawx = 'http://' + rawx_addr self.h = hashlib.new('md5') conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = random_str(8) self.container_c.container_create(self.account, self.ref) self.url_rand = random_id(64) self.data = random_str(1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent(random_str(6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name(self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = { "hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url } chunk_meta = { 'content_path': self.content.path, 'container_id': self.content.id_container, 'chunk_method': 'plain/nb_copy=3', 'policy': 'TESTPOLICY', 'id': '0000', 'version': 1, 'chunk_id': self.chunk.id_chunk, 'chunk_pos': self.chunk.pos, 'chunk_hash': self.chunk.md5, 'full_path': ['%s/%s/%s' % (self.account, self.ref, self.content.path)], 'oio_version': OIO_VERSION } self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = self.test_dir + '/data/' + self.namespace + \ '-rawx-1/' + self.chunk.id_chunk[0:3] + "/" + self.chunk.id_chunk self.bad_container_id = '0' * 64 def tearDown(self): super(TestBlobAuditorFunctional, self).tearDown() try: self.container_c.content_delete(self.account, self.ref, self.content.path) except Exception: pass try: self.container_c.container_destroy(self.account, self.ref) except Exception: pass try: os.remove(self.chunk_path) except Exception: pass def init_content(self): self.container_c.content_create(self.account, self.ref, self.content.path, self.chunk.size, self.hash_rand, data=[self.chunk_proxy]) def test_chunk_audit(self): self.init_content() self.auditor.chunk_audit(self.chunk_path) def test_content_deleted(self): self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_container_deleted(self): self.container_c.container_delete(self.account, self.ref) self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_corrupted(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(random_str(1280)) self.assertRaises(exc.CorruptedChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_size(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(random_str(320)) self.assertRaises(exc.FaultyChunk, 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_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_content_path(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.' + chunk_xattr_keys['content_path'], 'WRONG_PATH') self.assertRaises(exc.OrphanChunk, 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_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_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_chunk_bad_hash(self): self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.chunk.md5 = self.hash_rand self.chunk_proxy['hash'] = self.chunk.md5 self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_length(self): self.chunk.size = 320 self.chunk_proxy['size'] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_chunk_size(self): self.chunk.size = 320 self.chunk_proxy['size'] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_url(self): self.chunk_proxy['url'] = '%s/WRONG_ID' % self.rawx self.init_content() self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path)
class TestBlobAuditorFunctional(BaseTestCase): def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.test_dir = self.conf['sds_path'] self.chars = string.ascii_lowercase + string.ascii_uppercase +\ string.digits self.chars_id = string.digits + 'ABCDEF' self.rawx = 'http://' + self.conf["rawx"][0]['addr'] self.h = hashlib.new('md5') conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = rand_generator(self.chars, 8) self.container_c.container_create(self.account, self.ref) self.url_rand = rand_generator(self.chars_id, 64) self.data = rand_generator(self.chars, 1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent( rand_generator(self.chars, 6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name( self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = {"hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url} chunk_meta = {'content_size': self.content.size, 'content_chunksnb': self.content.nb_chunks, 'content_path': self.content.path, 'content_cid': self.content.id_container, 'content_id': '0000', 'content_version': 1, 'chunk_id': self.chunk.id_chunk, 'chunk_pos': self.chunk.pos} self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = self.test_dir + '/data/NS-rawx-1/' +\ self.chunk.id_chunk[0:2] + "/" + self.chunk.id_chunk self.bad_container_id = '0'*64 def tearDown(self): super(TestBlobAuditorFunctional, self).tearDown() try: self.container_c.content_delete( self.account, self.ref, self.content.path) except Exception: pass try: self.container_c.container_destroy(self.account, self.ref) except Exception: pass try: os.remove(self.chunk_path) except Exception: pass def init_content(self): self.container_c.content_create( self.account, self.ref, self.content.path, self.chunk.size, self.hash_rand, data=[self.chunk_proxy]) def test_chunk_audit(self): self.init_content() self.auditor.chunk_audit(self.chunk_path) def test_content_deleted(self): self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_container_deleted(self): self.container_c.container_destroy(self.account, self.ref) self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_corrupted(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(rand_generator(self.chars, 1280)) self.assertRaises(exc.CorruptedChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_size(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(rand_generator(self.chars, 320)) self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_content_nbchunk(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.content.nbchunk', '42') self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_chunk_size(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.chunk.size', '-1') self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_chunk_hash(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.chunk.hash', 'WRONG_HASH') self.assertRaises(exc.CorruptedChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_content_size(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.content.size', '-1') self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_content_path(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.content.path', 'WRONG_PATH') self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_chunk_id(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.chunk.id', 'WRONG_ID') self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_content_container(self): self.init_content() xattr.setxattr( self.chunk_path, 'user.grid.content.container', self.bad_container_id) self.assertRaises(exc.OrphanChunk, 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') self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_hash(self): self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.chunk.md5 = self.hash_rand self.chunk_proxy['hash'] = self.chunk.md5 self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_length(self): self.chunk.size = 320 self.chunk_proxy['size'] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_chunk_size(self): self.chunk.size = 320 self.chunk_proxy['size'] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_url(self): self.chunk_proxy['url'] = '%s/WRONG_ID' % self.rawx self.init_content() self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_content_bad_path(self): self.content.path = 'BAD_PATH' self.init_content() self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path)
def test_audit_linked_chunk(self): self.api.object_link( self.account, self.container, self.path, self.account, self.container, self.path + '.link') chunk = random.choice(self.chunks) chunk_volume = chunk['url'].split('/')[2] chunk_id = chunk['url'].split('/')[3] chunk_path = self._chunk_path(chunk) auditor = BlobAuditorWorker(self.conf, None, self.rawx_volumes[chunk_volume]) auditor.chunk_audit(chunk_path, chunk_id) linked_meta, linked_chunks = self.api.object_locate( self.account, self.container, self.path + '.link') self.assertNotEqual(self.content_id, linked_meta['id']) linked_chunk = random.choice(linked_chunks) linked_chunk_id = linked_chunk['url'].split('/')[3] linked_chunk_path = self._chunk_path(linked_chunk) auditor.chunk_audit(linked_chunk_path, linked_chunk_id) auditor.chunk_audit(chunk_path, chunk_id) copy_chunk(chunk_path, chunk_path + '.copy') auditor.chunk_audit(chunk_path + '.copy', chunk_id) self.api.object_delete( self.account, self.container, self.path) auditor.chunk_audit(linked_chunk_path, linked_chunk_id) self.assertRaises(OrphanChunk, auditor.chunk_audit, chunk_path + '.copy', chunk_id)
def test_audit_with_versioning(self): self.api.container_set_properties( self.account, self.container, system={'sys.m2.policy.version': '2'}) self.api.object_create( self.account, self.container, obj_name=self.path, data="version") chunk = random.choice(self.chunks) chunk_volume = chunk['url'].split('/')[2] chunk_id = chunk['url'].split('/')[3] chunk_path = self._chunk_path(chunk) auditor = BlobAuditorWorker(self.conf, None, self.rawx_volumes[chunk_volume]) auditor.chunk_audit(chunk_path, chunk_id) versioned_meta, versioned_chunks = self.api.object_locate( self.account, self.container, self.path) self.assertNotEqual(self.content_id, versioned_meta['id']) versioned_chunk = random.choice(versioned_chunks) versioned_chunk_volume = versioned_chunk['url'].split('/')[2] versioned_chunk_id = versioned_chunk['url'].split('/')[3] versioned_chunk_path = self._chunk_path(versioned_chunk) versioned_auditor = BlobAuditorWorker( self.conf, None, self.rawx_volumes[versioned_chunk_volume]) versioned_auditor.chunk_audit(versioned_chunk_path, versioned_chunk_id) auditor.chunk_audit(chunk_path, chunk_id) copy_chunk(chunk_path, chunk_path + '.copy') auditor.chunk_audit(chunk_path + '.copy', chunk_id) self.api.object_delete( self.account, self.container, self.path, version=self.version) versioned_auditor.chunk_audit(versioned_chunk_path, versioned_chunk_id) self.assertRaises(OrphanChunk, auditor.chunk_audit, chunk_path + '.copy', chunk_id)
def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.test_dir = self.conf['sds_path'] self.chars = string.ascii_lowercase + string.ascii_uppercase +\ string.digits self.chars_id = string.digits + 'ABCDEF' self.rawx = 'http://' + self.conf["rawx"][0]['addr'] self.h = hashlib.new('md5') conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = rand_generator(self.chars, 8) self.container_c.container_create(self.account, self.ref) self.url_rand = rand_generator(self.chars_id, 64) self.data = rand_generator(self.chars, 1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent(rand_generator(self.chars, 6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name(self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = { "hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url } chunk_meta = { 'content_size': self.content.size, 'content_chunksnb': self.content.nb_chunks, 'content_path': self.content.path, 'content_cid': self.content.id_container, 'content_mimetype': 'application/octet-stream', 'content_chunkmethod': 'bytes', 'content_policy': 'TESTPOLICY', 'content_id': '0000', 'content_version': 1, 'chunk_id': self.chunk.id_chunk, 'chunk_pos': self.chunk.pos } self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = self.test_dir + '/data/' + self.namespace + \ '-rawx-1/' + self.chunk.id_chunk[0:3] + "/" + self.chunk.id_chunk self.bad_container_id = '0' * 64
class TestBlobAuditorFunctional(BaseTestCase): def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.test_dir = self.conf['sds_path'] self.chars = string.ascii_lowercase + string.ascii_uppercase +\ string.digits self.chars_id = string.digits + 'ABCDEF' self.rawx = 'http://' + self.conf["rawx"][0]['addr'] self.h = hashlib.new('md5') conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = rand_generator(self.chars, 8) self.container_c.container_create(self.account, self.ref) self.url_rand = rand_generator(self.chars_id, 64) self.data = rand_generator(self.chars, 1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent(rand_generator(self.chars, 6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name(self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = { "hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url } chunk_meta = { 'content_size': self.content.size, 'content_chunksnb': self.content.nb_chunks, 'content_path': self.content.path, 'content_cid': self.content.id_container, 'content_mimetype': 'application/octet-stream', 'content_chunkmethod': 'bytes', 'content_policy': 'TESTPOLICY', 'content_id': '0000', 'content_version': 1, 'chunk_id': self.chunk.id_chunk, 'chunk_pos': self.chunk.pos } self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = self.test_dir + '/data/' + self.namespace + \ '-rawx-1/' + self.chunk.id_chunk[0:3] + "/" + self.chunk.id_chunk self.bad_container_id = '0' * 64 def tearDown(self): super(TestBlobAuditorFunctional, self).tearDown() try: self.container_c.content_delete(self.account, self.ref, self.content.path) except Exception: pass try: self.container_c.container_destroy(self.account, self.ref) except Exception: pass try: os.remove(self.chunk_path) except Exception: pass def init_content(self): self.container_c.content_create(self.account, self.ref, self.content.path, self.chunk.size, self.hash_rand, data=[self.chunk_proxy]) def test_chunk_audit(self): self.init_content() self.auditor.chunk_audit(self.chunk_path) def test_content_deleted(self): self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_container_deleted(self): self.container_c.container_destroy(self.account, self.ref) self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_corrupted(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(rand_generator(self.chars, 1280)) self.assertRaises(exc.CorruptedChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_size(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(rand_generator(self.chars, 320)) self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_content_nbchunk(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.content.nbchunk', '42') self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_chunk_size(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.chunk.size', '-1') self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_chunk_hash(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.chunk.hash', 'WRONG_HASH') self.assertRaises(exc.CorruptedChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_content_size(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.content.size', '-1') self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_content_path(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.content.path', 'WRONG_PATH') self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_chunk_id(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.chunk.id', 'WRONG_ID') self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_xattr_bad_content_container(self): self.init_content() xattr.setxattr(self.chunk_path, 'user.grid.content.container', self.bad_container_id) self.assertRaises(exc.OrphanChunk, 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') self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_hash(self): self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.chunk.md5 = self.hash_rand self.chunk_proxy['hash'] = self.chunk.md5 self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_length(self): self.chunk.size = 320 self.chunk_proxy['size'] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_chunk_size(self): self.chunk.size = 320 self.chunk_proxy['size'] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_url(self): self.chunk_proxy['url'] = '%s/WRONG_ID' % self.rawx self.init_content() self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_content_bad_path(self): self.content.path = 'BAD_PATH' self.init_content() self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path)
class TestBlobAuditorFunctional(BaseTestCase): def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.ref = random_str(8) _, rawx_loc, rawx_addr, rawx_uuid = \ self.get_service_url('rawx') self.rawx_id = 'http://' + (rawx_uuid if rawx_uuid else rawx_addr) self.auditor = BlobAuditorWorker(self.conf, get_logger(None), None) self.container_client = ContainerClient(self.conf) self.blob_client = BlobClient(conf=self.conf) self.container_client.container_create(self.account, self.ref) self.content = TestContent(self.account, self.ref) self.chunk = TestChunk(self.rawx_id, rawx_loc, self.content.size, self.content.hash) chunk_meta = { 'container_id': self.content.cid, 'content_path': self.content.path, 'version': self.content.version, 'id': self.content.id, 'full_path': self.content.fullpath, 'chunk_method': 'plain/nb_copy=3', 'policy': 'TESTPOLICY', 'chunk_id': self.chunk.id, 'chunk_pos': self.chunk.pos, 'chunk_hash': self.chunk.metachunk_hash, 'chunk_size': self.chunk.metachunk_size, 'metachunk_hash': self.chunk.metachunk_hash, 'metachunk_size': self.chunk.metachunk_size, 'oio_version': OIO_VERSION } self.blob_client.chunk_put(self.chunk.url, chunk_meta, self.content.data) def tearDown(self): super(TestBlobAuditorFunctional, self).tearDown() try: self.container_client.content_delete(self.account, self.ref, self.content.path) except Exception: pass try: self.container_client.container_delete(self.account, self.ref) except Exception: pass try: os.remove(self.chunk.path) except Exception: pass def init_content(self): chunk_proxy = { "url": self.chunk.url, "pos": str(self.chunk.pos), "hash": self.chunk.metachunk_hash, "size": self.chunk.metachunk_size } self.container_client.content_create(self.account, self.ref, self.content.path, version=int(time.time() * 1000000), content_id=self.content.id, size=self.content.size, checksum=self.content.hash, data={'chunks': [chunk_proxy]}, stgpol="SINGLE") def test_chunk_audit(self): self.init_content() self.auditor.chunk_audit(self.chunk.path, self.chunk.id) def test_content_deleted(self): self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk.path, self.chunk.id) def test_container_deleted(self): self.container_client.container_delete(self.account, self.ref) self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk.path, self.chunk.id) def test_chunk_corrupted(self): self.init_content() with open(self.chunk.path, "wb") as outf: outf.write(os.urandom(1280)) self.assertRaises(exc.CorruptedChunk, self.auditor.chunk_audit, self.chunk.path, self.chunk.id) def test_chunk_bad_chunk_size(self): self.init_content() with open(self.chunk.path, "wb") as outf: outf.write(os.urandom(320)) exc_class = (exc.FaultyChunk, exc.CorruptedChunk) self.assertRaises(exc_class, self.auditor.chunk_audit, self.chunk.path, self.chunk.id) 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_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_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 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).encode('utf-8')) self.assertRaises(exc.OrphanChunk, 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').encode('utf-8')) self.assertRaises(exc.OrphanChunk, 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_chunk_bad_meta2_metachunk_size(self): self.content.size = 320 self.chunk.metachunk_size = 320 self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk.path, self.chunk.id) def test_chunk_bad_meta2_metachunk_hash(self): self.chunk.metachunk_hash = '0123456789ABCDEF0123456789ABCDEF' self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk.path, self.chunk.id) def test_chunk_bad_meta2_chunk_url(self): self.chunk.url = '%s/0123456789ABCDEF' % self.rawx_id self.init_content() self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk.path, self.chunk.id)
class TestBlobAuditorFunctional(BaseTestCase): def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf['namespace'] self.account = self.conf['account'] self.test_dir = self.conf['sds_path'] rawx_num, rawx_path, rawx_addr = self.get_service_url('rawx') self.rawx = 'http://' + rawx_addr self.h = hashlib.new('md5') conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = random_str(8) self.container_c.container_create(self.account, self.ref) self.url_rand = random_id(64) self.data = random_str(1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent( random_str(6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name( self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = {"hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url} chunk_meta = {'content_path': self.content.path, 'container_id': self.content.id_container, 'content_chunkmethod': 'plain/nb_copy=3', 'content_policy': 'TESTPOLICY', 'content_id': '0000', 'content_version': 1, 'chunk_id': self.chunk.id_chunk, 'chunk_pos': self.chunk.pos} self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = self.test_dir + '/data/' + self.namespace + \ '-rawx-1/' + self.chunk.id_chunk[0:3] + "/" + self.chunk.id_chunk self.bad_container_id = '0'*64 def tearDown(self): super(TestBlobAuditorFunctional, self).tearDown() try: self.container_c.content_delete( self.account, self.ref, self.content.path) except Exception: pass try: self.container_c.container_destroy(self.account, self.ref) except Exception: pass try: os.remove(self.chunk_path) except Exception: pass def init_content(self): self.container_c.content_create( self.account, self.ref, self.content.path, self.chunk.size, self.hash_rand, data=[self.chunk_proxy]) def test_chunk_audit(self): self.init_content() self.auditor.chunk_audit(self.chunk_path) def test_content_deleted(self): self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_container_deleted(self): self.container_c.container_destroy(self.account, self.ref) self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_corrupted(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(random_str(1280)) self.assertRaises(exc.CorruptedChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_size(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(random_str(320)) self.assertRaises(exc.FaultyChunk, 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_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_content_path(self): self.init_content() xattr.setxattr( self.chunk_path, 'user.' + chunk_xattr_keys['content_path'], 'WRONG_PATH') self.assertRaises(exc.OrphanChunk, 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_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_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_chunk_bad_hash(self): self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.chunk.md5 = self.hash_rand self.chunk_proxy['hash'] = self.chunk.md5 self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_length(self): self.chunk.size = 320 self.chunk_proxy['size'] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_chunk_size(self): self.chunk.size = 320 self.chunk_proxy['size'] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_url(self): self.chunk_proxy['url'] = '%s/WRONG_ID' % self.rawx self.init_content() self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path)
class TestBlobAuditorFunctional(BaseTestCase): def setUp(self): super(TestBlobAuditorFunctional, self).setUp() self.namespace = self.conf["namespace"] self.account = self.conf["account"] self.test_dir = self.conf["sds_path"] rawx_num, rawx_path, rawx_addr = self.get_service_url("rawx") self.rawx = "http://" + rawx_addr self.h = hashlib.new("md5") conf = {"namespace": self.namespace} self.auditor = BlobAuditorWorker(conf, get_logger(None), None) self.container_c = ContainerClient(conf) self.blob_c = BlobClient() self.ref = random_str(8) self.container_c.container_create(self.account, self.ref) self.url_rand = random_id(64) self.data = random_str(1280) self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.content = TestContent(random_str(6), len(self.data), self.url_rand, 1) self.content.id_container = cid_from_name(self.account, self.ref).upper() self.chunk = TestChunk(self.content.size, self.url_rand, 0, self.hash_rand) self.chunk_url = "%s/%s" % (self.rawx, self.chunk.id_chunk) self.chunk_proxy = {"hash": self.chunk.md5, "pos": "0", "size": self.chunk.size, "url": self.chunk_url} chunk_meta = { "content_path": self.content.path, "container_id": self.content.id_container, "chunk_method": "plain/nb_copy=3", "policy": "TESTPOLICY", "id": "0000", "version": 1, "chunk_id": self.chunk.id_chunk, "chunk_pos": self.chunk.pos, "chunk_hash": self.chunk.md5, } self.blob_c.chunk_put(self.chunk_url, chunk_meta, self.data) self.chunk_path = ( self.test_dir + "/data/" + self.namespace + "-rawx-1/" + self.chunk.id_chunk[0:3] + "/" + self.chunk.id_chunk ) self.bad_container_id = "0" * 64 def tearDown(self): super(TestBlobAuditorFunctional, self).tearDown() try: self.container_c.content_delete(self.account, self.ref, self.content.path) except Exception: pass try: self.container_c.container_destroy(self.account, self.ref) except Exception: pass try: os.remove(self.chunk_path) except Exception: pass def init_content(self): self.container_c.content_create( self.account, self.ref, self.content.path, self.chunk.size, self.hash_rand, data=[self.chunk_proxy] ) def test_chunk_audit(self): self.init_content() self.auditor.chunk_audit(self.chunk_path) def test_content_deleted(self): self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_container_deleted(self): self.container_c.container_destroy(self.account, self.ref) self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_corrupted(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(random_str(1280)) self.assertRaises(exc.CorruptedChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_size(self): self.init_content() with open(self.chunk_path, "w") as f: f.write(random_str(320)) self.assertRaises(exc.FaultyChunk, 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_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_content_path(self): self.init_content() xattr.setxattr(self.chunk_path, "user." + chunk_xattr_keys["content_path"], "WRONG_PATH") self.assertRaises(exc.OrphanChunk, 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_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_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_chunk_bad_hash(self): self.h.update(self.data) self.hash_rand = self.h.hexdigest().lower() self.chunk.md5 = self.hash_rand self.chunk_proxy["hash"] = self.chunk.md5 self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_length(self): self.chunk.size = 320 self.chunk_proxy["size"] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_chunk_size(self): self.chunk.size = 320 self.chunk_proxy["size"] = self.chunk.size self.init_content() self.assertRaises(exc.FaultyChunk, self.auditor.chunk_audit, self.chunk_path) def test_chunk_bad_url(self): self.chunk_proxy["url"] = "%s/WRONG_ID" % self.rawx self.init_content() self.assertRaises(exc.OrphanChunk, self.auditor.chunk_audit, self.chunk_path)