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.
24 test_path
= os
.path
.dirname(os
.path
.abspath(__file__
)) + "/"
25 test_utils_path
= test_path
27 test_utils_path
= os
.path
.dirname(test_utils_path
)
28 test_utils_path
= test_utils_path
+ "/utils"
29 sys
.path
.append(test_utils_path
)
30 from test_utils
import *
33 normal_exit_message
= "exit-fast tracepoint normal exit"
34 suicide_exit_message
= "exit-fast tracepoint suicide"
37 print("1..{0}".format(NR_TESTS
))
39 # Check if a sessiond is running... bail out if none found.
40 if session_daemon_alive() == 0:
41 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.")
43 session_info
= create_session()
44 enable_ust_tracepoint_event(session_info
, "ust_tests_exitfast*")
45 start_session(session_info
)
47 test_env
= os
.environ
.copy()
48 test_env
["LTTNG_UST_REGISTER_TIMEOUT"] = "-1"
50 exit_fast_process
= subprocess
.Popen(test_path
+ "exit-fast", stdout
=subprocess
.DEVNULL
, stderr
=subprocess
.DEVNULL
, env
=test_env
)
51 exit_fast_process
.wait()
53 print_test_result(exit_fast_process
.returncode
== 0, current_test
, "Test application exited normally")
56 exit_fast_process
= subprocess
.Popen([test_path
+ "exit-fast", "suicide"], stdout
=subprocess
.DEVNULL
, stderr
=subprocess
.DEVNULL
, env
=test_env
)
57 exit_fast_process
.wait()
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(["babeltrace", session_info
.trace_path
], stdout
=subprocess
.PIPE
, stderr
=subprocess
.PIPE
)
64 except FileNotFoundError
:
65 bail("Could not open babeltrace. Please make sure it is installed.")
68 for event_line
in babeltrace_process
.stdout
:
69 event_line
= event_line
.decode('utf-8').replace("\n", "")
70 event_lines
.append(event_line
)
71 babeltrace_process
.wait()
73 print_test_result(babeltrace_process
.returncode
== 0, current_test
, "Resulting trace is readable")
76 if babeltrace_process
.returncode
!= 0:
77 bail("Unreadable trace; can't proceed with analysis.")
79 print_test_result(len(event_lines
) == 2, current_test
, "Correct number of events found in resulting trace")
82 if len(event_lines
) != 2:
83 bail("Unexpected number of events found in resulting trace (" + session_info
.trace_path
+ ")." )
85 match
= re
.search(r
".*message = \"(.*)\"", event_lines[0])
86 print_test_result(match is not None and match.group(1) == normal_exit_message, current_test,\
87 "Tracepoint message generated during normal exit run
is present
in trace
and has the expected value
")
90 match = re.search(r".*message
= \"(.*)\"", event_lines[1])
91 print_test_result(match is not None and match.group(1) == suicide_exit_message, current_test,\
92 "Tracepoint message generated during suicide run
is present
in trace
and has the expected value
")
95 shutil.rmtree(session_info.tmp_directory)