def test_compute_request(self): files = {self.block_name + 'main.cpp': '#include "user2/block/sphere.h"'} self.hive_manager.process(None, files) find_request, unresolved = self.hive_manager.hive_holder.find_request(Policy.default()) self.assertIn(CPPDeclaration('user2/block/sphere.h'), find_request.unresolved) self.assertEqual(unresolved, set())
def test_find_two_files_at_a_time(self): """Starts with one include, finds it, then two more includes, finish when all are found. Found items are taken into account in FindRequest.existing """ NUM_FILES = 10 brl_a = BRLBlock('%s/%s/%s/master' % (self.user, self.user, 'blocka')) names_a = [ BlockCellName(self.user + "/blocka/a%d.h" % i) for i in range(NUM_FILES) ] resources_info = {"a%d.h" % i: ("a", []) for i in range(NUM_FILES)} publisher = TestPublisher(self.user, self.store) publisher.publish(brl_a, resources_info) # Use the same request object, to accumulate existing (already found) files request = FinderRequest() request.policy = Policy.default() version = BlockVersion(brl_a, 0) # The version is always the same for i in range(0, NUM_FILES, 2): declaration1 = CPPDeclaration(names_a[i]) declaration2 = CPPDeclaration(names_a[i + 1]) request.unresolved = {declaration1, declaration2} result = self.service.find(request, BiiResponse()) self.check_result(result, resolved=[(brl_a, 0, {names_a[i], names_a[i + 1]})]) # The found one is added to the existing, for next iteration request.existing[version][declaration1] = {names_a[i]} request.existing[version][declaration2] = {names_a[i + 1]} self.assertEqual(len(request.existing[version]), i + 2)
def test_find_two_files_at_a_time(self): """Starts with one include, finds it, then two more includes, finish when all are found. Found items are taken into account in FindRequest.existing """ NUM_FILES = 10 brl_a = BRLBlock('%s/%s/%s/master' % (self.user, self.user, 'blocka')) names_a = [BlockCellName(self.user + "/blocka/a%d.h" % i) for i in range(NUM_FILES)] resources_info = {"a%d.h" % i: ("a", []) for i in range(NUM_FILES)} publisher = TestPublisher(self.user, self.store) publisher.publish(brl_a, resources_info) # Use the same request object, to accumulate existing (already found) files request = FinderRequest() request.policy = Policy.default() version = BlockVersion(brl_a, 0) # The version is always the same for i in range(0, NUM_FILES, 2): declaration1 = CPPDeclaration(names_a[i]) declaration2 = CPPDeclaration(names_a[i + 1]) request.unresolved = {declaration1, declaration2} result = self.service.find(request, BiiResponse()) self.check_result(result, resolved=[(brl_a, 0, {names_a[i], names_a[i + 1]})]) # The found one is added to the existing, for next iteration request.existing[version][declaration1] = {names_a[i]} request.existing[version][declaration2] = {names_a[i + 1]} self.assertEqual(len(request.existing[version]), i + 2)
def test_finder_request_unresolved(self): f = FinderRequest() f.unresolved = set([CPPDeclaration("iostream.h"), CPPDeclaration("math.h")]) f.policy = Policy.default() s = f.serialize() f2 = FinderRequest.deserialize(s) self.assertEqual(f, f2)
def test_no_unresolved_to_local(self): files = {self.block_name + 'main.cpp': '#include "dummy/myblock/sphere.h"'} self.hive_manager.process(None, files) find_request, unresolved = self.hive_manager.hive_holder.find_request(Policy.default()) self.assertEqual(set(), find_request.unresolved) self.assertEqual(unresolved, {CPPDeclaration("dummy/myblock/sphere.h")})
def _unresolvedDependencyRequest(self, unresolved_deps): request = FinderRequest() unresolved = set() for dep in unresolved_deps: unresolved.add(CPPDeclaration(dep)) request.unresolved = unresolved request.policy = Policy.default() return request
def test_finder_request_unresolved(self): f = FinderRequest() f.unresolved = set( [CPPDeclaration("iostream.h"), CPPDeclaration("math.h")]) f.policy = Policy.default() s = f.serialize() f2 = FinderRequest.deserialize(s) self.assertEqual(f, f2)
def build_update_request(self, block_version, block_cell_name): request = FinderRequest() existing = ReferencedDependencies() existing[block_version][CPPDeclaration(block_cell_name)].add(block_cell_name) request.existing = existing request.policy = Policy.default() request.find = False request.update = True return request
def build_update_request(self, block_version, block_cell_name): request = FinderRequest() existing = ReferencedDependencies() existing[block_version][CPPDeclaration(block_cell_name)].add( block_cell_name) request.existing = existing request.policy = Policy.default() request.find = False request.update = True return request
def build_unresolved_request(self, unresolved_deps): if isinstance(unresolved_deps, basestring): unresolved_deps = [unresolved_deps] request = FinderRequest() unresolved = set() for dep in unresolved_deps: unresolved.add(CPPDeclaration(dep)) request.unresolved = unresolved request.policy = Policy.default() return request
def find(self, policy=None, **find_args): # Imports are local, cause only used in this function, avoid loading modules for # every execution from biicode.common.find import find_manager from biicode.common.find.policy import Policy policy = policy or Policy.default() hive_holder = self.hive_holder return find_manager.find(self._biiapi, hive_holder, self._biiout, policy, **find_args)
def test_no_unresolved_to_local(self): files = { self.block_name + 'main.cpp': '#include "dummy/myblock/sphere.h"' } self.hive_manager.process(None, files) find_request, unresolved = self.hive_manager.hive_holder.find_request( Policy.default()) self.assertEqual(set(), find_request.unresolved) self.assertEqual(unresolved, {CPPDeclaration("dummy/myblock/sphere.h")})
def test_compute_request(self): files = { self.block_name + 'main.cpp': '#include "user2/block/sphere.h"' } self.hive_manager.process(None, files) find_request, unresolved = self.hive_manager.hive_holder.find_request( Policy.default()) self.assertIn(CPPDeclaration('user2/block/sphere.h'), find_request.unresolved) self.assertEqual(unresolved, set())
def find(auth_user, bson_data, response): service = BiiService(app.store, auth_user) # TODO: Remove this try except when next incompatible version try: finder_request = FinderRequest.deserialize(bson_data["data"]) except KeyError: # Keep some retro-compatibility with old policies format bson_data["data"][FinderRequest.SERIAL_POLICY] = Policy.default().serialize() finder_request = FinderRequest.deserialize(bson_data["data"]) response.warn("Detected deprecated policy format (version < 2.7)," "discarding them. Update biicode!") return service.find(finder_request, response)
def test_fiunder_request_existing(self): f = FinderRequest() self.assertFalse(f) existing = ReferencedDependencies() version = BlockVersion('user/user/block/master', 1) existing[version][CPPDeclaration("file.h")].add(CellName("file.h")) f.existing = existing f.update = True f.policy = Policy.default() #print f s = f.serialize() #print s f2 = FinderRequest.deserialize(s) self.assertEquals(f, f2) self.assertTrue(f2)