3 # Copyright (C) - 2014 Geneviève Bastien <gbastien@versatic.net>
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 *
34 print("1..{0}".format(NR_TESTS
))
36 # Check if a sessiond is running... bail out if none found.
37 if session_daemon_alive() == 0:
38 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.")
40 session_info
= create_session()
41 enable_ust_tracepoint_event(session_info
, "ust_tests_td*")
42 start_session(session_info
)
44 test_env
= os
.environ
.copy()
45 test_env
["LTTNG_UST_REGISTER_TIMEOUT"] = "-1"
47 td_process
= subprocess
.Popen(test_path
+ "type-declarations", stdout
=subprocess
.PIPE
, stderr
=subprocess
.PIPE
, env
=test_env
)
49 if sys
.version_info
>= (3, 3):
52 except TimeoutExpired
:
54 bail("Failed to run type-declarations test application.")
58 print_test_result(td_process
.returncode
== 0, current_test
, "Test application exited normally")
61 stop_session(session_info
)
63 # Check event fields using type declarations are present
65 babeltrace_process
= subprocess
.Popen(["babeltrace", session_info
.trace_path
], stdout
=subprocess
.PIPE
, stderr
=subprocess
.PIPE
)
66 except FileNotFoundError
:
67 bail("Could not open babeltrace. Please make sure it is installed.")
70 for event_line
in babeltrace_process
.stdout
:
71 event_line
= event_line
.decode('utf-8').replace("\n", "")
72 event_lines
.append(event_line
)
73 babeltrace_process
.wait()
75 print_test_result(babeltrace_process
.returncode
== 0, current_test
, "Resulting trace is readable")
78 if babeltrace_process
.returncode
!= 0:
79 bail("Unreadable trace; can't proceed with analysis.")
81 print_test_result(len(event_lines
) == 4, current_test
, "Correct number of events found in resulting trace")
84 if len(event_lines
) != 4:
85 bail("Unexpected number of events found in resulting trace (" + session_info
.trace_path
+ ")." )
87 match
= re
.search(r
".*ust_tests_td:(.*):.*enumfield = \( \"(.*)\" :.*enumfield_bis
= \
( \"(.*)\" :.*enumfield_third
= .*:.*", event_lines[0])
88 print_test_result(match is not None and match.group(1) == "tptest
", current_test,\
89 "First tracepoint
is present
")
92 print_test_result(match is not None and match.group(2) == "zero
", current_test,\
93 "First tracepoint
's enum value maps to zero")
96 print_test_result(match is not None and match.group(3) == "one", current_test,\
97 "First tracepoint's second enum value maps to one
")
100 match = re.search(r".*ust_tests_td
:(.*):.*enumfield
= \
( \"(.*)\" :.*", event_lines[1])
101 print_test_result(match is not None and match.group(1) == "tptest_bis
", current_test,\
102 "Second tracepoint
is present
")
105 print_test_result(match is not None and match.group(2) == "zero
", current_test,\
106 "Second tracepoint
's enum value maps to zero")
109 match = re.search(r".*ust_tests_td:(.*):.*enumfield = \( \"(.*)\" :.*enumfield_bis = \( \"(.*)\" .*", event_lines[2])
111 print_test_result(match is not None and match.group(2) == "one", current_test,\
112 "Third tracepoint's enum value maps to one
")
114 shutil.rmtree(session_info.tmp_directory)