tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test.py (1237B)


      1 # 'test' is provided by the calling script.
      2 # flake8: noqa: F821
      3 
      4 test.compile("source.cpp")
      5 test.run_analysis_script("gcTypes")
      6 
      7 info = test.load_typeInfo()
      8 
      9 gcFunctions = test.load_gcFunctions()
     10 
     11 f = "void f(int32)"
     12 g = "void g(int32)"
     13 h = "void h(int32)"
     14 
     15 assert f in gcFunctions
     16 assert g in gcFunctions
     17 assert h in gcFunctions
     18 assert "void leaf()" not in gcFunctions
     19 assert "void nonrecursive_root()" in gcFunctions
     20 
     21 callgraph = test.load_callgraph()
     22 assert callgraph.calleeGraph[f][g]
     23 assert callgraph.calleeGraph[f][h]
     24 assert callgraph.calleeGraph[g][f]
     25 assert callgraph.calleeGraph[g][h]
     26 
     27 node = [f"void n{i}(int32)" for i in range(10)]
     28 mnode = [callgraph.unmangledToMangled.get(f) for f in node]
     29 for src, dst in [
     30    (1, 2),
     31    (2, 1),
     32    (4, 5),
     33    (5, 4),
     34    (2, 3),
     35    (5, 3),
     36    (3, 6),
     37    (6, 7),
     38    (7, 8),
     39    (8, 7),
     40    (8, 9),
     41 ]:
     42    assert callgraph.calleeGraph[node[src]][node[dst]]
     43 
     44 funcInfo = test.load_funcInfo()
     45 rroots = set([
     46    callgraph.mangledToUnmangled[f]
     47    for f in funcInfo
     48    if funcInfo[f].get("recursive_root")
     49 ])
     50 assert len(set([node[1], node[2]]) & rroots) == 1
     51 assert len(set([node[4], node[5]]) & rroots) == 1
     52 assert len(rroots) == 4, f"rroots = {rroots}"  # n1, n4, f, self_recursive