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
$SESSION_NAME $TRACE_PATH
64 lttng_enable_kernel_syscall_ok
$SESSION_NAME $EVENT_NAME
66 validate_list
$SESSION_NAME $EVENT_NAME
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
$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
$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
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
$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
$SESSION_NAME $TRACE_PATH
130 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
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
$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
$SESSION_NAME $TRACE_PATH
157 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
158 lttng_enable_kernel_syscall_ok
$SESSION_NAME "close"
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
$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
$SESSION_NAME $TRACE_PATH
187 # enable all syscalls
188 lttng_enable_kernel_syscall_ok
$SESSION_NAME
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
$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
$SESSION_NAME $TRACE_PATH
215 # enable all syscalls
216 lttng_enable_kernel_syscall_ok
$SESSION_NAME
217 # disable open system call
218 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
224 # ensure "open" syscall is not there.
225 validate_trace_only_exp
"-v -e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
227 # ensure "close" syscall is there.
228 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
229 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
231 destroy_lttng_session
$SESSION_NAME
236 function test_syscall_all_disable_two
()
238 TRACE_PATH
=$
(mktemp
-d)
239 SESSION_NAME
="kernel_syscall_all_disable_two"
241 diag
"Syscall trace all events and disable two"
243 create_lttng_session
$SESSION_NAME $TRACE_PATH
245 # enable all syscalls
246 lttng_enable_kernel_syscall_ok
$SESSION_NAME
247 # disable open system call
248 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
249 lttng_disable_kernel_syscall_ok
$SESSION_NAME "close"
252 # generates open, close, execve (at least)
256 # ensure "open" and "close" syscalls are not there.
257 validate_trace_only_exp
"-v -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
259 # ensure "execve" syscall is there.
260 validate_trace_exp
"-e syscall_entry_execve: -e compat_syscall_entry_execve:" $TRACE_PATH
261 validate_trace_exp
"-e syscall_exit_execve: -e compat_syscall_exit_execve:" $TRACE_PATH
263 destroy_lttng_session
$SESSION_NAME
268 function test_syscall_enable_all_disable_all
()
270 TRACE_PATH
=$
(mktemp
-d)
271 SESSION_NAME
="kernel_syscall_enable_all_disable_all"
273 diag
"Syscall trace all events and disable all"
275 create_lttng_session
$SESSION_NAME $TRACE_PATH
277 # enable all system calls
278 lttng_enable_kernel_syscall_ok
$SESSION_NAME
279 # disable all system calls
280 lttng_disable_kernel_syscall_ok
$SESSION_NAME
283 # generates open, close, execve (at least)
287 # ensure nothing has been traced.
288 validate_trace_empty
$TRACE_PATH
290 destroy_lttng_session
$SESSION_NAME
295 function test_syscall_enable_all_disable_all_enable_all
()
297 TRACE_PATH
=$
(mktemp
-d)
298 SESSION_NAME
="kernel_syscall_enable_all_disable_all_enable_all"
300 diag
"Syscall trace all events and enable/disable all"
302 create_lttng_session
$SESSION_NAME $TRACE_PATH
304 # enable all system calls
305 lttng_enable_kernel_syscall_ok
$SESSION_NAME
306 # disable all system calls
307 lttng_disable_kernel_syscall_ok
$SESSION_NAME
308 # enable all system calls
309 lttng_enable_kernel_syscall_ok
$SESSION_NAME
312 # generates open, close, execve (at least)
316 # ensure at least open and close are there.
317 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
318 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
319 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
320 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
321 # trace may contain other syscalls.
323 destroy_lttng_session
$SESSION_NAME
328 function test_syscall_enable_all_disable_all_twice
()
330 TRACE_PATH
=$
(mktemp
-d)
331 SESSION_NAME
="kernel_syscall_enable_all_disable_all_twice"
333 diag
"Syscall trace all events and enable/disable all twice"
335 create_lttng_session
$SESSION_NAME $TRACE_PATH
337 # enable all system calls
338 lttng_enable_kernel_syscall_ok
$SESSION_NAME
339 # disable all system calls
340 lttng_disable_kernel_syscall_ok
$SESSION_NAME
341 # enable all system calls
342 lttng_enable_kernel_syscall_ok
$SESSION_NAME
343 # disable all system calls
344 lttng_disable_kernel_syscall_ok
$SESSION_NAME
347 # generates open, close, execve (at least)
351 # ensure nothing has been traced.
352 validate_trace_empty
$TRACE_PATH
354 destroy_lttng_session
$SESSION_NAME
359 function test_syscall_enable_one_disable_one
()
361 TRACE_PATH
=$
(mktemp
-d)
362 SESSION_NAME
="kernel_syscall_enable_one_disable_one"
364 diag
"Syscall trace one event and disable one"
366 create_lttng_session
$SESSION_NAME $TRACE_PATH
368 # enable open system call
369 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
370 # disable open system call
371 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
374 # generates open, close, execve (at least)
378 # ensure nothing has been traced.
379 validate_trace_empty
$TRACE_PATH
381 destroy_lttng_session
$SESSION_NAME
386 function test_syscall_enable_two_disable_two
()
388 TRACE_PATH
=$
(mktemp
-d)
389 SESSION_NAME
="kernel_syscall_enable_two_disable_two"
391 diag
"Syscall trace two events and disable two"
393 create_lttng_session
$SESSION_NAME $TRACE_PATH
395 # enable open and close system calls
396 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
397 lttng_enable_kernel_syscall_ok
$SESSION_NAME "close"
398 # disable open and close system calls
399 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
400 lttng_disable_kernel_syscall_ok
$SESSION_NAME "close"
403 # generates open, close, execve (at least)
407 # ensure nothing has been traced.
408 validate_trace_empty
$TRACE_PATH
410 destroy_lttng_session
$SESSION_NAME
415 function test_syscall_enable_two_disable_one
()
417 TRACE_PATH
=$
(mktemp
-d)
418 SESSION_NAME
="kernel_syscall_enable_two_disable_one"
420 diag
"Syscall trace two events and disable one"
422 create_lttng_session
$SESSION_NAME $TRACE_PATH
424 # enable open and close system calls
425 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
426 lttng_enable_kernel_syscall_ok
$SESSION_NAME "close"
427 # disable close system call
428 lttng_disable_kernel_syscall_ok
$SESSION_NAME "close"
431 # generates open, close, execve (at least)
435 # ensure open is there.
436 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
437 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
439 # ensure trace only contains those.
440 validate_trace_only_exp
"-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
442 destroy_lttng_session
$SESSION_NAME
447 function test_syscall_disable_twice
()
449 TRACE_PATH
=$
(mktemp
-d)
450 SESSION_NAME
="kernel_syscall_disable_twice"
452 diag
"Syscall trace one event and disable twice"
454 create_lttng_session
$SESSION_NAME $TRACE_PATH
456 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
457 # First disable will succeed
458 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
459 # Second disable will fail
460 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open"
462 destroy_lttng_session
$SESSION_NAME
467 function test_syscall_disable_all_twice
()
469 TRACE_PATH
=$
(mktemp
-d)
470 SESSION_NAME
="kernel_syscall_disable_all_twice"
472 diag
"Syscall trace all events and disable all twice"
474 create_lttng_session
$SESSION_NAME $TRACE_PATH
476 lttng_enable_kernel_syscall_ok
$SESSION_NAME
477 # First disable will succeed
478 lttng_disable_kernel_syscall_ok
$SESSION_NAME
479 # Second disable will fail
480 lttng_disable_kernel_syscall_fail
$SESSION_NAME
482 destroy_lttng_session
$SESSION_NAME
488 function test_syscall_enable_unknown
()
490 TRACE_PATH
=$
(mktemp
-d)
491 SESSION_NAME
="kernel_syscall_enable_unknown"
493 diag
"Syscall enable an unknown event"
495 create_lttng_session
$SESSION_NAME $TRACE_PATH
497 lttng_enable_kernel_syscall_fail
$SESSION_NAME "thissyscallcannotexist"
499 destroy_lttng_session
$SESSION_NAME
504 function test_syscall_enable_all_enable_one
()
506 TRACE_PATH
=$
(mktemp
-d)
507 SESSION_NAME
="kernel_syscall_enable_all_enable_one"
509 diag
"Syscall enable all and enable one"
511 create_lttng_session
$SESSION_NAME $TRACE_PATH
513 lttng_enable_kernel_syscall_ok
$SESSION_NAME
514 # Enabling an event already enabled fails.
515 lttng_enable_kernel_syscall_fail
$SESSION_NAME "open"
517 destroy_lttng_session
$SESSION_NAME
522 function test_syscall_disable_all_disable_one
()
524 TRACE_PATH
=$
(mktemp
-d)
525 SESSION_NAME
="kernel_syscall_enable_all_enable_one"
527 diag
"Syscall disable all and disable one"
529 create_lttng_session
$SESSION_NAME $TRACE_PATH
531 lttng_enable_kernel_syscall_ok
$SESSION_NAME
532 lttng_disable_kernel_syscall_ok
$SESSION_NAME
533 # Disabling an event already disabled fails.
534 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open"
536 destroy_lttng_session
$SESSION_NAME
541 function test_syscall_enable_channel_disable_all
()
543 TRACE_PATH
=$
(mktemp
-d)
544 SESSION_NAME
="kernel_syscall_enable_channel_disable_all"
545 CHANNEL_NAME
="channel"
547 diag
"Syscall enable channel and disable all"
549 create_lttng_session
$SESSION_NAME $TRACE_PATH
551 lttng_enable_kernel_channel_ok
$SESSION_NAME $CHANNEL_NAME
552 lttng_disable_kernel_syscall_fail
$SESSION_NAME "-a" $CHANNEL_NAME
554 destroy_lttng_session
$SESSION_NAME
559 function test_syscall_enable_channel_disable_one
()
561 TRACE_PATH
=$
(mktemp
-d)
562 SESSION_NAME
="kernel_syscall_enable_channel_disable_all"
563 CHANNEL_NAME
="channel"
565 diag
"Syscall enable channel and disable one"
567 create_lttng_session
$SESSION_NAME $TRACE_PATH
569 lttng_enable_kernel_channel_ok
$SESSION_NAME $CHANNEL_NAME
570 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open" $CHANNEL_NAME
572 destroy_lttng_session
$SESSION_NAME
577 # MUST set TESTDIR before calling those functions
578 plan_tests
$NUM_TESTS
580 print_test_banner
"$TEST_DESC"
582 if [ "$(id -u)" == "0" ]; then
588 skip
$isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
592 test_syscall_event_list
593 test_syscall_simple_list
594 test_syscall_simple_list_two
598 test_syscall_all_disable_one
599 test_syscall_all_disable_two
600 test_syscall_enable_all_disable_all
601 test_syscall_enable_all_disable_all_enable_all
602 test_syscall_enable_all_disable_all_twice
603 test_syscall_enable_one_disable_one
604 test_syscall_enable_two_disable_two
605 test_syscall_enable_two_disable_one
606 test_syscall_disable_twice
607 test_syscall_disable_all_twice
608 test_syscall_enable_unknown
609 test_syscall_enable_all_enable_one
610 test_syscall_disable_all_disable_one
611 test_syscall_enable_channel_disable_all
612 test_syscall_enable_channel_disable_one