3 # Copyright (C) 2013 Jérémie Galarneau <jeremie.galarneau@efficios.com>
5 # SPDX-License-Identifier: GPL-2.0-only
13 test_path
= os
.path
.dirname(os
.path
.abspath(__file__
)) + "/"
14 test_utils_path
= test_path
16 test_utils_path
= os
.path
.dirname(test_utils_path
)
17 test_utils_path
= test_utils_path
+ "/utils"
18 sys
.path
.append(test_utils_path
)
19 from test_utils
import *
24 print("1..{0}".format(NR_TESTS
))
26 # Check if a sessiond is running... bail out if none found.
27 if session_daemon_alive() == 0:
28 bail("No sessiond running. Please make sure you are running this test with the \"run\" shell script and verify that the lttng tools are properly installed.")
30 session_info
= create_session()
31 enable_ust_tracepoint_event(session_info
, "ust_tests_fork*")
32 start_session(session_info
)
34 fork_process
= subprocess
.Popen([test_path
+ "fork", test_path
+ "fork2"], stdout
=subprocess
.PIPE
, stderr
=subprocess
.PIPE
)
37 for line
in fork_process
.stdout
:
38 line
= line
.decode('utf-8').replace("\n", "")
39 match
= re
.search(r
"child_pid (\d+)", line
)
41 child_pid
= match
.group(1)
42 match
= re
.search(r
"parent_pid (\d+)", line
)
44 parent_pid
= match
.group(1)
48 print_test_result(fork_process
.returncode
== 0, current_test
, "Fork test application exited normally")
51 stop_session(session_info
)
53 # Check both events (normal exit and suicide messages) are present in the resulting trace
55 babeltrace_process
= subprocess
.Popen(["babeltrace", session_info
.trace_path
], stdout
=subprocess
.PIPE
, stderr
=subprocess
.PIPE
)
56 except FileNotFoundError
:
57 bail("Could not open babeltrace. Please make sure it is installed.", session_info
)
60 for event_line
in babeltrace_process
.stdout
:
61 event_line
= event_line
.decode('utf-8').replace("\n", "")
62 if re
.search(r
"warning", event_line
) is not None or re
.search(r
"error", event_line
) is not None:
63 print( "# " + event_line
)
65 event_lines
.append(event_line
)
67 babeltrace_process
.wait()
69 print_test_result(babeltrace_process
.returncode
== 0, current_test
, "Resulting trace is readable")
72 if babeltrace_process
.returncode
!= 0:
73 bail("Unreadable trace; can't proceed with analysis.", session_info
)
75 event_before_fork
= False
76 event_after_fork_parent
= False
77 event_after_fork_child
= False
78 event_after_exec
= False
80 for event_line
in event_lines
:
81 match
= re
.search(r
".*pid = (\d+)", event_line
)
83 event_pid
= match
.group(1)
87 if re
.search(r
"before_fork", event_line
):
88 event_before_fork
= (event_pid
== parent_pid
)
89 if re
.search(r
"after_fork_parent", event_line
):
90 event_after_fork_parent
= (event_pid
== parent_pid
)
91 if re
.search(r
"after_fork_child", event_line
):
92 event_after_fork_child
= (event_pid
== child_pid
)
93 if re
.search(r
"after_exec", event_line
):
94 event_after_exec
= (event_pid
== child_pid
)
96 print_test_result(event_before_fork
, current_test
, "before_fork event logged by parent process found in trace")
98 print_test_result(event_after_fork_parent
, current_test
, "after_fork_parent event logged by parent process found in trace")
100 print_test_result(event_after_fork_child
, current_test
, "after_fork_child event logged by child process found in trace")
102 print_test_result(event_after_exec
, current_test
, "after_exec event logged by child process found in trace")
105 shutil
.rmtree(session_info
.tmp_directory
)
This page took 0.031916 seconds and 4 git commands to generate.