3 # Copyright (C) - 2017 Erica Bugden <erica.bugden@efficios.com>
4 # Copyright (C) - 2017 Francis Deslauriers <francis.deslauriers@efficios.com>
6 # This library is free software; you can redistribute it and/or modify it under
7 # the terms of the GNU Lesser General Public License as published by the Free
8 # Software Foundation; version 2.1 of the License.
10 # This library is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
15 # You should have received a copy of the GNU Lesser General Public License
16 # along with this library; if not, write to the Free Software Foundation, Inc.,
17 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 TEST_DESC
="Userspace probe - Testing userspace probe on ELF symbol"
21 CURDIR
=$
(dirname "$0")/
23 TESTAPP_DIR
="$TESTDIR/utils/testapp/"
24 ELF_TEST_BIN_DIR
="$TESTAPP_DIR/userspace-probe-elf-binary/"
25 ELF_TEST_BIN_NAME
="userspace-probe-elf-binary"
26 ELF_TEST_BIN
="$ELF_TEST_BIN_DIR/$ELF_TEST_BIN_NAME"
27 ELF_CXX_TEST_BIN_DIR
="$TESTAPP_DIR/userspace-probe-elf-cxx-binary/"
28 ELF_CXX_TEST_BIN_NAME
="userspace-probe-elf-cxx-binary"
29 ELF_CXX_TEST_BIN
="$ELF_CXX_TEST_BIN_DIR/$ELF_CXX_TEST_BIN_NAME"
30 SDT_TEST_BIN_DIR
="$TESTAPP_DIR/userspace-probe-sdt-binary/.libs/"
31 SDT_TEST_BIN_NAME
="userspace-probe-sdt-binary"
32 SDT_TEST_BIN
="$SDT_TEST_BIN_DIR/$SDT_TEST_BIN_NAME"
33 ELF_SYMBOL
="test_function"
34 PROBE_EVENT_NAME
=userspace_probe_test_event
37 ERROR_OUTPUT_DEST
=/dev
/null
39 source "$TESTDIR/utils/utils.sh"
41 function validate_list
()
46 out
=$
("$TESTDIR/../src/bin/lttng/$LTTNG_BIN" list
"$session_name" |
grep "$event_name")
47 if [ -z "$out" ]; then
48 fail
"Validate userspace probe listing"
49 diag
"$event_name not found when listing $session_name"
51 pass
"Validate userspace probe listing. Found $event_name."
55 function test_userspace_probe_enable_file_noexist
()
57 TRACE_PATH
=$
(mktemp
-d)
58 SESSION_NAME
="test_userspace_probe_enable_file_noexist"
59 ENABLE_EXPR
="elf:/etc/file-not-exist:$ELF_SYMBOL"
61 diag
"Userspace probe enable on non-existant file"
63 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
65 lttng_enable_kernel_userspace_probe_event_fail
$SESSION_NAME $ENABLE_EXPR $PROBE_EVENT_NAME
67 destroy_lttng_session_ok
$SESSION_NAME
72 function test_userspace_probe_enable_file_not_elf
()
74 TRACE_PATH
=$
(mktemp
-d)
75 SESSION_NAME
="test_userspace_probe_enable_file_not_elf"
76 ENABLE_EXPR
="elf:/etc/passwd:$ELF_SYMBOL"
78 diag
"Userspace probe enable on a non ELF file"
80 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
82 lttng_enable_kernel_userspace_probe_event_fail
$SESSION_NAME $ENABLE_EXPR $PROBE_EVENT_NAME
84 destroy_lttng_session_ok
$SESSION_NAME
89 function test_userspace_probe_enable_elf_missing_symbol_name
()
91 TRACE_PATH
=$
(mktemp
-d)
92 SESSION_NAME
="test_userspace_probe_enable_elf_missing_symbol"
93 ENABLE_EXPR
="elf:$ELF_TEST_BIN:"
95 diag
"Userspace probe enable with unspecified ELF symbol"
97 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
99 lttng_enable_kernel_userspace_probe_event_fail
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
101 destroy_lttng_session_ok
$SESSION_NAME
106 function test_userspace_probe_enable_elf_nonexistant_symbol
()
108 TRACE_PATH
=$
(mktemp
-d)
109 SESSION_NAME
="test_userspace_probe_enable_elf_nonexistant_symbol"
110 ELF_SYMBOL_NO_EXIST
="function_doesnt_exist"
111 ENABLE_EXPR
="elf:$ELF_TEST_BIN:$ELF_SYMBOL_NO_EXIST"
113 diag
"Userspace probe enable with nonexistant ELF symbol"
115 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
117 lttng_enable_kernel_userspace_probe_event_fail
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
119 destroy_lttng_session_ok
$SESSION_NAME
124 function test_userspace_probe_enable_elf_symbol_not_function
()
126 TRACE_PATH
=$
(mktemp
-d)
127 SESSION_NAME
="test_userspace_probe_enable_elf_symbol_not_function"
128 ELF_SYMBOL_NO_FUNC
="not_a_function"
129 ENABLE_EXPR
="elf:$ELF_TEST_BIN:$ELF_SYMBOL_NO_FUNC"
131 diag
"Userspace probe enable with non-function ELF symbol"
133 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
135 lttng_enable_kernel_userspace_probe_event_fail
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
137 destroy_lttng_session_ok
$SESSION_NAME
142 function test_userspace_probe_enable_implicit_probe_type
()
144 TRACE_PATH
=$
(mktemp
-d)
145 SESSION_NAME
="test_userspace_probe_enable_implicit_probe_type"
146 ENABLE_EXPR
="$ELF_TEST_BIN:$ELF_SYMBOL"
148 diag
"Userspace probe enabled successfully with implicit probe type"
150 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
152 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
154 validate_list
$SESSION_NAME $ELF_SYMBOL
155 validate_list
$SESSION_NAME $ELF_TEST_BIN_NAME
156 validate_list
$SESSION_NAME "ELF"
157 validate_list
$SESSION_NAME "Function"
159 destroy_lttng_session_ok
$SESSION_NAME
164 function test_userspace_probe_enable_elf_symbol_exists
()
166 TRACE_PATH
=$
(mktemp
-d)
167 SESSION_NAME
="test_userspace_probe_enable_elf_symbol_exists"
168 ENABLE_EXPR
="elf:$ELF_TEST_BIN:$ELF_SYMBOL"
170 diag
"Userspace probe enabled successfully"
172 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
174 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
176 validate_list
$SESSION_NAME $ELF_SYMBOL
177 validate_list
$SESSION_NAME $ELF_TEST_BIN_NAME
178 validate_list
$SESSION_NAME "ELF"
179 validate_list
$SESSION_NAME "Function"
181 destroy_lttng_session_ok
$SESSION_NAME
186 function test_userspace_probe_enable_in_path
()
188 TRACE_PATH
=$
(mktemp
-d)
189 SESSION_NAME
="test_userspace_probe_enable_in_path"
190 ENABLE_EXPR
="elf:$ELF_TEST_BIN_NAME:$ELF_SYMBOL"
192 diag
"Userspace probe on binary in PATH enabled successfully"
194 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
196 # Save old PATH and add the test directory to the PATH.
198 export PATH
="$PATH:$(realpath $ELF_TEST_BIN_DIR)"
200 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
202 validate_list
$SESSION_NAME $ELF_SYMBOL
203 validate_list
$SESSION_NAME $ELF_TEST_BIN_NAME
204 validate_list
$SESSION_NAME "ELF"
205 validate_list
$SESSION_NAME "Function"
207 # Reset the previously saved PATH.
208 export PATH
="$OLDPATH"
210 destroy_lttng_session_ok
$SESSION_NAME
215 function test_userspace_probe_enable_full_path
()
217 TRACE_PATH
=$
(mktemp
-d)
218 SESSION_NAME
="test_userspace_probe_enable_full_path"
219 ENABLE_EXPR
="elf:$(realpath $ELF_TEST_BIN):$ELF_SYMBOL"
220 diag
"Userspace probe with full path enabled successfully"
222 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
224 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
226 validate_list
$SESSION_NAME $ELF_SYMBOL
227 validate_list
$SESSION_NAME $ELF_TEST_BIN_NAME
228 validate_list
$SESSION_NAME "ELF"
229 validate_list
$SESSION_NAME "Function"
231 destroy_lttng_session_ok
$SESSION_NAME
236 function test_userspace_probe_enable_colon_in_path
()
238 TRACE_PATH
=$
(mktemp
-d)
239 SESSION_NAME
="test_userspace_probe_enable_colon_in_path"
240 COLON_FILE_PATH
=$
(mktemp
-d)
241 ELF_BIN_SYMLINK
="$COLON_FILE_PATH/colon_:_in_name"
242 ELF_BIN_WITH_COLON_IN_NAME_ESCAPED
="$COLON_FILE_PATH/colon_\:_in_name"
243 ENABLE_EXPR
="elf:"$ELF_BIN_WITH_COLON_IN_NAME_ESCAPED":$ELF_SYMBOL"
245 ln -s $
(realpath
$ELF_TEST_BIN) $ELF_BIN_SYMLINK
247 diag
"Userspace probe with binary with colon in name enabled successfully"
249 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
251 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
253 validate_list
$SESSION_NAME $ELF_SYMBOL
254 validate_list
$SESSION_NAME $ELF_TEST_BIN_NAME
255 validate_list
$SESSION_NAME "ELF"
256 validate_list
$SESSION_NAME "Function"
258 destroy_lttng_session_ok
$SESSION_NAME
261 rm -rf "$COLON_FILE_PATH"
264 function test_userspace_probe_elf
()
266 TRACE_PATH
=$
(mktemp
-d)
267 SESSION_NAME
="test_userprobe_elf"
268 ENABLE_EXPR
="elf:$ELF_TEST_BIN:$ELF_SYMBOL"
270 diag
"Userspace probe on Elf symbol enabled and traced"
272 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
274 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
276 start_lttng_tracing_ok
$SESSION_NAME
277 eval "$ELF_TEST_BIN" > /dev
/null
278 stop_lttng_tracing_ok
$SESSION_NAME
280 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
282 destroy_lttng_session_ok
$SESSION_NAME
287 function test_userspace_probe_elf_cxx_function
()
289 TRACE_PATH
=$
(mktemp
-d)
290 SESSION_NAME
="test_userprobe_elf_cxx_function"
291 # Probing C++ mangled symbols should work the same way as regular Elf
293 ELF_SYMBOL_CXX
="_Z17test_cxx_functionv"
294 ENABLE_EXPR
="elf:$ELF_CXX_TEST_BIN:$ELF_SYMBOL_CXX"
296 diag
"Userspace probe on C++ mangled function enabled and traced"
298 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
300 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
302 start_lttng_tracing_ok
$SESSION_NAME
303 eval "$ELF_CXX_TEST_BIN" > /dev
/null
304 stop_lttng_tracing_ok
$SESSION_NAME
306 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
308 destroy_lttng_session_ok
$SESSION_NAME
313 function test_userspace_probe_elf_cxx_method
()
315 TRACE_PATH
=$
(mktemp
-d)
316 SESSION_NAME
="test_userprobe_elf_cxx_method"
317 # Probing C++ mangled symbols should work the same way as regular Elf
319 ELF_SYMBOL_CXX
="_ZN10test_class11test_methodEv"
320 ENABLE_EXPR
="elf:$ELF_CXX_TEST_BIN:$ELF_SYMBOL_CXX"
322 diag
"Userspace probe on C++ mangled method enabled and traced"
324 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
326 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
328 start_lttng_tracing_ok
$SESSION_NAME
329 eval "$ELF_CXX_TEST_BIN" > /dev
/null
330 stop_lttng_tracing_ok
$SESSION_NAME
332 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
334 destroy_lttng_session_ok
$SESSION_NAME
339 function test_userspace_probe_elf_disable
()
341 TRACE_PATH
=$
(mktemp
-d)
342 SESSION_NAME
="test_userprobe_elf_disable"
343 ENABLE_EXPR
="elf:$ELF_TEST_BIN:$ELF_SYMBOL"
345 diag
"Userspace probe on Elf symbol disabled and traced"
347 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
349 # Activate and disable event
350 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
351 disable_kernel_lttng_userspace_probe_event_ok
$SESSION_NAME $PROBE_EVENT_NAME
353 start_lttng_tracing_ok
$SESSION_NAME
354 eval "$ELF_TEST_BIN" > /dev
/null
355 stop_lttng_tracing_ok
$SESSION_NAME
357 # Verify that the trace contains zero event.
358 validate_trace_empty
"$TRACE_PATH"
360 destroy_lttng_session_ok
$SESSION_NAME
365 function test_userspace_probe_elf_list
()
367 TRACE_PATH
=$
(mktemp
-d)
368 SESSION_NAME
="test_userprobe_elf_list"
369 ENABLE_EXPR
="elf:$ELF_TEST_BIN:$ELF_SYMBOL"
371 diag
"Userspace probe ELF enabled and listed"
373 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
375 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
377 validate_list
$SESSION_NAME $PROBE_EVENT_NAME
378 validate_list
$SESSION_NAME $ELF_SYMBOL
379 validate_list
$SESSION_NAME $ELF_TEST_BIN_NAME
380 validate_list
$SESSION_NAME "ELF"
381 validate_list
$SESSION_NAME "Function"
383 destroy_lttng_session_ok
$SESSION_NAME
388 function test_userspace_probe_save_load_elf
()
390 # Test that the load and save works for userspace probes AND that when
391 # a userspace probe is placed on a symlink by the user the save command
392 # saves the path to the link and not to the actual file. This is to
393 # support instrumentation of shared objects that are often accessed
394 # through symlinks and updated.
395 TRACE_PATH
=$
(mktemp
-d)
396 TMP_LINK_DIR
=$
(mktemp
-d)
397 TMP_SAVE_DIR
=$
(mktemp
-d)
399 SESSION_NAME
="test_userprobe_save_load_elf"
401 ELF_BIN_SYMLINK
="$TMP_LINK_DIR"/bin_elf_symlink
403 ENABLE_EXPR_ELF
="elf:$ELF_BIN_SYMLINK:$ELF_SYMBOL"
404 PROBE_EVENT_NAME_ELF
="$PROBE_EVENT_NAME"_elf
406 # Create symlinks to the target binaries.
407 ln -s $
(realpath
$ELF_TEST_BIN) $ELF_BIN_SYMLINK
409 diag
"Userspace probes Elf are saved and loaded"
411 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
413 # Enable userspace prove events.
414 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR_ELF" "$PROBE_EVENT_NAME_ELF"
416 # Confirm that the events were enabled.
417 validate_list
$SESSION_NAME $ELF_TEST_BIN_NAME
419 # Save the session to a file.
420 lttng_save
$SESSION_NAME "--output-path=$TMP_SAVE_DIR"
422 destroy_lttng_session_ok
$SESSION_NAME
424 # Confirm that the userspace probe are save to the xml file.
425 local count
=$
(cat $TMP_SAVE_DIR/* |
grep --count -E "$ELF_BIN_SYMLINK")
426 if [[ $count -eq "1" ]]; then
427 pass
"Symlink found in saved session"
429 fail
"Symlink to binary not found in saved session"
432 # Load the saved session.
433 lttng_load_ok
"--input-path=$TMP_SAVE_DIR"
435 # Confirm that the userspace probes event are enabled in the newly
437 validate_list
$SESSION_NAME $ELF_TEST_BIN_NAME
439 # Cleanup temp files and folders.
441 rm -rf "$TMP_LINK_DIR"
442 rm -rf "$TMP_SAVE_DIR"
444 function test_userspace_probe_save_load_sdt
()
446 # Test that the load and save works for userspace probes AND that when
447 # a userspace probe is placed on a symlink by the user the save command
448 # saves the path to the link and not to the actual file. This is to
449 # support instrumentation of shared objects that are often accessed
450 # through symlinks and updated.
451 TRACE_PATH
=$
(mktemp
-d)
452 TMP_LINK_DIR
=$
(mktemp
-d)
453 TMP_SAVE_DIR
=$
(mktemp
-d)
455 SESSION_NAME
="test_userprobe_save_load_sdt"
459 SDT_BIN_SYMLINK
="$TMP_LINK_DIR"/bin_sdt_symlink
461 ENABLE_EXPR_SDT
="sdt:$SDT_BIN_SYMLINK:$PROVIDER:$PROBE"
462 PROBE_EVENT_NAME_SDT
="$PROBE_EVENT_NAME"_sdt
464 # Create symlinks to the target binaries.
465 ln -s $
(realpath
$SDT_TEST_BIN) $SDT_BIN_SYMLINK
467 diag
"Userspace probes SDT are saved and loaded"
469 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
471 # Enable userspace prove events.
472 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR_SDT" "$PROBE_EVENT_NAME_SDT"
474 # Confirm that the events were enabled.
475 validate_list
$SESSION_NAME $SDT_TEST_BIN_NAME
477 # Save the session to a file.
478 lttng_save
$SESSION_NAME "--output-path=$TMP_SAVE_DIR"
480 destroy_lttng_session_ok
$SESSION_NAME
482 # Confirm that the userspace probe are save to the xml file.
483 local count
=$
(cat $TMP_SAVE_DIR/* |
grep --count -E "$SDT_BIN_SYMLINK")
484 if [[ $count -eq "1" ]]; then
485 pass
"Symlink found in saved session"
487 fail
"Symlink to binary not found in saved session"
490 # Load the saved session.
491 lttng_load_ok
"--input-path=$TMP_SAVE_DIR"
493 # Confirm that the userspace probes event are enabled in the newly
495 validate_list
$SESSION_NAME $SDT_TEST_BIN_NAME
497 # Cleanup temp files and folders.
499 rm -rf "$TMP_LINK_DIR"
500 rm -rf "$TMP_SAVE_DIR"
503 function test_userspace_probe_sdt
()
505 TRACE_PATH
=$
(mktemp
-d)
508 ENABLE_EXPR
="sdt:$SDT_TEST_BIN:$PROVIDER:$PROBE"
510 diag
"Userspace probe on SDT tracepoint enabled and traced"
512 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
514 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
516 start_lttng_tracing_ok
$SESSION_NAME
517 eval "$SDT_TEST_BIN" > /dev
/null
518 stop_lttng_tracing_ok
$SESSION_NAME
520 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
522 destroy_lttng_session_ok
$SESSION_NAME
527 function test_userspace_probe_sdt_list
()
529 TRACE_PATH
=$
(mktemp
-d)
530 SESSION_NAME
="test_userprobe_sdt_list"
533 ENABLE_EXPR
="sdt:$SDT_TEST_BIN:$PROVIDER:$PROBE"
535 diag
"Userspace probe SDT enabled and listed"
537 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
539 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
541 validate_list
$SESSION_NAME $PROBE_EVENT_NAME
542 validate_list
$SESSION_NAME $PROVIDER
543 validate_list
$SESSION_NAME $PROBE
544 validate_list
$SESSION_NAME $SDT_TEST_BIN_NAME
545 validate_list
$SESSION_NAME "SDT"
546 validate_list
$SESSION_NAME "Tracepoint"
548 destroy_lttng_session_ok
$SESSION_NAME
553 function test_userspace_probe_enable_sdt_nonexistant_provider
()
555 TRACE_PATH
=$
(mktemp
-d)
556 SESSION_NAME
="test_userprobe_sdt_nonexistand_provider"
557 PROVIDER
="not_provider"
559 ENABLE_EXPR
="sdt:$SDT_TEST_BIN:$PROVIDER:$PROBE"
561 diag
"Userspace probe SDT on tracepoint non existant provider"
563 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
565 lttng_enable_kernel_userspace_probe_event_fail
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
567 destroy_lttng_session_ok
$SESSION_NAME
572 function test_userspace_probe_enable_sdt_nonexistant_probe
()
574 TRACE_PATH
=$
(mktemp
-d)
575 SESSION_NAME
="test_userprobe_sdt_nonexistant_probe"
577 PROBE
="not_a_tracepoint"
578 ENABLE_EXPR
="sdt:$SDT_TEST_BIN:$PROVIDER:$PROBE"
580 diag
"Userspace probe SDT on non existant probe"
582 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
584 lttng_enable_kernel_userspace_probe_event_fail
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
586 destroy_lttng_session_ok
$SESSION_NAME
591 function test_userspace_probe_enable_sdt_with_sema
()
593 TRACE_PATH
=$
(mktemp
-d)
594 SESSION_NAME
="test_userprobe_sdt_with_sema"
596 PROBE
="tp_with_semaphore"
597 ENABLE_EXPR
="sdt:$SDT_TEST_BIN:$PROVIDER:$PROBE"
599 diag
"Userspace probe SDT on non existant probe"
601 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
603 lttng_enable_kernel_userspace_probe_event_fail
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
605 destroy_lttng_session_ok
$SESSION_NAME
610 function test_userspace_probe_sdt_one_probe
()
612 TRACE_PATH
=$
(mktemp
-d)
613 SESSION_NAME
="test_userprobe_sdt_one_probe"
616 ENABLE_EXPR
="sdt:$SDT_TEST_BIN:$PROVIDER:$PROBE"
618 diag
"Userspace probe SDT on tracepoint with one callsite"
620 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
622 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
624 start_lttng_tracing_ok
$SESSION_NAME
625 eval "$SDT_TEST_BIN" > /dev
/null
626 stop_lttng_tracing_ok
$SESSION_NAME
628 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
630 destroy_lttng_session_ok
$SESSION_NAME
635 function test_userspace_probe_sdt_two_probes
()
637 TRACE_PATH
=$
(mktemp
-d)
638 SESSION_NAME
="test_userprobe_sdt_two_probes"
641 ENABLE_EXPR
="sdt:$SDT_TEST_BIN:$PROVIDER:$PROBE"
643 diag
"Userspace probe SDT on tracepoint with two callsites"
645 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
647 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
649 start_lttng_tracing_ok
$SESSION_NAME
650 eval "$SDT_TEST_BIN" > /dev
/null
651 stop_lttng_tracing_ok
$SESSION_NAME
653 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
655 destroy_lttng_session_ok
$SESSION_NAME
660 function test_userspace_probe_sdt_in_shared_object
()
662 TRACE_PATH
=$
(mktemp
-d)
663 SESSION_NAME
="test_userprobe_sdt_shared_object"
665 PROBE
="tp_in_shared_object"
666 ENABLE_EXPR
="sdt:$SDT_TEST_BIN_DIR/libfoo.so:$PROVIDER:$PROBE"
668 diag
"Userspace probe SDT on tracepoint in shared object"
670 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
672 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
674 start_lttng_tracing_ok
$SESSION_NAME
675 eval "$SDT_TEST_BIN" > /dev
/null
676 stop_lttng_tracing_ok
$SESSION_NAME
678 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
680 destroy_lttng_session_ok
$SESSION_NAME
685 function test_userspace_probe_sdt_in_shared_object_dlopen
()
687 TRACE_PATH
=$
(mktemp
-d)
688 SESSION_NAME
="test_userprobe_sdt_shared_object_dlopen"
691 ENABLE_EXPR
="sdt:$SDT_TEST_BIN_DIR/libbar.so:$PROVIDER:$PROBE"
693 diag
"Userspace probe SDT on tracepoint in dlopen()ed shared object"
695 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
697 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
699 start_lttng_tracing_ok
$SESSION_NAME
700 eval "$SDT_TEST_BIN" > /dev
/null
701 stop_lttng_tracing_ok
$SESSION_NAME
703 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
705 destroy_lttng_session_ok
$SESSION_NAME
710 function test_userspace_probe_sdt_in_shared_object_ldpreload
()
712 TRACE_PATH
=$
(mktemp
-d)
713 SESSION_NAME
="test_userprobe_sdt_shared_object_ldpreload"
715 PROBE
="tp_in_ldpreload"
716 ENABLE_EXPR
="sdt:$SDT_TEST_BIN_DIR/libzzz.so:$PROVIDER:$PROBE"
718 diag
"Userspace probe SDT on tracepoint in an LD_PRELOADed shared object"
720 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
722 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
724 start_lttng_tracing_ok
$SESSION_NAME
725 LD_PRELOAD
="$SDT_TEST_BIN_DIR/libzzz.so" eval "$SDT_TEST_BIN" > /dev
/null
726 stop_lttng_tracing_ok
$SESSION_NAME
728 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
730 destroy_lttng_session_ok
$SESSION_NAME
735 function test_userspace_probe_sdt_with_arg
()
737 TRACE_PATH
=$
(mktemp
-d)
738 SESSION_NAME
="test_userprobe_sdt_arg"
741 ENABLE_EXPR
="sdt:$SDT_TEST_BIN:$PROVIDER:$PROBE"
743 diag
"Userspace probe SDT on tracepoint with argument"
745 create_lttng_session_ok
$SESSION_NAME "$TRACE_PATH"
747 lttng_enable_kernel_userspace_probe_event_ok
$SESSION_NAME "$ENABLE_EXPR" $PROBE_EVENT_NAME
749 start_lttng_tracing_ok
$SESSION_NAME
750 eval "$SDT_TEST_BIN" > /dev
/null
751 stop_lttng_tracing_ok
$SESSION_NAME
753 validate_trace
$PROBE_EVENT_NAME "$TRACE_PATH"
755 destroy_lttng_session_ok
$SESSION_NAME
760 ls "$SDT_TEST_BIN" >/dev
/null
2>&1
761 if test $?
== 0; then
762 NUM_TESTS
=$
((NUM_TESTS
+68))
768 ls "$ELF_CXX_TEST_BIN" >/dev
/null
2>&1
769 if test $?
== 0; then
770 NUM_TESTS
=$
((NUM_TESTS
+12))
775 plan_tests
$NUM_TESTS
776 print_test_banner
"$TEST_DESC"
778 if [ "$(id -u)" == "0" ]; then
784 skip
$isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
788 # Unsuccessful event enabling
789 test_userspace_probe_enable_file_noexist
790 test_userspace_probe_enable_file_not_elf
792 test_userspace_probe_enable_elf_missing_symbol_name
793 test_userspace_probe_enable_elf_nonexistant_symbol
794 test_userspace_probe_enable_elf_symbol_not_function
796 # Successful userspace probe elf enabling
797 test_userspace_probe_enable_implicit_probe_type
798 test_userspace_probe_enable_in_path
799 test_userspace_probe_enable_full_path
800 test_userspace_probe_enable_elf_symbol_exists
801 test_userspace_probe_enable_colon_in_path
803 # Successful tracing userspace probe elf
804 test_userspace_probe_elf
806 # Disable userspace-probe elf
807 test_userspace_probe_elf_disable
809 # Successful listing of userspace probe elf
810 test_userspace_probe_elf_list
812 # Successful save and load of userspace probe elf
813 test_userspace_probe_save_load_elf
815 if test $RUN_ELF_CXX_TESTS == 1; then
816 # Successful tracing of userspace probe elf on C++ symbol
817 test_userspace_probe_elf_cxx_function
818 test_userspace_probe_elf_cxx_method
821 if test $RUN_SDT_TESTS == 1; then
822 # Unsuccessful event enabling
823 test_userspace_probe_enable_sdt_nonexistant_provider
824 test_userspace_probe_enable_sdt_nonexistant_probe
825 test_userspace_probe_enable_sdt_with_sema
827 # Successful userspace probe sdt enabling
828 test_userspace_probe_sdt_one_probe
829 test_userspace_probe_sdt_two_probes
830 test_userspace_probe_sdt_with_arg
831 test_userspace_probe_sdt_in_shared_object
832 test_userspace_probe_sdt_in_shared_object_dlopen
833 test_userspace_probe_sdt_in_shared_object_ldpreload
835 # Successful tracing of userspace probe sdt
836 test_userspace_probe_sdt
838 # Successful listing of userspace probe sdt
839 test_userspace_probe_sdt_list
841 # Successful save and load of userspace probe sdt
842 test_userspace_probe_save_load_sdt