def virtual_test(self):
        references = References()
        references[va].add('a.h')

        code = (
            'def virtual(settings):\n\tif(settings.os.family == "windows"):return "win"\n'
            '\telse: return "nix"')
        a = Resource(VirtualCell('user/blocka/a.h', code, {'win', 'nix'}))

        awin = Resource(SimpleCell('user/blocka/win/a.h'))
        anix = Resource(SimpleCell('user/blocka/nix/a.h'))
        b = Resource(SimpleCell('user/blockb/b.h'))
        d1 = Resource(SimpleCell('user/blockd/d.h'))
        awin.cell.dependencies.explicit.add(b.name)
        anix.cell.dependencies.explicit.add(d1.name)

        tables = {va: [vb, vd1], vb: [], vd1: []}
        api = FakeApi(zip([va, va, va, vb, vd1], [a, awin, anix, b, d1]),
                      tables)

        #With windows settings
        settings = Settings(OSInfo(OSFamily("Windows")))
        biiout = OutputStream()
        graph, closure, _ = build_closure(api, references, {}, settings,
                                          biiout)
        expected_graph = BlockVersionGraph()
        expected_graph.add_nodes([va, vb])
        expected_graph.add_edge(va, vb)
        self.assertEqual(expected_graph, graph)
        expected_closure = Closure({
            a.name: ClosureItem(a, va),
            awin.name: ClosureItem(awin, va),
            b.name: ClosureItem(b, vb),
        })
        self.assertEqual(expected_closure, closure)
        self.assertEqual("", str(biiout))

        #Change settings
        settings = Settings(OSInfo(OSFamily("Linux")))
        biiout = OutputStream()
        graph, closure, _ = build_closure(api, references, {}, settings,
                                          biiout)
        expected_graph = BlockVersionGraph()
        expected_graph.add_nodes([va, vd1])
        expected_graph.add_edge(va, vd1)
        self.assertEqual(expected_graph, graph)
        expected_closure = Closure({
            a.name: ClosureItem(a, va),
            anix.name: ClosureItem(anix, va),
            d1.name: ClosureItem(d1, vd1),
        })
        self.assertEqual(expected_closure, closure)
        self.assertEqual("", str(biiout))
    def dep_overwriten_in_blocks_test(self):
        """ Blocks: C, B (None version)
        Deps: A
        C -> A -> B
        """
        references = References()
        references[va].add('a.h')
        vbn = BlockVersion(vb.block, None)

        b = Resource(SimpleCell('user/blockb/b.h'))
        a = Resource(SimpleCell('user/blocka/a.h'))
        a2 = Resource(SimpleCell('user/blocka/a2.h'))
        a.cell.dependencies.explicit.add(a2.name)
        a2.cell.dependencies.explicit.add(b.name)

        tables = {va: [vb], vb: []}
        api = FakeApi(zip([va, va, vb], [a, a2, b]), tables)
        base_table = BlockVersionTable([vc, vbn])
        biiout = OutputStream()
        graph, closure, _ = build_closure(api,
                                          references,
                                          base_table,
                                          biiout=biiout)
        expected_graph = BlockVersionGraph()
        expected_graph.add_nodes([va])
        expected_graph.add_edge(va, vbn)
        self.assertEqual(expected_graph, graph)
        expected_closure = Closure({
            a.name: ClosureItem(a, va),
            a2.name: ClosureItem(a2, va)
        })
        self.assertEqual(expected_closure, closure)
        self.assertEqual("", str(biiout))
Exemple #3
0
    def test_has_main_and_dependency_declarations(self):
        processor = ParseProcessor()
        block_holder = mother.get_block_holder(['user/geom/main.cpp'], CPP)
        processor.do_process(block_holder, OutputStream())
        main = block_holder['main.cpp'].cell
        self.assertTrue(main.hasMain, 'Main method not detected by parse processor')
        self.check_dependency_set(main.dependencies, unresolved=['iostream', 'sphere.h'])

        # now remove #include
        load = block_holder['main.cpp'].content.load.bytes
        load = load.replace('#include "sphere.h"', '')
        block_holder.add_resource(Resource(SimpleCell('user/geom/main.cpp', CPP),
                                           Content('user/geom/main.cpp', Blob(load))))
        processor.do_process(block_holder, OutputStream())
        main = block_holder['main.cpp'].cell
        self.check_dependency_set(main.dependencies, unresolved=['iostream'])
    def simple_test(self):
        """ Blocks: C
        Deps: A, B
        C -> A -> B
        """
        references = References()
        references[va].add('a.h')
        base_table = BlockVersionTable(
            [vc, va])  # The result including or excluding va is same

        b = Resource(SimpleCell('user/blockb/b.h'))
        a = Resource(SimpleCell('user/blocka/a.h'))
        a2 = Resource(SimpleCell('user/blocka/a2.h'))
        a.cell.dependencies.explicit.add(a2.name)
        a2.cell.dependencies.explicit.add(b.name)

        tables = {va: [vb], vb: []}
        api = FakeApi(zip([va, va, vb], [a, a2, b]), tables)
        biiout = OutputStream()
        graph, closure, _ = build_closure(api,
                                          references,
                                          base_table,
                                          biiout=biiout)
        expected_graph = BlockVersionGraph()
        expected_graph.add_nodes([va, vb])
        expected_graph.add_edge(va, vb)
        self.assertEqual(expected_graph, graph)
        expected_closure = Closure({
            a.name: ClosureItem(a, va),
            a2.name: ClosureItem(a2, va),
            b.name: ClosureItem(b, vb)
        })
        self.assertEqual(expected_closure, closure)
        self.assertEqual("", str(biiout))
    def overwrite_test(self):
        """ Blocks: C (defines in requirements B2)
        Deps: A, B2
        C -> A -> B1
        """
        references = References()
        references[va].add('a.h')

        b = Resource(SimpleCell('user/blockb/b.h'))
        b2 = Resource(SimpleCell('user/blockb/b.h'), CPP)
        a = Resource(SimpleCell('user/blocka/a.h'))
        a2 = Resource(SimpleCell('user/blocka/a2.h'))
        a.cell.dependencies.explicit.add(a2.name)
        a2.cell.dependencies.explicit.add(b.name)

        tables = {va: [vb], vb: [], vb2: []}
        api = FakeApi(zip([va, va, vb, vb2], [a, a2, b, b2]), tables)
        base_table = BlockVersionTable([vc, va, vb2])  # Note B2 defined here
        biiout = OutputStream()
        graph, closure, _ = build_closure(api,
                                          references,
                                          base_table,
                                          biiout=biiout)
        expected_graph = BlockVersionGraph()
        expected_graph.add_nodes([va, vb2])
        expected_graph.add_edge(va, vb2)
        self.assertEqual(expected_graph, graph)
        expected_closure = Closure({
            a.name: ClosureItem(a, va),
            a2.name: ClosureItem(a2, va),
            b.name: ClosureItem(b2, vb2)
        })
        self.assertEqual(expected_closure, closure)
        self.assertEqual("", str(biiout))
Exemple #6
0
 def parse_virtual_test(self):
     response = OutputStream()
     cell = VirtualCell('usr/block/sort_controllers.py')
     resource = Resource(cell, None)
     self.assertFalse(resource.parse(response))
     self.assertIn(
         'You\'re trying to parse a virtual file: usr/block/sort_controllers.py',
         str(response))
Exemple #7
0
    def test_has_main(self):
        '''some basic negative tests, from snippets of code'''
        sources = {'user/block/body.cpp': main_body}
        block_holder = self._process_from_contents(sources)

        ParseProcessor().do_process(block_holder, OutputStream())

        self.assertTrue(block_holder._resources['body.cpp'].content.parser.
                        has_main_function())

        sources = {'user/block/body.cpp': no_main_body}
        block_holder = self._process_from_contents(sources)

        ParseProcessor().do_process(block_holder, OutputStream())

        self.assertFalse(block_holder._resources['body.cpp'].content.parser.
                         has_main_function())
Exemple #8
0
def process_holder(holder, processor):
    """This function performs common operation in processor test:
        - Process holder
        @return changes.result_changes and process response
    """

    biiout = OutputStream()
    processor.do_process(holder, biiout)
    return biiout
Exemple #9
0
 def __init__(self, ins=sys.stdin, out=None):
     '''
     Params:
         ins: input stream
         out: output stream, should have write method
     '''
     self._ins = ins
     if not out:
         out = OutputStream(sys.stdout)
     self._out = out
Exemple #10
0
    def test_basic_geom(self):
        block_cell_names = mother.make_folder_resources('dummy', 'virtual')
        self.block_holder = mother.get_block_holder(block_cell_names, CPP)

        VirtualConfigurationProcessor().do_process(self.block_holder,
                                                   OutputStream())
        self.assertEqual(8, len(self.block_holder.cell_names))

        self.check_virtual_resource('sphere.cpp')
        self.check_virtual_resource('sphere.h')
Exemple #11
0
    def test_large_cell_reject(self):
        self.load.binary = bytearray(BII_FILE_SIZE_LIMIT)
        files = {"user/block/file": (None, self.load)}

        biiout = OutputStream()
        changevalidator.remove_large_cells(files, biiout)
        self.assertEquals(0, len(files))
        self.assertEquals("WARN: File user/block/file is bigger "
                          "than %s: discarded\n" % BII_FILE_SIZE_LIMIT_STR,
                          str(biiout))
def launch():
    # Default MongoClient params are:
    # w=1  perform a write acknowledgement only in primary
    # j=False the driver does not add j to the getlasterror command
    # fsync=False the server does not add Sync to disk. to the getlasterror command
    mongo_connection = MongoClient(BII_MONGO_URI, max_pool_size=BII_MAX_MONGO_POOL_SIZE)
    migration_store = MigrationStore(mongo_connection)
    server_store = MongoServerStore(mongo_connection)
    biiout = OutputStream()
    manager = MigrationManager(migration_store, SERVER_MIGRATIONS, biiout)

    # Pass in kwargs all variables migrations can need
    n1 = time.time()
    manager.migrate(server_store=server_store)
    n2 = time.time()
    biiout.info('All took %s seconds' % str(n2 - n1))

    # DO NOT REMOVE THIS PRINT NOR REPLACE WITH LOGGER, ITS A CONSOLE SCRIPT
    # INVOKED IN DEPLOYMENT PROCESS AND ITS NECESSARY IT PRINTS TO OUTPUT
    print biiout
 def test_migrate_with_several_files(self):
     biiout = OutputStream()
     deleted = migrate_bii_config(all_files, biiout)
     self.assertEqual(deleted, ['user/block/bii/parents.bii'])
     self.assertIn('file.cpp + mydata.txt',
                   all_files['user/block/biicode.conf'])
     self.assertIn('john/smith: 3', all_files['user/block/biicode.conf'])
     self.assertIn('file.cpp + mydata.txt',
                   all_files['user/block/biicode.conf'])
     self.assertNotIn('mydata2.txt', all_files['user/block/biicode.conf'])
     self.assertNotIn('mydata3.txt', all_files['user/block/biicode.conf'])
Exemple #14
0
 def setUp(self):
     self.common = {
         "file1.h": "Content of file1.h\n",
         "file2.h": "Content of file2.h\n",
         "file3.h": "Content of file3.h\n",
         "file4.h": "Content of file4.h\n"
     }
     self._biiout = OutputStream()
     self.merger = SetThreeWayMergeText(base_name="base",
                                        other_name="other",
                                        biiout=self._biiout)
 def test_process_config_file_with_unknown_deps(self):
     my_conf = '''r1.h + r9.cpp'''
     block_holder = self._prepare_context(my_conf)
     block_holder[self.r1.cell_name].cell.dependencies.implicit.add(self.r2)
     changes = ProcessorChanges()
     biiout = OutputStream()
     self.processor.do_process(block_holder, changes, biiout)
     self.assertIn('There are no files matching pattern r9.cpp',
                   str(biiout))
     self.assertEqual(0, len(changes.upserted))
     r1 = block_holder[self.r1.cell_name].cell
     self.assertEqual({self.r2}, r1.dependencies.implicit)
Exemple #16
0
    def test_create_missing_simple_resources(self):
        resources = {'bii/virtual.bii': Resource(SimpleCell('user/block/bii/virtual.bii'),
                                                  Content(None, Blob(myConf1)))}
        self.block_holder = BlockHolder(BlockName('user/block'), resources)

        VirtualConfigurationProcessor().do_process(self.block_holder, OutputStream())

        self._sphere_os_checks('sphere.h')
        self._sphere_os_checks('sphere.cpp')

        self.assertEqual(None, self.block_holder['sphere.h'].content)
        self.assertEqual(None, self.block_holder['sphere.cpp'].content)
Exemple #17
0
 def test_process_config_file_with_unknown_deps(self):
     my_conf = '''r1.h + r9.cpp'''
     block_holder = self._prepare_context(my_conf)
     block_holder[self.r1.cell_name].cell.dependencies.implicit.add(self.r2)
     biiout = OutputStream()
     self.processor.do_process(block_holder, biiout)
     self.assertIn('There are no files matching pattern r9.cpp',
                   str(biiout))
     content = block_holder[self.r1.cell_name].content
     self.assertTrue(content.meta_updated)
     self.assertFalse(content.blob_updated)
     r1 = block_holder[self.r1.cell_name].cell
     self.assertEqual({self.r2}, r1.dependencies.implicit)
Exemple #18
0
    def test_no_compare(self):
        base = copy(self.common)
        other = self._make_resources({
            'user/block1/file1.h':
            "file1content@modified",
        })

        merger = BlobsMerger("user/block1#1", "user/block1#2", OutputStream())
        merger.merge_elements = Mock(
            side_effect=Exception("No item must be compared!"))
        ret = merger.merge(base, other, self.common)
        self.assertEquals(ret['user/block1/file1.h'].load,
                          "file1content@modified")
Exemple #19
0
    def test_size_reject_accept(self):
        self.load.binary = bytearray(BII_FILE_SIZE_LIMIT)
        load2 = Blob()
        load2.binary = bytearray(BII_FILE_SIZE_LIMIT - 1)
        files = {"user/block/filelarge":  (None, self.load),
                 "user/block/filesmall": (None, load2)}

        biiout = OutputStream()
        changevalidator.remove_large_cells(files, biiout)
        self.assertEquals(1, len(files))
        self.assertEquals("WARN: File user/block/filelarge is "
                          "bigger than %s: discarded\n" % BII_FILE_SIZE_LIMIT_STR,
                          str(biiout))
        self.assertIn("user/block/filesmall", files)
Exemple #20
0
    def test_add_item(self):
        c1 = Closure()
        r1 = Cell('user/block/name1')
        version = BlockVersion(BRLBlock('owner/user/block/branch'), 13)
        biiout = OutputStream()
        resource = Resource(r1, None)
        c1.add_item(resource, version, biiout)
        r2 = Cell('user/block/name1')
        r2.hasMain = True
        resource2 = Resource(r2, None)
        version2 = BlockVersion(BRLBlock('owner/user/block/branch'), 14)
        c1.add_item(resource2, version2, biiout)

        self.assertEqual(ClosureItem(resource, version), c1['user/block/name1'])
        self.assertIn('Incompatible dependency', str(biiout))
Exemple #21
0
 def python_parse_failure_test(self, parser):
     """ Weird bug miguel found.
     Python parser failure was causing 'You're trying to parse a virtual file' message to appear
     """
     response = OutputStream()
     parser.side_effect = Exception
     cell = SimpleCell('usr/block/sort_controllers.py', biitype=PYTHON)
     content = Content(id_=1,
                       load=Blob('print "hello"'),
                       parser=None,
                       is_parsed=False)
     resource = Resource(cell, content)
     self.assertFalse(resource.parse(response))
     self.assertIn('Error parsing usr/block/sort_controllers.py file',
                   str(response))
Exemple #22
0
    def test_with_compare(self):
        base = self._make_resources({'user/block1/file1.h': "@modified1"})
        other = self._make_resources({'user/block1/file1.h': "@modified2"})
        output = OutputStream()
        merger = BlobsMerger("user/block1#1", "user/block1#2", output)
        ret = merger.merge(base, other, self.common)
        self.assertEquals(
            ret['user/block1/file1.h'].text,
            '''<<<<<<<<<<<<<<<<<<<<<<<<< user/block1#1
@modified1
=========================
@modified2
>>>>>>>>>>>>>>>>>>>>>>>>> user/block1#2
''')
        self.assertIn("CONFLICT", str(output))
Exemple #23
0
    def test_higher_version_ok(self):

        server_info = ServerInfo(version="0.9",
                                 message='Hey!',
                                 last_compatible="0.5")
        self.biiapi.get_server_info = Mock(return_value=server_info)

        manager = UpdatesManager(self.store, self.biiapi, ClientVersion("1.0"))

        last_time = self._save_info(manager, server_info,
                                    datetime.timedelta(days=-365))

        biiout = OutputStream()
        manager.check_for_updates(biiout)
        self.assert_not_in_response(biiout,
                                    "There is a new version of biicode")
Exemple #24
0
    def test_with_binary_blobs(self):
        base = self._make_resources({
            'user/block1/file1.h': "@modified1",
        },
                                    is_binary=True)
        other = self._make_resources({
            'user/block1/file1.h': "@modified2",
        })

        output = OutputStream()
        merger = BlobsMerger("user/block1#1", "user/block1#2", output)
        merger.merge(base, other, self.common)
        self.assertIn("CONFLICT", str(output))
        self.assertIn("WARN: Can't merge binary contents, your file is keeped",
                      str(output))
        self.assertIn(
            'user/block1/file1.h: CONFLICT (modified/modified): Changed in '
            'user/block1#1 and changed in user/block1#2', str(output))
    def diamond_test(self, conflict):
        """ Blocks: C
        Deps: A, B, D1-D2
        C -> A, B; A->D1, B->D2
        """
        references = References()
        references[va].add('a.h')
        references[vb].add('b.h')

        b = Resource(SimpleCell('user/blockb/b.h'))
        a = Resource(SimpleCell('user/blocka/a.h'))
        d1 = Resource(SimpleCell('user/blockd/d.h'))
        if conflict:
            d2 = Resource(SimpleCell('user/blockd/d.h', CPP))
        else:
            d2 = Resource(SimpleCell('user/blockd/d.h'))
        a.cell.dependencies.explicit.add(d1.name)
        b.cell.dependencies.explicit.add(d2.name)

        tables = {va: [vd1], vb: [vd2], vd1: [], vd2: []}
        api = FakeApi(zip([va, vb, vd1, vd2], [a, b, d1, d2]), tables)
        base_table = BlockVersionTable([vc, va, vb])
        biiout = OutputStream()
        graph, closure, _ = build_closure(api,
                                          references,
                                          base_table,
                                          biiout=biiout)
        expected_graph = BlockVersionGraph()
        expected_graph.add_nodes([va, vb, vd1, vd2])
        expected_graph.add_edge(va, vd1)
        expected_graph.add_edge(vb, vd2)
        self.assertEqual(expected_graph, graph)
        self.assertEqual({a.name, b.name, d1.name}, set(closure.keys()))
        if conflict:
            self.assertIn('Incompatible dependency "user/blockd/d.h"',
                          str(biiout))
        else:
            self.assertEqual("", str(biiout))
Exemple #26
0
 def setUp(self):
     self.testuser = BRLUser('user')
     self.edition_api = TestEditionAPI()
     self.hive_manager = HiveManager(self.edition_api, None, OutputStream())
     self.block_name = BlockName('dummy/myblock')