3 # Copyright (C) 2014 Geneviève Bastien <gbastien@versatic.net>
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 *
23 print("1..{0}".format(NR_TESTS
))
25 # Check if a sessiond is running... bail out if none found.
26 if session_daemon_alive() == 0:
27 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.")
29 session_info
= create_session()
30 enable_ust_tracepoint_event(session_info
, "ust_tests_td*")
31 start_session(session_info
)
33 test_env
= os
.environ
.copy()
34 test_env
["LTTNG_UST_REGISTER_TIMEOUT"] = "-1"
36 td_process
= subprocess
.Popen(test_path
+ "type-declarations", stdout
=subprocess
.DEVNULL
, stderr
=subprocess
.DEVNULL
, env
=test_env
)
39 print_test_result(td_process
.returncode
== 0, current_test
, "Test application exited normally")
42 stop_session(session_info
)
44 # Check event fields using type declarations are present
46 babeltrace_process
= subprocess
.Popen(["babeltrace", session_info
.trace_path
], stdout
=subprocess
.PIPE
, stderr
=subprocess
.PIPE
)
47 except FileNotFoundError
:
48 bail("Could not open babeltrace. Please make sure it is installed.")
51 for event_line
in babeltrace_process
.stdout
:
52 event_line
= event_line
.decode('utf-8').replace("\n", "")
53 event_lines
.append(event_line
)
54 babeltrace_process
.wait()
56 print_test_result(babeltrace_process
.returncode
== 0, current_test
, "Resulting trace is readable")
59 if babeltrace_process
.returncode
!= 0:
60 bail("Unreadable trace; can't proceed with analysis.")
62 print_test_result(len(event_lines
) == 5, current_test
, "Correct number of events found in resulting trace")
65 if len(event_lines
) != 5:
66 bail("Unexpected number of events found in resulting trace (" + session_info
.trace_path
+ ")." )
68 match
= re
.search(r
".*ust_tests_td:(.*):.*enumfield = \( \"(.*)\" :.*enumfield_bis
= \
( \"(.*)\" :.*enumfield_third
= .*:.*", event_lines[0])
69 print_test_result(match is not None and match.group(1) == "tptest
", current_test,\
70 "First tracepoint
is present
")
73 print_test_result(match is not None and match.group(2) == "zero
", current_test,\
74 "First tracepoint
's enum value maps to zero")
77 print_test_result(match is not None and match.group(3) == "one", current_test,\
78 "First tracepoint's second enum value maps to one
")
81 match = re.search(r".*ust_tests_td
:(.*):.*enumfield
= \
( \"(.*)\" :.*", event_lines[1])
82 print_test_result(match is not None and match.group(1) == "tptest_bis
", current_test,\
83 "Second tracepoint
is present
")
86 print_test_result(match is not None and match.group(2) == "zero
", current_test,\
87 "Second tracepoint
's enum value maps to zero")
90 match = re.search(r".*ust_tests_td:(.*):.*enumfield = \( \"(.*)\" :.*enumfield_bis = \( \"(.*)\" .*", event_lines[2])
92 print_test_result(match is not None and match.group(2) == "one", current_test,\
93 "Third tracepoint's enum value maps to one
")
96 print_test_result('{ zero = ( "zero
" : container = 0 ), two = ( "two
" : container = 2 ), three = ( "three
" : container = 3 ), fifteen = ( "ten_to_twenty
" : container = 15 ), twenty_one = ( "twenty_one
" : container = 21 ) }' in event_lines[4],
97 current_test, 'Auto-incrementing enum values are correct')
99 shutil.rmtree(session_info.tmp_directory)