Cleanup: tests: name all temporary files to better identify leakage
[lttng-tools.git] / tests / regression / ust / multi-lib / test_multi_lib
1 #!/bin/bash
2 #
3 # Copyright (C) 2018 Francis Deslauriers <francis.deslauriers@efficios.com>
4 #
5 # SPDX-License-Identifier: LGPL-2.1-only
6
7 TEST_DESC="UST - Dynamic loading and unloading of libraries"
8
9 CURDIR=$(dirname $0)/
10 TESTDIR=$CURDIR/../../..
11 SESSION_NAME="multi_lib"
12
13 EXEC_NAME_WITH_CALLSITES=./$CURDIR/exec-with-callsites
14 EXEC_NAME_WITHOUT_CALLSITES=./$CURDIR/exec-without-callsites
15 SO_DIR=$CURDIR/.libs/
16 SO_PROBES_A=$SO_DIR/libprobes_a.so
17 SO_PROBES_A_PRIME=$SO_DIR/libprobes_a_prime.so
18 SO_PROBES_B=$SO_DIR/libprobes_b.so
19 SO_PROBES_C=$SO_DIR/libprobes_c.so
20 SO_PROBES_C_PRIME=$SO_DIR/libprobes_c_prime.so
21 SO_PROBES_D=$SO_DIR/libprobes_d.so
22 SO_CALLSITE_1=$SO_DIR/libcallsites_1.so
23 SO_CALLSITE_2=$SO_DIR/libcallsites_2.so
24
25 NUM_TESTS=55
26
27 source $TESTDIR/utils/utils.sh
28
29 test_dlopen_same_provider_name_same_event()
30 {
31 local event_name="multi:tp"
32 diag "dlopen 2 providers, same event name, same payload"
33
34 enable_ust_lttng_event_ok $SESSION_NAME "$event_name"
35
36 start_lttng_tracing_ok $SESSION_NAME
37
38 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_A $SO_PROBES_A_PRIME
39
40 stop_lttng_tracing_ok $SESSION_NAME
41
42 # Expect 2 identical events in the trace
43 trace_match_only $event_name 2 $TRACE_PATH
44
45 # Expect a single event ID in the metadata
46 validate_metadata_event $event_name 1 $TRACE_PATH
47
48 return $?
49 }
50
51 test_dlopen_same_provider_name_different_event()
52 {
53 local event_name="multi:tp"
54 # Regular expression for event tp with one argument: arg_long
55 local event_a_payload_exp="^.*$event_name.*arg_long_A.*"
56 # Regular expression for event tp with two arguments: arg_long and
57 # arg_float
58 local event_b_payload_exp="^.*$event_name.*arg_long_B.*arg_float_B.*"
59 diag "dlopen 2 providers, same event name, different payload"
60
61 enable_ust_lttng_event_ok $SESSION_NAME "$event_name"
62
63 start_lttng_tracing_ok $SESSION_NAME
64
65 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_A $SO_PROBES_B
66
67 stop_lttng_tracing_ok $SESSION_NAME
68
69 # Expect 2 identical events in the trace
70 trace_match_only $event_name 2 $TRACE_PATH
71
72 # Expect 2 events ID in the metadata
73 validate_metadata_event $event_name 2 $TRACE_PATH
74
75 # Expect 2 events with different payloads
76 validate_trace_exp $event_a_payload_exp $TRACE_PATH
77 validate_trace_exp $event_b_payload_exp $TRACE_PATH
78
79 return $?
80 }
81
82 test_dlopen_same_provider_name_same_enum()
83 {
84 local event_name="multi:tp"
85 # Regular expression for event tp with one argument: arg_long
86 local event_c_payload_exp="^.*$event_name.*enum_int_C.*"
87 # Regular expression for event tp with two arguments: arg_long and
88 # arg_float
89 local event_d_payload_exp="^.*$event_name.*enum_int_D.*"
90 diag "dlopen 2 providers, same event name, same enum definition"
91
92 enable_ust_lttng_event_ok $SESSION_NAME "$event_name"
93
94 start_lttng_tracing_ok $SESSION_NAME
95
96 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_C $SO_PROBES_C_PRIME
97
98 stop_lttng_tracing_ok $SESSION_NAME
99
100 # Expect 2 identical events in the trace
101 trace_match_only $event_name 2 $TRACE_PATH
102
103 # Expect 2 events ID in the metadata
104 validate_metadata_event $event_name 1 $TRACE_PATH
105
106 return $?
107 }
108
109 test_dlopen_same_provider_name_different_enum()
110 {
111 local event_name="multi:tp"
112 # Regular expression for event tp with one argument: arg_long
113 local event_c_payload_exp="^.*$event_name.*enum_int_C.*"
114 # Regular expression for event tp with two arguments: arg_long and
115 # arg_float
116 local event_d_payload_exp="^.*$event_name.*enum_int_D.*"
117 diag "dlopen 2 providers, same event name, different enum definition"
118
119 enable_ust_lttng_event_ok $SESSION_NAME "$event_name"
120
121 start_lttng_tracing_ok $SESSION_NAME
122
123 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_C $SO_PROBES_D
124
125 stop_lttng_tracing_ok $SESSION_NAME
126
127 # Expect 2 identical events in the trace
128 trace_match_only $event_name 2 $TRACE_PATH
129
130 # Expect 2 events ID in the metadata
131 validate_metadata_event $event_name 2 $TRACE_PATH
132
133 # Expect 2 events with different payloads
134 validate_trace_exp $event_c_payload_exp $TRACE_PATH
135 validate_trace_exp $event_d_payload_exp $TRACE_PATH
136
137 return $?
138 }
139
140 test_upgrade_probes_dlopen_dclose()
141 {
142 local event_name="multi:tp"
143 diag "Upgrade probe provider using dlopen/dlclose during tracing"
144
145 enable_ust_lttng_event_ok $SESSION_NAME "$event_name"
146
147 start_lttng_tracing_ok $SESSION_NAME
148
149 $EXEC_NAME_WITH_CALLSITES -t 1 $SO_PROBES_A $SO_PROBES_B
150
151 stop_lttng_tracing_ok $SESSION_NAME
152
153 # Expect 2 identical events in the trace
154 trace_match_only $event_name 4 $TRACE_PATH
155
156 # Expect 2 events ID in the metadata
157 validate_metadata_event $event_name 2 $TRACE_PATH
158
159 return $?
160 }
161
162 test_upgrade_callsites_dlopen_dclose()
163 {
164 local event_name="multi:tp"
165 diag "Upgrade callsite using dlopen/dlclose during tracing"
166
167 enable_ust_lttng_event_ok $SESSION_NAME "$event_name"
168
169 start_lttng_tracing_ok $SESSION_NAME
170
171 $EXEC_NAME_WITHOUT_CALLSITES -t 2 $SO_CALLSITE_1 $SO_CALLSITE_2
172
173 stop_lttng_tracing_ok $SESSION_NAME
174
175 # Expect 2 identical events in the trace
176 trace_match_only $event_name 3 $TRACE_PATH
177
178 # Expect 2 events ID in the metadata
179 validate_metadata_event $event_name 1 $TRACE_PATH
180
181 return $?
182 }
183
184 test_event_field_comparison()
185 {
186 local event_name="multi:tp"
187 diag "Load mutliple events with slight variations in the field descriptions."
188
189 local library_prefix="libprobes_"
190 local nb_libs=0
191 local library_list=" "
192 # Concatenate all the probe libraries in a string.
193 for postfix in {a..p}; do
194 library_list="$library_list $SO_DIR/$library_prefix$postfix.so"
195 let nb_libs+=1
196 done
197
198 enable_ust_lttng_event_ok $SESSION_NAME "$event_name"
199
200 start_lttng_tracing_ok $SESSION_NAME
201
202 $EXEC_NAME_WITH_CALLSITES -t 0 $library_list
203
204 stop_lttng_tracing_ok $SESSION_NAME
205
206 # Expect $nb_libs identical events in the trace
207 trace_match_only $event_name $nb_libs $TRACE_PATH
208
209 # Expect $nb_libs events ID in the metadata
210 validate_metadata_event $event_name $nb_libs $TRACE_PATH
211
212 return $?
213 }
214
215
216 plan_tests $NUM_TESTS
217
218 print_test_banner "$TEST_DESC"
219
220 TESTS=(
221 "test_dlopen_same_provider_name_same_event"
222 "test_dlopen_same_provider_name_different_event"
223 "test_dlopen_same_provider_name_different_enum"
224 "test_dlopen_same_provider_name_same_enum"
225 "test_event_field_comparison"
226 "test_upgrade_probes_dlopen_dclose"
227 "test_upgrade_callsites_dlopen_dclose"
228 )
229
230 TEST_COUNT=${#TESTS[@]}
231 i=0
232
233 start_lttng_sessiond
234
235 while [ "$i" -lt "$TEST_COUNT" ]; do
236
237 TRACE_PATH=$(mktemp --tmpdir -d tmp.test_multi_lib_ust_trace_path.XXXXXX)
238
239 create_lttng_session_ok $SESSION_NAME $TRACE_PATH
240
241 # Execute test
242 ${TESTS[$i]}
243
244 destroy_lttng_session_ok $SESSION_NAME
245
246 rm -rf $TRACE_PATH
247
248 let "i++"
249 done
250
251 stop_lttng_sessiond
This page took 0.034211 seconds and 4 git commands to generate.