3 # Copyright (C) - 2018 Francis Deslauriers <francis.deslauriers@efficios.com>
5 # This library is free software; you can redistribute it and/or modify it under
6 # the terms of the GNU Lesser General Public License as published by the Free
7 # Software Foundation; version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14 # You should have received a copy of the GNU Lesser General Public License
15 # along with this library; if not, write to the Free Software Foundation, Inc.,
16 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 TEST_DESC
="UST - Dynamic loading and unloading of libraries"
21 TESTDIR
=$CURDIR/..
/..
/..
22 SESSION_NAME
="multi_lib"
24 EXEC_NAME_WITH_CALLSITES
=.
/$CURDIR/exec-with-callsites
25 EXEC_NAME_WITHOUT_CALLSITES
=.
/$CURDIR/exec-without-callsites
27 SO_PROBES_A
=$SO_DIR/libprobes_a.so
28 SO_PROBES_A_PRIME
=$SO_DIR/libprobes_a_prime.so
29 SO_PROBES_B
=$SO_DIR/libprobes_b.so
30 SO_PROBES_C
=$SO_DIR/libprobes_c.so
31 SO_PROBES_C_PRIME
=$SO_DIR/libprobes_c_prime.so
32 SO_PROBES_D
=$SO_DIR/libprobes_d.so
33 SO_CALLSITE_1
=$SO_DIR/libcallsites_1.so
34 SO_CALLSITE_2
=$SO_DIR/libcallsites_2.so
38 source $TESTDIR/utils
/utils.sh
40 test_dlopen_same_provider_name_same_event
()
42 local event_name
="multi:tp"
43 diag
"dlopen 2 providers, same event name, same payload"
45 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
47 start_lttng_tracing_ok
$SESSION_NAME
49 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_A $SO_PROBES_A_PRIME
51 stop_lttng_tracing_ok
$SESSION_NAME
53 # Expect 2 identical events in the trace
54 trace_match_only
$event_name 2 $TRACE_PATH
56 # Expect a single event ID in the metadata
57 validate_metadata_event
$event_name 1 $TRACE_PATH
62 test_dlopen_same_provider_name_different_event
()
64 local event_name
="multi:tp"
65 # Regular expression for event tp with one argument: arg_long
66 local event_a_payload_exp
="^.*$event_name.*arg_long_A.*"
67 # Regular expression for event tp with two arguments: arg_long and
69 local event_b_payload_exp
="^.*$event_name.*arg_long_B.*arg_float_B.*"
70 diag
"dlopen 2 providers, same event name, different payload"
72 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
74 start_lttng_tracing_ok
$SESSION_NAME
76 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_A $SO_PROBES_B
78 stop_lttng_tracing_ok
$SESSION_NAME
80 # Expect 2 identical events in the trace
81 trace_match_only
$event_name 2 $TRACE_PATH
83 # Expect 2 events ID in the metadata
84 validate_metadata_event
$event_name 2 $TRACE_PATH
86 # Expect 2 events with different payloads
87 validate_trace_exp
$event_a_payload_exp $TRACE_PATH
88 validate_trace_exp
$event_b_payload_exp $TRACE_PATH
93 test_dlopen_same_provider_name_same_enum
()
95 local event_name
="multi:tp"
96 # Regular expression for event tp with one argument: arg_long
97 local event_c_payload_exp
="^.*$event_name.*enum_int_C.*"
98 # Regular expression for event tp with two arguments: arg_long and
100 local event_d_payload_exp
="^.*$event_name.*enum_int_D.*"
101 diag
"dlopen 2 providers, same event name, same enum definition"
103 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
105 start_lttng_tracing_ok
$SESSION_NAME
107 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_C $SO_PROBES_C_PRIME
109 stop_lttng_tracing_ok
$SESSION_NAME
111 # Expect 2 identical events in the trace
112 trace_match_only
$event_name 2 $TRACE_PATH
114 # Expect 2 events ID in the metadata
115 validate_metadata_event
$event_name 1 $TRACE_PATH
120 test_dlopen_same_provider_name_different_enum
()
122 local event_name
="multi:tp"
123 # Regular expression for event tp with one argument: arg_long
124 local event_c_payload_exp
="^.*$event_name.*enum_int_C.*"
125 # Regular expression for event tp with two arguments: arg_long and
127 local event_d_payload_exp
="^.*$event_name.*enum_int_D.*"
128 diag
"dlopen 2 providers, same event name, different enum definition"
130 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
132 start_lttng_tracing_ok
$SESSION_NAME
134 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_C $SO_PROBES_D
136 stop_lttng_tracing_ok
$SESSION_NAME
138 # Expect 2 identical events in the trace
139 trace_match_only
$event_name 2 $TRACE_PATH
141 # Expect 2 events ID in the metadata
142 validate_metadata_event
$event_name 2 $TRACE_PATH
144 # Expect 2 events with different payloads
145 validate_trace_exp
$event_c_payload_exp $TRACE_PATH
146 validate_trace_exp
$event_d_payload_exp $TRACE_PATH
151 test_upgrade_probes_dlopen_dclose
()
153 local event_name
="multi:tp"
154 diag
"Upgrade probe provider using dlopen/dlclose during tracing"
156 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
158 start_lttng_tracing_ok
$SESSION_NAME
160 $EXEC_NAME_WITH_CALLSITES -t 1 $SO_PROBES_A $SO_PROBES_B
162 stop_lttng_tracing_ok
$SESSION_NAME
164 # Expect 2 identical events in the trace
165 trace_match_only
$event_name 4 $TRACE_PATH
167 # Expect 2 events ID in the metadata
168 validate_metadata_event
$event_name 2 $TRACE_PATH
173 test_upgrade_callsites_dlopen_dclose
()
175 local event_name
="multi:tp"
176 diag
"Upgrade callsite using dlopen/dlclose during tracing"
178 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
180 start_lttng_tracing_ok
$SESSION_NAME
182 $EXEC_NAME_WITHOUT_CALLSITES -t 2 $SO_CALLSITE_1 $SO_CALLSITE_2
184 stop_lttng_tracing_ok
$SESSION_NAME
186 # Expect 2 identical events in the trace
187 trace_match_only
$event_name 3 $TRACE_PATH
189 # Expect 2 events ID in the metadata
190 validate_metadata_event
$event_name 1 $TRACE_PATH
195 test_event_field_comparison
()
197 local event_name
="multi:tp"
198 diag
"Load mutliple events with slight variations in the field descriptions."
200 local library_prefix
="libprobes_"
202 local library_list
=" "
203 # Concatenate all the probe libraries in a string.
204 for postfix
in {a..p
}; do
205 library_list
="$library_list $SO_DIR/$library_prefix$postfix.so"
209 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
211 start_lttng_tracing_ok
$SESSION_NAME
213 $EXEC_NAME_WITH_CALLSITES -t 0 $library_list
215 stop_lttng_tracing_ok
$SESSION_NAME
217 # Expect $nb_libs identical events in the trace
218 trace_match_only
$event_name $nb_libs $TRACE_PATH
220 # Expect $nb_libs events ID in the metadata
221 validate_metadata_event
$event_name $nb_libs $TRACE_PATH
227 plan_tests
$NUM_TESTS
229 print_test_banner
"$TEST_DESC"
232 "test_dlopen_same_provider_name_same_event"
233 "test_dlopen_same_provider_name_different_event"
234 "test_dlopen_same_provider_name_different_enum"
235 "test_dlopen_same_provider_name_same_enum"
236 "test_event_field_comparison"
237 "test_upgrade_probes_dlopen_dclose"
238 "test_upgrade_callsites_dlopen_dclose"
241 TEST_COUNT
=${#TESTS[@]}
246 while [ "$i" -lt "$TEST_COUNT" ]; do
248 TRACE_PATH
=$
(mktemp
-d)
250 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
255 destroy_lttng_session_ok
$SESSION_NAME