def test_trace(tmp_path): call_graph = CallGraph() setup = Setup() trace_controller = TraceController() with create_test_binary(tmp_path) as app: setup.initialize_binary(app) setup.setup_function_to_trace(app, 'func1') setup.setup_function_to_trace(app, 'func2') setup.setup_function_to_trace(app, 'func3') setup.add_parameter(app, 'func1', '1', '%s') setup.add_parameter(app, 'func1', '2', '%s') setup.add_parameter(app, 'func2', '1', '%d') trace_controller.start_trace(setup.generate_bcc_args(), call_graph) # start monitoring time.sleep(5) # BCC trace needs a bit of time to setup subprocess.run(app) # run monitored application trace_controller.stop_trace() # stop edges = convert_edges_to_cytoscape_format(call_graph.get_nodes(), call_graph.get_edges()) nodes = convert_nodes_to_cytoscape_format(call_graph.get_nodes(), call_graph.get_edges()) assert_results(nodes, edges)
def test_generate_bcc_args_with_multiple_values(self): setup = Setup() setup._setup = { 'app1': { 'func1': { 'mangled': 'mangled1', 'traced': True, 'parameters': { 4: '%s', 2: '%d' } }, 'func2': { 'mangled': 'mangled2', 'traced': False, 'parameters': {} } }, 'app2': { 'func3': { 'mangled': 'mangled3', 'traced': True, 'parameters': { 1: '%s', 5: '%d' } }, 'func4': { 'mangled': 'mangled4', 'traced': True, 'parameters': { 1: '%s', 2: '%f' } } } } result = setup.generate_bcc_args() expected = [ 'app1:mangled1 "%s %d", arg4, arg2', 'app2:mangled3 "%s %d", arg1, arg5', 'app2:mangled4 "%s %f", arg1, arg2', ] self.assertEqual(result, expected)