3 # Copyright (C) - 2013 Jérémie Galarneau <jeremie.galarneau@efficios.com>
5 # This program is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License, version 2 only, as
7 # published by the Free Software Foundation.
9 # This program is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 # You should have received a copy of the GNU General Public License along with
15 # this program; if not, write to the Free Software Foundation, Inc., 51
16 # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 test_path
= os
.path
.dirname(os
.path
.abspath(__file__
)) + "/"
26 test_utils_path
= test_path
28 test_utils_path
= os
.path
.dirname(test_utils_path
)
29 test_utils_path
= test_utils_path
+ "/utils"
30 sys
.path
.append(test_utils_path
)
31 from test_utils
import *
36 print("1..{0}".format(NR_TESTS
))
38 # Check if a sessiond is running... bail out if none found.
39 if session_daemon_alive() == 0:
40 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.")
42 session_info
= create_session()
43 enable_ust_tracepoint_event(session_info
, "*")
44 start_session(session_info
)
49 daemon_process
= subprocess
.Popen(test_path
+ "daemon", stdout
=subprocess
.PIPE
)
50 for line
in daemon_process
.stdout
:
51 name
, pid
= line
.decode('utf-8').split()
52 if name
== "child_pid":
54 if name
== "parent_pid":
57 daemon_process_return_code
= daemon_process
.wait()
59 if parent_pid
is None or daemon_pid
is None:
60 bail("Unexpected output received from daemon test executable." + str(daemon_process_output
))
62 print_test_result(daemon_process_return_code
== 0, current_test
, "Successful call to daemon() and normal exit")
65 if daemon_process_return_code
!= 0:
66 bail("Could not trigger tracepoints successfully. Abandoning test.")
68 stop_session(session_info
)
71 babeltrace_process
= subprocess
.Popen(["babeltrace", session_info
.trace_path
], stdout
=subprocess
.PIPE
)
72 except FileNotFoundError
:
73 bail("Could not open babeltrace. Please make sure it is installed.")
75 before_daemon_event_found
= False
76 before_daemon_event_pid
= -1
77 after_daemon_event_found
= False
78 after_daemon_event_pid
= -1
80 for event_line
in babeltrace_process
.stdout
:
81 event_line
= event_line
.decode('utf-8').replace("\n", "")
83 if re
.search(r
"before_daemon", event_line
) is not None:
84 if before_daemon_event_found
:
85 bail("Multiple instances of the before_daemon event found. Please make sure only one instance of this test is runnning.")
86 before_daemon_event_found
= True
87 match
= re
.search(r
"(?<=pid = )\d+", event_line
)
90 before_daemon_event_pid
= int(match
.group(0))
92 if re
.search(r
"after_daemon", event_line
) is not None:
93 if after_daemon_event_found
:
94 bail("Multiple instances of the after_daemon event found. Please make sure only one instance of this test is runnning.")
95 after_daemon_event_found
= True
96 match
= re
.search(r
"(?<=pid = )\d+", event_line
)
99 after_daemon_event_pid
= int(match
.group(0))
100 babeltrace_process
.wait()
102 print_test_result(babeltrace_process
.returncode
== 0, current_test
, "Resulting trace is readable")
105 if babeltrace_process
.returncode
!= 0:
106 bail("Unreadable trace; can't proceed with analysis.")
108 print_test_result(before_daemon_event_found
, current_test
, "before_daemon event found in resulting trace")
110 print_test_result(before_daemon_event_pid
== parent_pid
, current_test
, "Parent pid reported in trace is correct")
112 print_test_result(before_daemon_event_found
, current_test
, "after_daemon event found in resulting trace")
114 print_test_result(after_daemon_event_pid
== daemon_pid
, current_test
, "Daemon pid reported in trace is correct")
117 shutil
.rmtree(session_info
.tmp_directory
)