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 test_syscall_single
()
32 TRACE_PATH
=$
(mktemp
-d)
33 SESSION_NAME
="kernel_syscall_single"
35 diag
"Syscall trace single"
37 create_lttng_session
$SESSION_NAME $TRACE_PATH
39 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
45 # ensure each is there.
46 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
47 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
49 # ensure trace only contains those.
50 validate_trace_only_exp
"-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
52 destroy_lttng_session
$SESSION_NAME
57 function test_syscall_two
()
59 TRACE_PATH
=$
(mktemp
-d)
60 SESSION_NAME
="kernel_syscall_two"
62 diag
"Syscall trace two events"
64 create_lttng_session
$SESSION_NAME $TRACE_PATH
66 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
67 lttng_enable_kernel_syscall_ok
$SESSION_NAME "close"
73 # ensure each is there.
74 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
75 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
76 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
77 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
79 # ensure trace only contains those.
80 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
82 destroy_lttng_session
$SESSION_NAME
87 function test_syscall_all
()
89 TRACE_PATH
=$
(mktemp
-d)
90 SESSION_NAME
="kernel_syscall_all"
92 diag
"Syscall trace all events"
94 create_lttng_session
$SESSION_NAME $TRACE_PATH
97 lttng_enable_kernel_syscall_ok
$SESSION_NAME
103 # ensure at least open and close are there.
104 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
105 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
106 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
107 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
108 # trace may contain other syscalls.
110 destroy_lttng_session
$SESSION_NAME
115 function test_syscall_all_disable_one
()
117 TRACE_PATH
=$
(mktemp
-d)
118 SESSION_NAME
="kernel_syscall_all_disable_one"
120 diag
"Syscall trace all events and disable one"
122 create_lttng_session
$SESSION_NAME $TRACE_PATH
124 # enable all syscalls
125 lttng_enable_kernel_syscall_ok
$SESSION_NAME
126 # disable open system call
127 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
133 # ensure "open" syscall is not there.
134 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
136 # ensure "close" syscall is there.
137 validate_trace_exp
"-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH
138 validate_trace_exp
"-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH
140 destroy_lttng_session
$SESSION_NAME
145 function test_syscall_all_disable_two
()
147 TRACE_PATH
=$
(mktemp
-d)
148 SESSION_NAME
="kernel_syscall_all_disable_two"
150 diag
"Syscall trace all events and disable two"
152 create_lttng_session
$SESSION_NAME $TRACE_PATH
154 # enable all syscalls
155 lttng_enable_kernel_syscall_ok
$SESSION_NAME
156 # disable open system call
157 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
158 lttng_disable_kernel_syscall_ok
$SESSION_NAME "close"
161 # generates open, close, execve (at least)
165 # ensure "open" and "close" syscalls are not there.
166 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
168 # ensure "execve" syscall is there.
169 validate_trace_exp
"-e syscall_entry_execve: -e compat_syscall_entry_execve:" $TRACE_PATH
170 validate_trace_exp
"-e syscall_exit_execve: -e compat_syscall_exit_execve:" $TRACE_PATH
172 destroy_lttng_session
$SESSION_NAME
177 function test_syscall_enable_all_disable_all
()
179 TRACE_PATH
=$
(mktemp
-d)
180 SESSION_NAME
="kernel_syscall_enable_all_disable_all"
182 diag
"Syscall trace all events and disable all"
184 create_lttng_session
$SESSION_NAME $TRACE_PATH
186 # enable all system calls
187 lttng_enable_kernel_syscall_ok
$SESSION_NAME
188 # disable all system calls
189 lttng_disable_kernel_syscall_ok
$SESSION_NAME
192 # generates open, close, execve (at least)
196 # ensure nothing has been traced.
197 validate_trace_empty
$TRACE_PATH
199 destroy_lttng_session
$SESSION_NAME
204 function test_syscall_enable_all_disable_all_enable_all
()
206 TRACE_PATH
=$
(mktemp
-d)
207 SESSION_NAME
="kernel_syscall_enable_all_disable_all_enable_all"
209 diag
"Syscall trace all events and enable/disable all"
211 create_lttng_session
$SESSION_NAME $TRACE_PATH
213 # enable all system calls
214 lttng_enable_kernel_syscall_ok
$SESSION_NAME
215 # disable all system calls
216 lttng_disable_kernel_syscall_ok
$SESSION_NAME
217 # enable all system calls
218 lttng_enable_kernel_syscall_ok
$SESSION_NAME
221 # generates open, close, execve (at least)
225 # ensure at least open and close are there.
226 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
227 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
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
230 # trace may contain other syscalls.
232 destroy_lttng_session
$SESSION_NAME
237 function test_syscall_enable_all_disable_all_twice
()
239 TRACE_PATH
=$
(mktemp
-d)
240 SESSION_NAME
="kernel_syscall_enable_all_disable_all_twice"
242 diag
"Syscall trace all events and enable/disable all twice"
244 create_lttng_session
$SESSION_NAME $TRACE_PATH
246 # enable all system calls
247 lttng_enable_kernel_syscall_ok
$SESSION_NAME
248 # disable all system calls
249 lttng_disable_kernel_syscall_ok
$SESSION_NAME
250 # enable all system calls
251 lttng_enable_kernel_syscall_ok
$SESSION_NAME
252 # disable all system calls
253 lttng_disable_kernel_syscall_ok
$SESSION_NAME
256 # generates open, close, execve (at least)
260 # ensure nothing has been traced.
261 validate_trace_empty
$TRACE_PATH
263 destroy_lttng_session
$SESSION_NAME
268 function test_syscall_enable_one_disable_one
()
270 TRACE_PATH
=$
(mktemp
-d)
271 SESSION_NAME
="kernel_syscall_enable_one_disable_one"
273 diag
"Syscall trace one event and disable one"
275 create_lttng_session
$SESSION_NAME $TRACE_PATH
277 # enable open system call
278 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
279 # disable open system call
280 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
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_two_disable_two
()
297 TRACE_PATH
=$
(mktemp
-d)
298 SESSION_NAME
="kernel_syscall_enable_two_disable_two"
300 diag
"Syscall trace two events and disable two"
302 create_lttng_session
$SESSION_NAME $TRACE_PATH
304 # enable open and close system calls
305 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
306 lttng_enable_kernel_syscall_ok
$SESSION_NAME "close"
307 # disable open and close system calls
308 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
309 lttng_disable_kernel_syscall_ok
$SESSION_NAME "close"
312 # generates open, close, execve (at least)
316 # ensure nothing has been traced.
317 validate_trace_empty
$TRACE_PATH
319 destroy_lttng_session
$SESSION_NAME
324 function test_syscall_enable_two_disable_one
()
326 TRACE_PATH
=$
(mktemp
-d)
327 SESSION_NAME
="kernel_syscall_enable_two_disable_one"
329 diag
"Syscall trace two events and disable one"
331 create_lttng_session
$SESSION_NAME $TRACE_PATH
333 # enable open and close system calls
334 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
335 lttng_enable_kernel_syscall_ok
$SESSION_NAME "close"
336 # disable close system call
337 lttng_disable_kernel_syscall_ok
$SESSION_NAME "close"
340 # generates open, close, execve (at least)
344 # ensure open is there.
345 validate_trace_exp
"-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH
346 validate_trace_exp
"-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
348 # ensure trace only contains those.
349 validate_trace_only_exp
"-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH
351 destroy_lttng_session
$SESSION_NAME
356 function test_syscall_disable_twice
()
358 TRACE_PATH
=$
(mktemp
-d)
359 SESSION_NAME
="kernel_syscall_disable_twice"
361 diag
"Syscall trace one event and disable twice"
363 create_lttng_session
$SESSION_NAME $TRACE_PATH
365 lttng_enable_kernel_syscall_ok
$SESSION_NAME "open"
366 # First disable will succeed
367 lttng_disable_kernel_syscall_ok
$SESSION_NAME "open"
368 # Second disable will fail
369 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open"
371 destroy_lttng_session
$SESSION_NAME
376 function test_syscall_disable_all_twice
()
378 TRACE_PATH
=$
(mktemp
-d)
379 SESSION_NAME
="kernel_syscall_disable_all_twice"
381 diag
"Syscall trace all events and disable all twice"
383 create_lttng_session
$SESSION_NAME $TRACE_PATH
385 lttng_enable_kernel_syscall_ok
$SESSION_NAME
386 # First disable will succeed
387 lttng_disable_kernel_syscall_ok
$SESSION_NAME
388 # Second disable will fail
389 lttng_disable_kernel_syscall_fail
$SESSION_NAME
391 destroy_lttng_session
$SESSION_NAME
397 function test_syscall_enable_unknown
()
399 TRACE_PATH
=$
(mktemp
-d)
400 SESSION_NAME
="kernel_syscall_enable_unknown"
402 diag
"Syscall enable an unknown event"
404 create_lttng_session
$SESSION_NAME $TRACE_PATH
406 lttng_enable_kernel_syscall_fail
$SESSION_NAME "thissyscallcannotexist"
408 destroy_lttng_session
$SESSION_NAME
413 function test_syscall_enable_all_enable_one
()
415 TRACE_PATH
=$
(mktemp
-d)
416 SESSION_NAME
="kernel_syscall_enable_all_enable_one"
418 diag
"Syscall enable all and enable one"
420 create_lttng_session
$SESSION_NAME $TRACE_PATH
422 lttng_enable_kernel_syscall_ok
$SESSION_NAME
423 # Enabling an event already enabled fails.
424 lttng_enable_kernel_syscall_fail
$SESSION_NAME "open"
426 destroy_lttng_session
$SESSION_NAME
431 function test_syscall_disable_all_disable_one
()
433 TRACE_PATH
=$
(mktemp
-d)
434 SESSION_NAME
="kernel_syscall_enable_all_enable_one"
436 diag
"Syscall disable all and disable one"
438 create_lttng_session
$SESSION_NAME $TRACE_PATH
440 lttng_enable_kernel_syscall_ok
$SESSION_NAME
441 lttng_disable_kernel_syscall_ok
$SESSION_NAME
442 # Disabling an event already disabled fails.
443 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open"
445 destroy_lttng_session
$SESSION_NAME
450 function test_syscall_enable_channel_disable_all
()
452 TRACE_PATH
=$
(mktemp
-d)
453 SESSION_NAME
="kernel_syscall_enable_channel_disable_all"
454 CHANNEL_NAME
="channel"
456 diag
"Syscall enable channel and disable all"
458 create_lttng_session
$SESSION_NAME $TRACE_PATH
460 lttng_enable_kernel_channel_ok
$SESSION_NAME $CHANNEL_NAME
461 lttng_disable_kernel_syscall_fail
$SESSION_NAME "-a" $CHANNEL_NAME
463 destroy_lttng_session
$SESSION_NAME
468 function test_syscall_enable_channel_disable_one
()
470 TRACE_PATH
=$
(mktemp
-d)
471 SESSION_NAME
="kernel_syscall_enable_channel_disable_all"
472 CHANNEL_NAME
="channel"
474 diag
"Syscall enable channel and disable one"
476 create_lttng_session
$SESSION_NAME $TRACE_PATH
478 lttng_enable_kernel_channel_ok
$SESSION_NAME $CHANNEL_NAME
479 lttng_disable_kernel_syscall_fail
$SESSION_NAME "open" $CHANNEL_NAME
481 destroy_lttng_session
$SESSION_NAME
486 # MUST set TESTDIR before calling those functions
487 plan_tests
$NUM_TESTS
489 print_test_banner
"$TEST_DESC"
491 if [ "$(id -u)" == "0" ]; then
497 skip
$isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
504 test_syscall_all_disable_one
505 test_syscall_all_disable_two
506 test_syscall_enable_all_disable_all
507 test_syscall_enable_all_disable_all_enable_all
508 test_syscall_enable_all_disable_all_twice
509 test_syscall_enable_one_disable_one
510 test_syscall_enable_two_disable_two
511 test_syscall_enable_two_disable_one
512 test_syscall_disable_twice
513 test_syscall_disable_all_twice
514 test_syscall_enable_unknown
515 test_syscall_enable_all_enable_one
516 test_syscall_disable_all_disable_one
517 test_syscall_enable_channel_disable_all
518 test_syscall_enable_channel_disable_one