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:
29 '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.'
32 session_info
= create_session()
33 enable_ust_tracepoint_event(session_info
, "ust_tests_fork*")
34 start_session(session_info
)
36 fork_process
= subprocess
.Popen(
37 [test_path
+ "fork", test_path
+ "fork2"],
38 stdout
=subprocess
.PIPE
,
39 stderr
=subprocess
.PIPE
,
43 for line
in fork_process
.stdout
:
44 line
= line
.decode("utf-8").replace("\n", "")
45 match
= re
.search(r
"child_pid (\d+)", line
)
47 child_pid
= match
.group(1)
48 match
= re
.search(r
"parent_pid (\d+)", line
)
50 parent_pid
= match
.group(1)
55 fork_process
.returncode
== 0, current_test
, "Fork test application exited normally"
59 stop_session(session_info
)
61 # Check both events (normal exit and suicide messages) are present in the resulting trace
63 babeltrace_process
= subprocess
.Popen(
64 [BABELTRACE_BIN
, session_info
.trace_path
],
65 stdout
=subprocess
.PIPE
,
66 stderr
=subprocess
.PIPE
,
68 except FileNotFoundError
:
69 bail("Could not open {}. Please make sure it is installed.".format(BABELTRACE_BIN
))
72 for event_line
in babeltrace_process
.stdout
:
73 event_line
= event_line
.decode("utf-8").replace("\n", "")
75 re
.search(r
"warning", event_line
) is not None
76 or re
.search(r
"error", event_line
) is not None
78 print("# " + event_line
)
80 event_lines
.append(event_line
)
82 babeltrace_process
.wait()
85 babeltrace_process
.returncode
== 0, current_test
, "Resulting trace is readable"
89 if babeltrace_process
.returncode
!= 0:
90 bail("Unreadable trace; can't proceed with analysis.", session_info
)
92 event_before_fork
= False
93 event_after_fork_parent
= False
94 event_after_fork_child
= False
95 event_after_exec
= False
97 for event_line
in event_lines
:
98 match
= re
.search(r
".*pid = (\d+)", event_line
)
100 event_pid
= match
.group(1)
104 if re
.search(r
"before_fork", event_line
):
105 event_before_fork
= event_pid
== parent_pid
106 if re
.search(r
"after_fork_parent", event_line
):
107 event_after_fork_parent
= event_pid
== parent_pid
108 if re
.search(r
"after_fork_child", event_line
):
109 event_after_fork_child
= event_pid
== child_pid
110 if re
.search(r
"after_exec", event_line
):
111 event_after_exec
= event_pid
== child_pid
116 "before_fork event logged by parent process found in trace",
120 event_after_fork_parent
,
122 "after_fork_parent event logged by parent process found in trace",
126 event_after_fork_child
,
128 "after_fork_child event logged by child process found in trace",
134 "after_exec event logged by child process found in trace",
138 shutil
.rmtree(session_info
.tmp_directory
)
This page took 0.078944 seconds and 5 git commands to generate.