fix: relayd: unaligned access in trace_chunk_registry_ht_key_hash
[lttng-tools.git] / tests / regression / ust / type-declarations / test_type_declarations.py
1 #!/usr/bin/env python3
2 #
3 # Copyright (C) 2014 Geneviève Bastien <gbastien@versatic.net>
4 #
5 # SPDX-License-Identifier: GPL-2.0-only
6
7 import os
8 import subprocess
9 import re
10 import shutil
11 import sys
12
13 test_path = os.path.dirname(os.path.abspath(__file__)) + "/"
14 test_utils_path = test_path
15 for i in range(4):
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 *
20
21 NR_TESTS = 10
22 current_test = 1
23 print("1..{0}".format(NR_TESTS))
24
25 # Check if a sessiond is running... bail out if none found.
26 if session_daemon_alive() == 0:
27 bail(
28 '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 )
30
31 session_info = create_session()
32 enable_ust_tracepoint_event(session_info, "ust_tests_td*")
33 start_session(session_info)
34
35 test_env = os.environ.copy()
36 test_env["LTTNG_UST_REGISTER_TIMEOUT"] = "-1"
37
38 td_process = subprocess.Popen(
39 test_path + "type-declarations",
40 stdout=subprocess.DEVNULL,
41 stderr=subprocess.DEVNULL,
42 env=test_env,
43 )
44 td_process.wait()
45
46 print_test_result(
47 td_process.returncode == 0, current_test, "Test application exited normally"
48 )
49 current_test += 1
50
51 stop_session(session_info)
52
53 # Check event fields using type declarations are present
54 try:
55 babeltrace_process = subprocess.Popen(
56 [BABELTRACE_BIN, session_info.trace_path],
57 stdout=subprocess.PIPE,
58 stderr=subprocess.PIPE,
59 )
60 except FileNotFoundError:
61 bail("Could not open {}. Please make sure it is installed.".format(BABELTRACE_BIN))
62
63 event_lines = []
64 for event_line in babeltrace_process.stdout:
65 event_line = event_line.decode("utf-8").replace("\n", "")
66 event_lines.append(event_line)
67 babeltrace_process.wait()
68
69 print_test_result(
70 babeltrace_process.returncode == 0, current_test, "Resulting trace is readable"
71 )
72 current_test += 1
73
74 if babeltrace_process.returncode != 0:
75 bail("Unreadable trace; can't proceed with analysis.")
76
77 print_test_result(
78 len(event_lines) == 5,
79 current_test,
80 "Correct number of events found in resulting trace",
81 )
82 current_test += 1
83
84 if len(event_lines) != 5:
85 bail(
86 "Unexpected number of events found in resulting trace ("
87 + session_info.trace_path
88 + ")."
89 )
90
91 match = re.search(
92 r".*ust_tests_td:(.*):.*enumfield = \( \"(.*)\" :.*enumfield_bis = \( \"(.*)\" :.*enumfield_third = .*:.*",
93 event_lines[0],
94 )
95 print_test_result(
96 match is not None and match.group(1) == "tptest",
97 current_test,
98 "First tracepoint is present",
99 )
100 current_test += 1
101
102 print_test_result(
103 match is not None and match.group(2) == "zero",
104 current_test,
105 "First tracepoint's enum value maps to zero",
106 )
107 current_test += 1
108
109 print_test_result(
110 match is not None and match.group(3) == "one",
111 current_test,
112 "First tracepoint's second enum value maps to one",
113 )
114 current_test += 1
115
116 match = re.search(r".*ust_tests_td:(.*):.*enumfield = \( \"(.*)\" :.*", event_lines[1])
117 print_test_result(
118 match is not None and match.group(1) == "tptest_bis",
119 current_test,
120 "Second tracepoint is present",
121 )
122 current_test += 1
123
124 print_test_result(
125 match is not None and match.group(2) == "zero",
126 current_test,
127 "Second tracepoint's enum value maps to zero",
128 )
129 current_test += 1
130
131 match = re.search(
132 r".*ust_tests_td:(.*):.*enumfield = \( \"(.*)\" :.*enumfield_bis = \( \"(.*)\" .*",
133 event_lines[2],
134 )
135
136 print_test_result(
137 match is not None and match.group(2) == "one",
138 current_test,
139 "Third tracepoint's enum value maps to one",
140 )
141 current_test += 1
142
143 print_test_result(
144 '{ zero = ( "zero" : container = 0 ), two = ( "two" : container = 2 ), three = ( "three" : container = 3 ), fifteen = ( "ten_to_twenty" : container = 15 ), twenty_one = ( "twenty_one" : container = 21 ) }'
145 in event_lines[4],
146 current_test,
147 "Auto-incrementing enum values are correct",
148 )
149
150 shutil.rmtree(session_info.tmp_directory)
This page took 0.031972 seconds and 4 git commands to generate.