def test00_base(self): ks = FileBasedSecurityManager(CLIENT_KS_PATH, PASSWD) DataBlock.SECURITY_MANAGER = ks DataBlock.LOCK_MANAGER = DBLocksManager() remove_dir(tmp('smart_file_test')) os.makedirs(tmp('smart_file_test/dynamic_cache')) os.makedirs(tmp('smart_file_test/static_cache')) db_cache = DataBlockCache(tmp('smart_file_test'), user_id=sha1('test').hexdigest()) md = MetadataFile(db_cache.get_static_cache_path('test_md.bin')) tr_manager = None try: tr_manager = TransactionsManager(md, db_cache) p_queue = tr_manager.get_upload_queue() g_queue = tr_manager.get_download_queue() SmartFileObject.setup_transaction_manager(tr_manager) e_file = SmartFileObject('/empty_file', for_write=True) e_file.close() e_file = SmartFileObject('/empty_file') data = e_file.read() self.assertEqual(data, '') e_file.close() test_file = SmartFileObject('/test.file', for_write=True) test_file.write('this is test message for one data block!') test_file.close() put_obj = p_queue.get(False) transaction, seek = put_obj self.assertEqual(seek, 0) data_block, next_seek, _ = transaction.get_data_block(seek, noclone=True) self.assertNotEqual(data_block, None) self.assertEqual(next_seek, None) data_block.close() tr_manager.update_transaction(transaction.get_id(), seek, is_failed=False, foreign_name='%040x'%123456) self.assertEqual(transaction.get_status(), Transaction.TS_FINISHED) db_path = '%s.%s'%(transaction.get_id(), seek) self.assertFalse(DataBlock.is_locked(db_cache.get_cache_path(db_path))) test_file = SmartFileObject('/test.file') data = test_file.read(4) self.assertEqual(data, 'this') self.assertTrue(DataBlock.is_locked(db_cache.get_cache_path(db_path))) data = test_file.read() self.assertEqual(data, ' is test message for one data block!') test_file.close() self.assertFalse(DataBlock.is_locked(db_cache.get_cache_path(db_path))) with self.assertRaises(Empty): get_obj = g_queue.get(False) mgt = MockedGetThread(g_queue) mgt.start() open(db_cache.get_cache_path(db_path), 'w').write('invalid data') #failed local data block test_file = SmartFileObject('/test.file') data = test_file.read() self.assertEqual(data, 'this is test message for one data block!') test_file.close() db_cache.clear_all() test_file = SmartFileObject('/test.file') data = test_file.read() self.assertEqual(data, 'this is test message for one data block!') test_file.close() self.assertFalse(DataBlock.is_locked(db_cache.get_cache_path('%040x'%123456))) finally: if tr_manager: g_queue.put((None,None)) tr_manager.close() md.close() db_cache.stop()