3 # Copyright (C) - 2013 Christian Babeux <christian.babeux@efficios.com>
4 # Copyright (C) - 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License, version 2 only, as
8 # published by the Free Software Foundation.
10 # This program is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 # You should have received a copy of the GNU General Public License along with
16 # this program; if not, write to the Free Software Foundation, Inc., 51
17 # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 TEST_DESC
="Kernel tracer - System calls"
25 # test command issues at least open and close system calls
26 TESTCMD
="cat /proc/cpuinfo > /dev/null"
28 source $TESTDIR/utils
/utils.sh
30 function validate_list
()
36 out
=$
($TESTDIR/..
/src
/bin
/lttng
/$LTTNG_BIN list
$session_name $opt |
grep $event_name)
37 if [ -z "$out" ]; then
38 fail
"Validate syscall listing"
39 diag
"$event_name not found when listing $session_name (opt $opt)"
41 pass
"Validate syscall listing. Found $event_name."
45 function test_syscall_event_list
()
47 local EVENT_NAME
="getpid"
49 diag
"Syscall event listing"
51 validate_list
"" $EVENT_NAME "-k --syscall"
54 function test_syscall_simple_list
()
56 TRACE_PATH
=$
(mktemp
-d)
57 SESSION_NAME
="kernel_syscall_simple_list"
58 local EVENT_NAME
="close"
60 diag
"Syscall simple listing"
62 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
64 lttng_enable_kernel_syscall_ok
$SESSION_NAME $EVENT_NAME
66 validate_list
$SESSION_NAME $EVENT_NAME
68 start_lttng_tracing_ok
72 # ensure each is there.
73 validate_trace_exp
"-e syscall_entry_$EVENT_NAME: -e compat_syscall_entry_$EVENT_NAME:" $TRACE_PATH
74 validate_trace_exp
"-e syscall_exit_$EVENT_NAME: -e compat_syscall_exit_$EVENT_NAME:" $TRACE_PATH
76 # ensure trace only contains those.
77 validate_trace_only_exp
"-e syscall_entry_$EVENT_NAME: -e compat_syscall_entry_$EVENT_NAME: -e syscall_exit_$EVENT_NAME: -e compat_syscall_exit_$EVENT_NAME:" $TRACE_PATH
79 destroy_lttng_session_ok
$SESSION_NAME
84 function test_syscall_simple_list_two
()
86 TRACE_PATH
=$
(mktemp
-d)
87 SESSION_NAME
="kernel_syscall_simple_list_two"
88 local EVENT_NAME
="close"
89 local EVENT_NAME2
="read"
91 diag
"Syscall simple listing"
93 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
95 lttng_enable_kernel_syscall_ok
$SESSION_NAME $EVENT_NAME
96 lttng_enable_kernel_syscall_ok
$SESSION_NAME $EVENT_NAME2
98 validate_list
$SESSION_NAME $EVENT_NAME
99 validate_list
$SESSION_NAME $EVENT_NAME2
101 start_lttng_tracing_ok
103 stop_lttng_tracing_ok
105 # ensure each is there.
106 validate_trace_exp
"-e syscall_entry_$EVENT_NAME: -e compat_syscall_entry_$EVENT_NAME:" $TRACE_PATH
107 validate_trace_exp
"-e syscall_exit_$EVENT_NAME: -e compat_syscall_exit_$EVENT_NAME:" $TRACE_PATH
109 # ensure each is there.
110 validate_trace_exp
"-e syscall_entry_$EVENT_NAME2: -e compat_syscall_entry_$EVENT_NAME2:" $TRACE_PATH
111 validate_trace_exp
"-e syscall_exit_$EVENT_NAME2: -e compat_syscall_exit_$EVENT_NAME2:" $TRACE_PATH
113 # ensure trace only contains those.
114 validate_trace_only_exp
"-e syscall_entry_$EVENT_NAME: -e compat_syscall_entry_$EVENT_NAME: -e syscall_exit_$EVENT_NAME: -e compat_syscall_exit_$EVENT_NAME: -e syscall_entry_$EVENT_NAME2: -e compat_syscall_entry_$EVENT_NAME2: -e syscall_exit_$EVENT_NAME2: -e compat_syscall_exit_$EVENT_NAME2:" $TRACE_PATH
116 destroy_lttng_session_ok
$SESSION_NAME
121 function test_syscall_single
()
123 TRACE_PATH
=$
(mktemp
-d)
124 SESSION_NAME
="kernel_syscall_single"
126 diag
"Syscall trace single"
128 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
130 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
132 start_lttng_tracing_ok
134 stop_lttng_tracing_ok
136 # ensure each is there.
137 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
138 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
140 # ensure trace only contains those.
141 validate_trace_only_exp
"-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
143 destroy_lttng_session_ok
$SESSION_NAME
148 function test_syscall_two
()
150 TRACE_PATH
=$
(mktemp
-d)
151 SESSION_NAME
="kernel_syscall_two"
153 diag
"Syscall trace two events"
155 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
157 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
158 lttng_enable_kernel_syscall_ok
$SESSION_NAME "close"
160 start_lttng_tracing_ok
162 stop_lttng_tracing_ok
164 # ensure each is there.
165 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
166 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
167 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
168 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
170 # ensure trace only contains those.
171 validate_trace_only_exp
"-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open: -e syscall_entry_close: -e compat_syscall_entry_close: -e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
173 destroy_lttng_session_ok
$SESSION_NAME
178 function test_syscall_all
()
180 TRACE_PATH
=$
(mktemp
-d)
181 SESSION_NAME
="kernel_syscall_all"
183 diag
"Syscall trace all events"
185 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
187 # enable all syscalls
188 lttng_enable_kernel_syscall_ok
$SESSION_NAME
190 start_lttng_tracing_ok
192 stop_lttng_tracing_ok
194 # ensure at least open and close are there.
195 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
196 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
197 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
198 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
199 # trace may contain other syscalls.
201 destroy_lttng_session_ok
$SESSION_NAME
206 function test_syscall_all_disable_one
()
208 TRACE_PATH
=$
(mktemp
-d)
209 SESSION_NAME
="kernel_syscall_all_disable_one"
211 diag
"Syscall trace all events and disable one"
213 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
215 # enable all syscalls
216 lttng_enable_kernel_syscall_ok
$SESSION_NAME
217 # try to disable open system call: fails because enabler semantic of
218 # "all syscalls" is not "the open" system call.
219 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open"
221 start_lttng_tracing_ok
223 stop_lttng_tracing_ok
225 # ensure "open" syscall is there.
226 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
228 # ensure "close" syscall is there.
229 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
230 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
232 destroy_lttng_session_ok
$SESSION_NAME
237 function test_syscall_all_disable_two
()
239 TRACE_PATH
=$
(mktemp
-d)
240 SESSION_NAME
="kernel_syscall_all_disable_two"
242 diag
"Syscall trace all events and disable two"
244 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
246 # enable all syscalls
247 lttng_enable_kernel_syscall_ok
$SESSION_NAME
248 # try to disable open and close system calls: fails because enabler
249 # semantic of "all syscalls" is not "the open" system call.
250 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open"
251 lttng_disable_kernel_syscall_fail
$SESSION_NAME "close"
253 start_lttng_tracing_ok
254 # generates open, close, execve (at least)
256 stop_lttng_tracing_ok
258 # ensure "open" syscall is there.
259 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
261 # ensure "close" syscall is there.
262 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
263 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
265 # ensure "execve" syscall is there.
266 validate_trace_exp
"-e syscall_entry_execve: -e compat_syscall_entry_execve:" $TRACE_PATH
267 validate_trace_exp
"-e syscall_exit_execve: -e compat_syscall_exit_execve:" $TRACE_PATH
269 destroy_lttng_session_ok
$SESSION_NAME
274 function test_syscall_enable_all_disable_all
()
276 TRACE_PATH
=$
(mktemp
-d)
277 SESSION_NAME
="kernel_syscall_enable_all_disable_all"
279 diag
"Syscall trace all events and disable all"
281 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
283 # enable all system calls
284 lttng_enable_kernel_syscall_ok
$SESSION_NAME
285 # disable all system calls
286 lttng_disable_kernel_syscall_ok
$SESSION_NAME
288 start_lttng_tracing_ok
289 # generates open, close, execve (at least)
291 stop_lttng_tracing_ok
293 # ensure nothing has been traced.
294 validate_trace_empty
$TRACE_PATH
296 destroy_lttng_session_ok
$SESSION_NAME
301 function test_syscall_enable_all_disable_all_enable_all
()
303 TRACE_PATH
=$
(mktemp
-d)
304 SESSION_NAME
="kernel_syscall_enable_all_disable_all_enable_all"
306 diag
"Syscall trace all events and enable/disable all"
308 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
310 # enable all system calls
311 lttng_enable_kernel_syscall_ok
$SESSION_NAME
312 # disable all system calls
313 lttng_disable_kernel_syscall_ok
$SESSION_NAME
314 # enable all system calls
315 lttng_enable_kernel_syscall_ok
$SESSION_NAME
317 start_lttng_tracing_ok
318 # generates open, close, execve (at least)
320 stop_lttng_tracing_ok
322 # ensure at least open and close are there.
323 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
324 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
325 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
326 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
327 # trace may contain other syscalls.
329 destroy_lttng_session_ok
$SESSION_NAME
334 function test_syscall_enable_all_disable_all_twice
()
336 TRACE_PATH
=$
(mktemp
-d)
337 SESSION_NAME
="kernel_syscall_enable_all_disable_all_twice"
339 diag
"Syscall trace all events and enable/disable all twice"
341 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
343 # enable all system calls
344 lttng_enable_kernel_syscall_ok
$SESSION_NAME
345 # disable all system calls
346 lttng_disable_kernel_syscall_ok
$SESSION_NAME
347 # enable all system calls
348 lttng_enable_kernel_syscall_ok
$SESSION_NAME
349 # disable all system calls
350 lttng_disable_kernel_syscall_ok
$SESSION_NAME
352 start_lttng_tracing_ok
353 # generates open, close, execve (at least)
355 stop_lttng_tracing_ok
357 # ensure nothing has been traced.
358 validate_trace_empty
$TRACE_PATH
360 destroy_lttng_session_ok
$SESSION_NAME
365 function test_syscall_enable_one_disable_one
()
367 TRACE_PATH
=$
(mktemp
-d)
368 SESSION_NAME
="kernel_syscall_enable_one_disable_one"
370 diag
"Syscall trace one event and disable one"
372 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
374 # enable open system call
375 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
376 # disable open system call
377 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
379 start_lttng_tracing_ok
380 # generates open, close, execve (at least)
382 stop_lttng_tracing_ok
384 # ensure nothing has been traced.
385 validate_trace_empty
$TRACE_PATH
387 destroy_lttng_session_ok
$SESSION_NAME
392 function test_syscall_enable_two_disable_two
()
394 TRACE_PATH
=$
(mktemp
-d)
395 SESSION_NAME
="kernel_syscall_enable_two_disable_two"
397 diag
"Syscall trace two events and disable two"
399 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
401 # enable open and close system calls
402 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
403 lttng_enable_kernel_syscall_ok
$SESSION_NAME "close"
404 # disable open and close system calls
405 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
406 lttng_disable_kernel_syscall_ok
$SESSION_NAME "close"
408 start_lttng_tracing_ok
409 # generates open, close, execve (at least)
411 stop_lttng_tracing_ok
413 # ensure nothing has been traced.
414 validate_trace_empty
$TRACE_PATH
416 destroy_lttng_session_ok
$SESSION_NAME
421 function test_syscall_enable_two_disable_one
()
423 TRACE_PATH
=$
(mktemp
-d)
424 SESSION_NAME
="kernel_syscall_enable_two_disable_one"
426 diag
"Syscall trace two events and disable one"
428 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
430 # enable open and close system calls
431 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
432 lttng_enable_kernel_syscall_ok
$SESSION_NAME "close"
433 # disable close system call
434 lttng_disable_kernel_syscall_ok
$SESSION_NAME "close"
436 start_lttng_tracing_ok
437 # generates open, close, execve (at least)
439 stop_lttng_tracing_ok
441 # ensure open is there.
442 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
443 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
445 # ensure trace only contains those.
446 validate_trace_only_exp
"-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
448 destroy_lttng_session_ok
$SESSION_NAME
453 function test_syscall_disable_twice
()
455 TRACE_PATH
=$
(mktemp
-d)
456 SESSION_NAME
="kernel_syscall_disable_twice"
458 diag
"Syscall trace one event and disable twice"
460 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
462 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
463 # First disable will succeed
464 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
465 # Second disable succeeds too, due to enabler semantic.
466 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
468 destroy_lttng_session_ok
$SESSION_NAME
473 function test_syscall_disable_all_twice
()
475 TRACE_PATH
=$
(mktemp
-d)
476 SESSION_NAME
="kernel_syscall_disable_all_twice"
478 diag
"Syscall trace all events and disable all twice"
480 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
482 lttng_enable_kernel_syscall_ok
$SESSION_NAME
483 # First disable will succeed
484 lttng_disable_kernel_syscall_ok
$SESSION_NAME
485 # Second disable succeeds too, due to enabler semantic.
486 lttng_disable_kernel_syscall_ok
$SESSION_NAME
488 destroy_lttng_session_ok
$SESSION_NAME
494 function test_syscall_enable_unknown
()
496 TRACE_PATH
=$
(mktemp
-d)
497 SESSION_NAME
="kernel_syscall_enable_unknown"
499 diag
"Syscall enable an unknown event"
501 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
503 # Enabling a syscall that does not exist succeeds, due to enabler
505 lttng_enable_kernel_syscall_ok
$SESSION_NAME "thissyscallcannotexist"
507 destroy_lttng_session_ok
$SESSION_NAME
512 function test_syscall_enable_all_enable_one
()
514 TRACE_PATH
=$
(mktemp
-d)
515 SESSION_NAME
="kernel_syscall_enable_all_enable_one"
517 diag
"Syscall enable all and enable one"
519 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
521 lttng_enable_kernel_syscall_ok
$SESSION_NAME
522 # Enabling an event already enabled succeeds, due to enabler semantic.
523 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
525 destroy_lttng_session_ok
$SESSION_NAME
530 function test_syscall_disable_all_disable_one
()
532 TRACE_PATH
=$
(mktemp
-d)
533 SESSION_NAME
="kernel_syscall_enable_all_enable_one"
535 diag
"Syscall disable all and disable one"
537 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
539 lttng_enable_kernel_syscall_ok
$SESSION_NAME
540 lttng_disable_kernel_syscall_ok
$SESSION_NAME
541 # Disabling an event already disabled fails.
542 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open"
544 destroy_lttng_session_ok
$SESSION_NAME
549 function test_syscall_enable_channel_disable_all
()
551 TRACE_PATH
=$
(mktemp
-d)
552 SESSION_NAME
="kernel_syscall_enable_channel_disable_all"
553 CHANNEL_NAME
="channel"
555 diag
"Syscall enable channel and disable all"
557 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
559 lttng_enable_kernel_channel_ok
$SESSION_NAME $CHANNEL_NAME
560 # sessiond semantic for "disable all" is to try to match all enalers
561 # it knowns about. Disable all succeeds if it finds no match.
562 lttng_disable_kernel_syscall_ok
$SESSION_NAME "-a" $CHANNEL_NAME
564 destroy_lttng_session_ok
$SESSION_NAME
569 function test_syscall_enable_channel_disable_one
()
571 TRACE_PATH
=$
(mktemp
-d)
572 SESSION_NAME
="kernel_syscall_enable_channel_disable_all"
573 CHANNEL_NAME
="channel"
575 diag
"Syscall enable channel and disable one"
577 create_lttng_session_ok
$SESSION_NAME $TRACE_PATH
579 lttng_enable_kernel_channel_ok
$SESSION_NAME $CHANNEL_NAME
580 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open" $CHANNEL_NAME
582 destroy_lttng_session_ok
$SESSION_NAME
587 # MUST set TESTDIR before calling those functions
588 plan_tests
$NUM_TESTS
590 print_test_banner
"$TEST_DESC"
592 if [ "$(id -u)" == "0" ]; then
598 skip
$isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
602 test_syscall_event_list
603 test_syscall_simple_list
604 test_syscall_simple_list_two
608 test_syscall_all_disable_one
609 test_syscall_all_disable_two
610 test_syscall_enable_all_disable_all
611 test_syscall_enable_all_disable_all_enable_all
612 test_syscall_enable_all_disable_all_twice
613 test_syscall_enable_one_disable_one
614 test_syscall_enable_two_disable_two
615 test_syscall_enable_two_disable_one
616 test_syscall_disable_twice
617 test_syscall_disable_all_twice
618 test_syscall_enable_unknown
619 test_syscall_enable_all_enable_one
620 test_syscall_disable_all_disable_one
621 test_syscall_enable_channel_disable_all
622 test_syscall_enable_channel_disable_one