3 # Copyright (C) 2018 Francis Deslauriers <francis.deslauriers@efficios.com>
5 # SPDX-License-Identifier: LGPL-2.1-only
7 TEST_DESC
="UST - Dynamic loading and unloading of libraries"
10 TESTDIR
=$CURDIR/..
/..
/..
11 SESSION_NAME
="multi_lib"
13 EXEC_NAME_WITH_CALLSITES
=.
/$CURDIR/exec-with-callsites
14 EXEC_NAME_WITHOUT_CALLSITES
=.
/$CURDIR/exec-without-callsites
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
27 source $TESTDIR/utils
/utils.sh
29 test_dlopen_same_provider_name_same_event
()
31 local event_name
="multi:tp"
32 diag
"dlopen 2 providers, same event name, same payload"
34 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
36 start_lttng_tracing_ok
$SESSION_NAME
38 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_A $SO_PROBES_A_PRIME
40 stop_lttng_tracing_ok
$SESSION_NAME
42 # Expect 2 identical events in the trace
43 trace_match_only
$event_name 2 $TRACE_PATH
45 # Expect a single event ID in the metadata
46 validate_metadata_event
$event_name 1 $TRACE_PATH
51 test_dlopen_same_provider_name_different_event
()
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
58 local event_b_payload_exp
="^.*$event_name.*arg_long_B.*arg_float_B.*"
59 diag
"dlopen 2 providers, same event name, different payload"
61 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
63 start_lttng_tracing_ok
$SESSION_NAME
65 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_A $SO_PROBES_B
67 stop_lttng_tracing_ok
$SESSION_NAME
69 # Expect 2 identical events in the trace
70 trace_match_only
$event_name 2 $TRACE_PATH
72 # Expect 2 events ID in the metadata
73 validate_metadata_event
$event_name 2 $TRACE_PATH
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
82 test_dlopen_same_provider_name_same_enum
()
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
89 local event_d_payload_exp
="^.*$event_name.*enum_int_D.*"
90 diag
"dlopen 2 providers, same event name, same enum definition"
92 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
94 start_lttng_tracing_ok
$SESSION_NAME
96 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_C $SO_PROBES_C_PRIME
98 stop_lttng_tracing_ok
$SESSION_NAME
100 # Expect 2 identical events in the trace
101 trace_match_only
$event_name 2 $TRACE_PATH
103 # Expect 2 events ID in the metadata
104 validate_metadata_event
$event_name 1 $TRACE_PATH
109 test_dlopen_same_provider_name_different_enum
()
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
116 local event_d_payload_exp
="^.*$event_name.*enum_int_D.*"
117 diag
"dlopen 2 providers, same event name, different enum definition"
119 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
121 start_lttng_tracing_ok
$SESSION_NAME
123 $EXEC_NAME_WITH_CALLSITES -t 0 $SO_PROBES_C $SO_PROBES_D
125 stop_lttng_tracing_ok
$SESSION_NAME
127 # Expect 2 identical events in the trace
128 trace_match_only
$event_name 2 $TRACE_PATH
130 # Expect 2 events ID in the metadata
131 validate_metadata_event
$event_name 2 $TRACE_PATH
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
140 test_upgrade_probes_dlopen_dclose
()
142 local event_name
="multi:tp"
143 diag
"Upgrade probe provider using dlopen/dlclose during tracing"
145 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
147 start_lttng_tracing_ok
$SESSION_NAME
149 $EXEC_NAME_WITH_CALLSITES -t 1 $SO_PROBES_A $SO_PROBES_B
151 stop_lttng_tracing_ok
$SESSION_NAME
153 # Expect 2 identical events in the trace
154 trace_match_only
$event_name 4 $TRACE_PATH
156 # Expect 2 events ID in the metadata
157 validate_metadata_event
$event_name 2 $TRACE_PATH
162 test_upgrade_callsites_dlopen_dclose
()
164 local event_name
="multi:tp"
165 diag
"Upgrade callsite using dlopen/dlclose during tracing"
167 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
169 start_lttng_tracing_ok
$SESSION_NAME
171 $EXEC_NAME_WITHOUT_CALLSITES -t 2 $SO_CALLSITE_1 $SO_CALLSITE_2
173 stop_lttng_tracing_ok
$SESSION_NAME
175 # Expect 2 identical events in the trace
176 trace_match_only
$event_name 3 $TRACE_PATH
178 # Expect 2 events ID in the metadata
179 validate_metadata_event
$event_name 1 $TRACE_PATH
184 test_event_field_comparison
()
186 local event_name
="multi:tp"
187 diag
"Load mutliple events with slight variations in the field descriptions."
189 local library_prefix
="libprobes_"
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"
198 enable_ust_lttng_event_ok
$SESSION_NAME "$event_name"
200 start_lttng_tracing_ok
$SESSION_NAME
202 $EXEC_NAME_WITH_CALLSITES -t 0 $library_list
204 stop_lttng_tracing_ok
$SESSION_NAME
206 # Expect $nb_libs identical events in the trace
207 trace_match_only
$event_name $nb_libs $TRACE_PATH
209 # Expect $nb_libs events ID in the metadata
210 validate_metadata_event
$event_name $nb_libs $TRACE_PATH
216 plan_tests
$NUM_TESTS
218 print_test_banner
"$TEST_DESC"
220 bail_out_if_no_babeltrace
223 "test_dlopen_same_provider_name_same_event"
224 "test_dlopen_same_provider_name_different_event"
225 "test_dlopen_same_provider_name_different_enum"
226 "test_dlopen_same_provider_name_same_enum"
227 "test_event_field_comparison"
228 "test_upgrade_probes_dlopen_dclose"
229 "test_upgrade_callsites_dlopen_dclose"
232 TEST_COUNT
=${#TESTS[@]}
237 while [ "$i" -lt "$TEST_COUNT" ]; do
239 TRACE_PATH
=$
(mktemp
--tmpdir -d tmp.test_multi_lib_ust_trace_path.XXXXXX
)
241 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
246 destroy_lttng_session_ok
$SESSION_NAME