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
)
46 daemon_process
= subprocess
.Popen(test_path
+ "daemon", stdout
=subprocess
.PIPE
)
47 daemon_process_return_code
= daemon_process
.wait()
49 daemon_process_output
= daemon_process
.communicate()[0]
50 daemon_process_output
= daemon_process_output
.decode('utf-8').splitlines()
52 print_test_result(daemon_process_return_code
== 0, current_test
, "Successful call to daemon() and normal exit")
55 if daemon_process_return_code
!= 0:
56 bail("Could not trigger tracepoints successfully. Abondoning test.")
58 stop_session(session_info
)
60 if len(daemon_process_output
) != 2:
61 bail("Unexpected output received from daemon test executable." + str(daemon_process_output
))
63 parent_pid
= re
.search(r
"\d+", daemon_process_output
[0]).group(0)
64 daemon_pid
= re
.search(r
"\d+", daemon_process_output
[1]).group(0)
67 babeltrace_process
= subprocess
.Popen(["babeltrace", session_info
.trace_path
], stdout
=subprocess
.PIPE
)
68 except FileNotFoundError
:
69 bail("Could not open babeltrace. Please make sure it is installed.")
71 before_daemon_event_found
= False
72 before_daemon_event_pid
= -1
73 after_daemon_event_found
= False
74 after_daemon_event_pid
= -1
76 for event_line
in babeltrace_process
.stdout
:
77 event_line
= event_line
.decode('utf-8').replace("\n", "")
79 if re
.search(r
"before_daemon", event_line
) is not None:
80 if before_daemon_event_found
:
81 bail("Multiple instances of the before_daemon event found. Please make sure only one instance of this test is runnning.")
82 before_daemon_event_found
= True
83 match
= re
.search(r
"(?<=pid = )\d+", event_line
)
86 before_daemon_event_pid
= match
.group(0)
88 if re
.search(r
"after_daemon", event_line
) is not None:
89 if after_daemon_event_found
:
90 bail("Multiple instances of the after_daemon event found. Please make sure only one instance of this test is runnning.")
91 after_daemon_event_found
= True
92 match
= re
.search(r
"(?<=pid = )\d+", event_line
)
95 after_daemon_event_pid
= match
.group(0)
96 babeltrace_process
.wait()
98 print_test_result(babeltrace_process
.returncode
== 0, current_test
, "Resulting trace is readable")
101 if babeltrace_process
.returncode
!= 0:
102 bail("Unreadable trace; can't proceed with analysis.")
104 print_test_result(before_daemon_event_found
, current_test
, "before_daemon event found in resulting trace")
106 print_test_result(before_daemon_event_pid
== parent_pid
, current_test
, "Parent pid reported in trace is correct")
108 print_test_result(before_daemon_event_found
, current_test
, "after_daemon event found in resulting trace")
110 print_test_result(after_daemon_event_pid
== daemon_pid
, current_test
, "Daemon pid reported in trace is correct")
113 shutil
.rmtree(session_info
.tmp_directory
)