docs: Add supported versions and fix-backport policy
[lttng-tools.git] / tests / regression / ust / linking / test_linking.py
CommitLineData
91c75285
JG
1#!/usr/bin/env python3
2#
9d16b343 3# Copyright (C) 2013 Jérémie Galarneau <jeremie.galarneau@efficios.com>
91c75285 4#
9d16b343 5# SPDX-License-Identifier: GPL-2.0-only
91c75285
JG
6
7import os
8import subprocess
9import re
10import shutil
11import sys
12
13test_path = os.path.dirname(os.path.abspath(__file__)) + "/"
14test_utils_path = test_path
15for i in range(4):
16 test_utils_path = os.path.dirname(test_utils_path)
17test_utils_path = test_utils_path + "/utils"
18sys.path.append(test_utils_path)
19from test_utils import *
20
21
22def check_ust_test_demo2_event(event_line, expected_int_field_value):
23 match = re.search(r".*ust_tests_demo2:loop.*", event_line)
24 if match is None:
25 return False
26 match = re.search(r".*intfield = (\d+)", event_line)
27 if match is None or int(match.group(1)) != expected_int_field_value:
28 return False
29 match = re.search(r".*longfield = (\d+)", event_line)
30 if match is None or int(match.group(1)) != expected_int_field_value:
31 return False
32 match = re.search(r".*netintfield = (\d+)", event_line)
33 if match is None or int(match.group(1)) != expected_int_field_value:
34 return False
35 match = re.search(r".*intfield2 = 0x(\d+)", event_line)
36 if match is None or int(match.group(1)) != expected_int_field_value:
37 return False
38 match = re.search(r".*netintfieldhex = 0x(\d+)", event_line)
39 if match is None or int(match.group(1)) != expected_int_field_value:
40 return False
41 match = re.search(r".*floatfield = (\d+)", event_line)
42 if match is None or int(match.group(1)) != 2222:
43 return False
44 match = re.search(r".*doublefield = (\d+)", event_line)
45 if match is None or int(match.group(1)) != 2:
46 return False
47 match = re.search(r".*_seqfield1_length = (\d+)", event_line)
48 if match is None or int(match.group(1)) != 4:
49 return False
6a871bbe
KS
50 match = re.search(
51 r".*seqfield1 = \[ \[0\] = (\d+), \[1\] = (\d+), \[2\] = (\d+), \[3\] = (\d+) \]",
52 event_line,
53 )
54 if (
55 match is None
56 or int(match.group(1)) != 116
57 or int(match.group(2)) != 101
58 or int(match.group(3)) != 115
59 or int(match.group(4)) != 116
60 ):
91c75285 61 return False
6a871bbe
KS
62 match = re.search(
63 r".*arrfield1 = \[ \[0\] = (\d), \[1\] = (\d), \[2\] = (\d) \]", event_line
64 )
65 if (
66 match is None
67 or int(match.group(1)) != 1
68 or int(match.group(2)) != 2
69 or int(match.group(3)) != 3
70 ):
91c75285
JG
71 return False
72 match = re.search(r".*arrfield2 = \"([a-z]*)\"", event_line)
73 if match is None or match.group(1) != "test":
74 return False
75 match = re.search(r".*_seqfield2_length = (\d+)", event_line)
76 if match is None or int(match.group(1)) != 4:
77 return False
78 match = re.search(r".*seqfield2 = \"([a-z]*)\"", event_line)
79 if match is None or match.group(1) != "test":
80 return False
81 match = re.search(r".*stringfield = \"([a-z]*)\"", event_line)
82 if match is None or match.group(1) != "test":
83 return False
84
85 return True
86
6a871bbe 87
91c75285
JG
88NR_TESTS = 0
89DYNAMIC_TEST_ENABLED = False
90
91test_executables = [test_path + "demo_static", test_path + "demo_builtin"]
92if os.path.exists(test_path + "demo"):
93 test_executables.append(test_path + "demo_preload")
94 NR_TESTS = 2
95 DYNAMIC_TEST_ENABLED = True
96
97# Only enable tests that were compiled successfully
6a871bbe
KS
98test_executables = [
99 executable for executable in test_executables if os.path.exists(executable)
100]
91c75285
JG
101
102NR_TESTS += len(test_executables) * 10
103
104current_test = 1
105print("1..{0}".format(NR_TESTS))
106
107if NR_TESTS == 0:
108 print("# No test binary found")
109 exit(-1)
110
111# Check if a sessiond is running... bail out if none found.
112if session_daemon_alive() == 0:
6a871bbe
KS
113 bail(
114 '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.'
115 )
91c75285
JG
116
117if DYNAMIC_TEST_ENABLED:
118 session_info = create_session()
119 enable_ust_tracepoint_event(session_info, "ust_tests_demo*")
120 start_session(session_info)
121
122 # Dry run, no events should be logged
6a871bbe
KS
123 demo_process = subprocess.Popen(
124 test_path + "demo", stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
125 )
b6e2447a 126 demo_process.wait()
91c75285
JG
127 stop_session(session_info)
128
6a871bbe
KS
129 print_test_result(
130 demo_process.returncode == 0,
131 current_test,
132 "Running application dynamically linked to providers, no preload",
133 )
91c75285 134 current_test += 1
c996624c 135 trace_path = os.path.join(session_info.trace_path, "ust", "uid")
6a871bbe
KS
136 print_test_result(
137 not os.path.exists(trace_path),
138 current_test,
139 "No events logged when running demo application without preloading providers",
140 )
91c75285
JG
141 current_test += 1
142
143 shutil.rmtree(session_info.tmp_directory)
144
145for executable in test_executables:
146 executable_name = os.path.basename(executable)
147 session_info = create_session()
148 enable_ust_tracepoint_event(session_info, "ust_tests_demo*")
149 start_session(session_info)
150
6a871bbe
KS
151 demo_process = subprocess.Popen(
152 executable, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
153 )
b6e2447a 154 demo_process.wait()
91c75285
JG
155 stop_session(session_info)
156
157 trace_found = os.path.exists(session_info.trace_path)
6a871bbe
KS
158 print_test_result(
159 trace_found, current_test, "{0}, resulting trace found".format(executable_name)
160 )
91c75285
JG
161 current_test += 1
162
163 if not trace_found:
164 print("# Skipping " + executable_name + " trace verification tests")
165 continue
166
167 try:
6a871bbe
KS
168 babeltrace_process = subprocess.Popen(
169 [BABELTRACE_BIN, session_info.trace_path],
170 stdout=subprocess.PIPE,
171 stderr=subprocess.PIPE,
172 )
91c75285 173 except FileNotFoundError:
6a871bbe
KS
174 bail(
175 "Could not open {}. Please make sure it is installed.".format(
176 BABELTRACE_BIN
177 )
178 )
91c75285
JG
179
180 # We should find 8 events in the resulting trace
181 event_entries = []
182 for event_line in babeltrace_process.stdout:
6a871bbe 183 event_line = event_line.decode("utf-8").replace("\n", "")
91c75285
JG
184 event_entries.append(event_line)
185
186 if len(event_entries) != 8:
6a871bbe
KS
187 bail(
188 "{0}, wrong number of events found in resulting trace.".format(
189 executable_name
190 )
191 )
91c75285
JG
192
193 shutil.rmtree(session_info.tmp_directory)
194
6a871bbe
KS
195 print_test_result(
196 len(event_entries) == 8,
197 current_test,
198 "{0}, total number of events logged is correct".format(executable_name),
199 )
91c75285
JG
200 current_test += 1
201
202 # Check each loop event
203 match = re.search(r".*ust_tests_demo:starting.*value = (\d+) ", event_entries[0])
6a871bbe
KS
204 print_test_result(
205 match is not None and (int(match.group(1)) == 123),
206 current_test,
207 "{0}, ust_tests_demo:starting event found in trace with a correct integer argument".format(
208 executable_name
209 ),
210 )
91c75285
JG
211 current_test += 1
212
213 for i in range(5):
6a871bbe
KS
214 print_test_result(
215 check_ust_test_demo2_event(event_entries[i + 1], i),
216 current_test,
217 "{0}, ust_tests_demo2:loop event found in trace and arguments are correct, iteration ".format(
218 executable_name
219 )
220 + str(i + 1),
221 )
91c75285
JG
222 current_test += 1
223
224 match = re.search(r".*ust_tests_demo:done.*value = (\d+)", event_entries[6])
6a871bbe
KS
225 print_test_result(
226 match is not None and (int(match.group(1)) == 456),
227 current_test,
228 "{0}, ust_tests_demo:done event found in resulting trace with a correct integer argument".format(
229 executable_name
230 ),
231 )
91c75285
JG
232 current_test += 1
233
234 match = re.search(r".*ust_tests_demo3:done.*value = (\d+)", event_entries[7])
6a871bbe
KS
235 print_test_result(
236 match is not None and (int(match.group(1)) == 42),
237 current_test,
238 "{0}, ust_tests_demo3:done event found in resulting trace with a correct integer argument".format(
239 executable_name
240 ),
241 )
91c75285 242 current_test += 1
This page took 0.066995 seconds and 4 git commands to generate.