Ejemplo n.º 1
0
def get_big_graph(int_id):
    """Generate a big graph."""

    graph = LibdepsGraph()
    graph.graph['build_dir'] = '.'
    graph.graph['graph_schema_version'] = 2
    graph.graph['deptypes'] = json.dumps({
        "Global": 0,
        "Public": 1,
        "Private": 2,
        "Interface": 3,
    })
    graph.graph['git_hash'] = f'BIG{int_id.zfill(4)}'
    num_nodes = 200
    for i in range(num_nodes):
        add_node(graph, f'lib{i}.so', 'SharedLibrary')
        for j in range(num_nodes - i):
            add_edge(graph,
                     f'lib{i}.so',
                     f'lib{j}.so',
                     direct=True,
                     visibility=graph.get_deptype('Public'),
                     symbols='\n'.join(
                         [f"RandomString{i+j}" * 100 for i in range(10)]))
    return graph
Ejemplo n.º 2
0
def get_double_diamond_mock_graph():
    """Construct a mock graph which covers a double diamond structure."""

    graph = LibdepsGraph()
    graph.graph['build_dir'] = '.'
    graph.graph['graph_schema_version'] = 2
    graph.graph['deptypes'] = '''{
        "Global": 0,
        "Public": 1,
        "Private": 2,
        "Interface": 3,
        "Typeinfo": 4
    }'''

    # builds a graph of mostly public edges that looks like this:
    #
    #
    #                  /lib3.so               /lib7.so
    #                 |       \              |       \
    # <-lib1.so--lib2.so       lib5.so--lib6.so       lib9.so
    #                 |       /              |       /
    #                  \lib4.so               \lib8.so
    #

    add_node(graph, 'lib1.so', 'SharedLibrary')
    add_node(graph, 'lib2.so', 'SharedLibrary')
    add_node(graph, 'lib3.so', 'SharedLibrary')
    add_node(graph, 'lib4.so', 'SharedLibrary')
    add_node(graph, 'lib5.so', 'SharedLibrary')
    add_node(graph, 'lib6.so', 'SharedLibrary')
    add_node(graph, 'lib7.so', 'SharedLibrary')
    add_node(graph, 'lib8.so', 'SharedLibrary')
    add_node(graph, 'lib9.so', 'SharedLibrary')

    add_edge(graph,
             'lib1.so',
             'lib2.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib2.so',
             'lib3.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib2.so',
             'lib4.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib3.so',
             'lib5.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib4.so',
             'lib5.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib5.so',
             'lib6.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib6.so',
             'lib7.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib6.so',
             'lib8.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib7.so',
             'lib9.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib8.so',
             'lib9.so',
             direct=True,
             visibility=graph.get_deptype('Public'))

    # trans for 3 and 4
    add_edge(graph,
             'lib1.so',
             'lib3.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib1.so',
             'lib4.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 5
    add_edge(graph,
             'lib1.so',
             'lib5.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib2.so',
             'lib5.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 6
    add_edge(graph,
             'lib1.so',
             'lib6.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib2.so',
             'lib6.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib3.so',
             'lib6.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib4.so',
             'lib6.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 7
    add_edge(graph,
             'lib1.so',
             'lib7.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib2.so',
             'lib7.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib3.so',
             'lib7.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib4.so',
             'lib7.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib5.so',
             'lib7.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 8
    add_edge(graph,
             'lib1.so',
             'lib8.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib2.so',
             'lib8.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib3.so',
             'lib8.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib4.so',
             'lib8.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib5.so',
             'lib8.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 9
    add_edge(graph,
             'lib1.so',
             'lib9.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib2.so',
             'lib9.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib3.so',
             'lib9.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib4.so',
             'lib9.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib5.so',
             'lib9.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib6.so',
             'lib9.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    return graph
Ejemplo n.º 3
0
def get_basic_mock_graph():
    """Construct a mock graph which covers most cases and is easy to understand."""

    graph = LibdepsGraph()
    graph.graph['build_dir'] = '.'
    graph.graph['graph_schema_version'] = 2
    graph.graph['deptypes'] = '''{
        "Global": 0,
        "Public": 1,
        "Private": 2,
        "Interface": 3,
        "Typeinfo": 4
    }'''

    # builds a graph of mostly public edges:
    #
    #                         /-lib5.so
    #                  /lib3.so
    #                 |       \-lib6.so
    # <-lib1.so--lib2.so
    #                 |       /-lib5.so (private)
    #                  \lib4.so
    #                         \-lib6.so

    # nodes
    add_node(graph, 'lib1.so', 'SharedLibrary')
    add_node(graph, 'lib2.so', 'SharedLibrary')
    add_node(graph, 'lib3.so', 'SharedLibrary')
    add_node(graph, 'lib4.so', 'SharedLibrary')
    add_node(graph, 'lib5.so', 'SharedLibrary')
    add_node(graph, 'lib6.so', 'SharedLibrary')

    # direct edges
    add_edge(graph,
             'lib1.so',
             'lib2.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib2.so',
             'lib3.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib2.so',
             'lib4.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib4.so',
             'lib6.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib3.so',
             'lib5.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib3.so',
             'lib6.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib4.so',
             'lib5.so',
             direct=True,
             visibility=graph.get_deptype('Private'))

    # trans for 3
    add_edge(graph,
             'lib1.so',
             'lib3.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 4
    add_edge(graph,
             'lib1.so',
             'lib4.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 5
    add_edge(graph,
             'lib2.so',
             'lib5.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib1.so',
             'lib5.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 6
    add_edge(graph,
             'lib2.so',
             'lib6.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'lib1.so',
             'lib6.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    return graph
Ejemplo n.º 4
0
def get_simple_directory_graph():
    """Construct a mock graph which covers most cases and is easy to understand."""

    graph = LibdepsGraph()
    graph.graph['build_dir'] = '.'
    graph.graph['graph_schema_version'] = 2
    graph.graph['deptypes'] = json.dumps({
        "Global": 0,
        "Public": 1,
        "Private": 2,
        "Interface": 3,
    })
    graph.graph['git_hash'] = 'TEST004'

    #        lib2.so <- lib4.so
    #       /∧     \∨
    # lib1.so     prog1 <- lib5.so
    #       \∨     /∧
    #        lib3.so -> prog2

    # nodes
    add_node(graph, 'mongo/base/lib1.so', 'SharedLibrary')
    add_node(graph, 'mongo/base/lib2.so', 'SharedLibrary')
    add_node(graph, 'mongo/db/lib3.so', 'SharedLibrary')
    add_node(graph, 'third_party/lib4.so', 'SharedLibrary')
    add_node(graph, 'third_party/lib5.so', 'SharedLibrary')
    add_node(graph, 'mongo/base/prog1', 'Program')
    add_node(graph, 'mongo/db/prog2', 'Program')

    # direct edges
    add_edge(graph,
             'mongo/base/lib1.so',
             'mongo/base/lib2.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'mongo/base/lib1.so',
             'mongo/db/lib3.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'mongo/base/lib2.so',
             'mongo/base/prog1',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'mongo/db/lib3.so',
             'mongo/base/prog1',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'mongo/db/lib3.so',
             'mongo/db/prog2',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'third_party/lib4.so',
             'mongo/base/lib2.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'third_party/lib5.so',
             'mongo/base/prog1',
             direct=True,
             visibility=graph.get_deptype('Public'))

    return graph
Ejemplo n.º 5
0
def get_basic_mock_directory_graph():
    """Construct a mock graph which covers most cases and is easy to understand."""

    graph = LibdepsGraph()
    graph.graph['build_dir'] = '.'
    graph.graph['graph_schema_version'] = 2
    graph.graph['deptypes'] = json.dumps({
        "Global": 0,
        "Public": 1,
        "Private": 2,
        "Interface": 3,
    })
    graph.graph['git_hash'] = 'TEST003'

    # builds a graph of mostly public edges:
    #
    #                    /-lib5.so
    #               /lib3
    #              |     \-lib6.so
    # <-lib1.so--lib2
    #              |       /-lib5.so (private)
    #               \lib4.so
    #                      \-lib6.so

    # nodes
    add_node(graph, 'dir1/lib1.so', 'SharedLibrary')
    add_node(graph, 'dir1/sub1/lib2', 'Program')
    add_node(graph, 'dir1/sub1/lib3', 'Program')
    add_node(graph, 'dir1/sub2/lib4.so', 'SharedLibrary')
    add_node(graph, 'dir2/lib5.so', 'SharedLibrary')
    add_node(graph, 'dir2/lib6.so', 'SharedLibrary')

    # direct edges
    add_edge(graph,
             'dir1/lib1.so',
             'dir1/sub1/lib2',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'dir1/sub1/lib2',
             'dir1/sub1/lib3',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'dir1/sub1/lib2',
             'dir1/sub2/lib4.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'dir1/sub2/lib4.so',
             'dir2/lib6.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'dir1/sub1/lib3',
             'dir2/lib5.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'dir1/sub1/lib3',
             'dir2/lib6.so',
             direct=True,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'dir1/sub2/lib4.so',
             'dir2/lib5.so',
             direct=True,
             visibility=graph.get_deptype('Private'))

    # trans for 3
    add_edge(graph,
             'dir1/lib1.so',
             'dir1/sub1/lib3',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 4
    add_edge(graph,
             'dir1/lib1.so',
             'dir1/sub2/lib4.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 5
    add_edge(graph,
             'dir1/sub1/lib2',
             'dir2/lib5.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'dir1/lib1.so',
             'dir2/lib5.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    # trans for 6
    add_edge(graph,
             'dir1/sub1/lib2',
             'dir2/lib6.so',
             direct=False,
             visibility=graph.get_deptype('Public'))
    add_edge(graph,
             'dir1/lib1.so',
             'dir2/lib6.so',
             direct=False,
             visibility=graph.get_deptype('Public'))

    return graph