Commit | Line | Data |
---|---|---|
8cfcd41c MD |
1 | #!/bin/bash |
2 | # | |
9d16b343 MJ |
3 | # Copyright (C) 2013 Christian Babeux <christian.babeux@efficios.com> |
4 | # Copyright (C) 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> | |
8cfcd41c | 5 | # |
9d16b343 | 6 | # SPDX-License-Identifier: GPL-2.0-only |
8cfcd41c | 7 | # |
8cfcd41c MD |
8 | |
9 | TEST_DESC="Kernel tracer - System calls" | |
10 | ||
11 | CURDIR=$(dirname $0)/ | |
12 | TESTDIR=$CURDIR/../.. | |
0ee507ec | 13 | NUM_TESTS=214 |
8cfcd41c | 14 | |
c8e51d15 FD |
15 | # `gen-syscall-event` starts and waits for the creation a file passed by |
16 | # arguments to start executing 3 syscalls (open,read,close) and returning. | |
17 | TESTCMD="$TESTDIR/utils/testapp/gen-syscall-events/gen-syscall-events" | |
8cfcd41c MD |
18 | |
19 | source $TESTDIR/utils/utils.sh | |
20 | ||
c8e51d15 FD |
21 | function trace_testapp() |
22 | { | |
23 | local start_file_sync | |
24 | start_file_sync=$(mktemp -u) | |
25 | ||
26 | # Clear all entries from the resource tracker | |
27 | lttng_untrack_kernel_all_ok | |
28 | ||
29 | # Launch the testapp and save its Process ID | |
ca342eaf | 30 | ./"$TESTCMD" "$start_file_sync" "/proc/cpuinfo" "/proc/cmdline" & |
c8e51d15 FD |
31 | PID=$! |
32 | ||
33 | # Set LTTng to track this PID and start the tracing | |
34 | lttng_track_pid_ok $PID | |
35 | ||
36 | start_lttng_tracing_ok | |
37 | ||
38 | # Create start file to launch the execution of the workload by the | |
39 | # test app | |
40 | touch "$start_file_sync" | |
41 | ||
42 | wait $PID | |
43 | ||
44 | stop_lttng_tracing_ok | |
45 | ||
46 | # Clean up the synchronization file | |
47 | rm -f "$start_file_sync" | |
48 | } | |
49 | ||
02db71ba DG |
50 | function validate_list() |
51 | { | |
52 | local session_name=$1 | |
53 | local event_name=$2 | |
54 | local opt=$3 | |
55 | ||
56 | out=$($TESTDIR/../src/bin/lttng/$LTTNG_BIN list $session_name $opt | grep $event_name) | |
57 | if [ -z "$out" ]; then | |
58 | fail "Validate syscall listing" | |
59 | diag "$event_name not found when listing $session_name (opt $opt)" | |
60 | else | |
61 | pass "Validate syscall listing. Found $event_name." | |
62 | fi | |
63 | } | |
64 | ||
65 | function test_syscall_event_list() | |
66 | { | |
67 | local EVENT_NAME="getpid" | |
68 | ||
69 | diag "Syscall event listing" | |
70 | ||
71 | validate_list "" $EVENT_NAME "-k --syscall" | |
72 | } | |
73 | ||
74 | function test_syscall_simple_list() | |
75 | { | |
76 | TRACE_PATH=$(mktemp -d) | |
77 | SESSION_NAME="kernel_syscall_simple_list" | |
78 | local EVENT_NAME="close" | |
79 | ||
80 | diag "Syscall simple listing" | |
81 | ||
bf6ae429 | 82 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
02db71ba DG |
83 | |
84 | lttng_enable_kernel_syscall_ok $SESSION_NAME $EVENT_NAME | |
85 | ||
86 | validate_list $SESSION_NAME $EVENT_NAME | |
87 | ||
c8e51d15 | 88 | trace_testapp |
02db71ba | 89 | |
c8e51d15 | 90 | # ensure all events are in the trace. |
02db71ba DG |
91 | validate_trace_exp "-e syscall_entry_$EVENT_NAME: -e compat_syscall_entry_$EVENT_NAME:" $TRACE_PATH |
92 | validate_trace_exp "-e syscall_exit_$EVENT_NAME: -e compat_syscall_exit_$EVENT_NAME:" $TRACE_PATH | |
93 | ||
94 | # ensure trace only contains those. | |
95 | 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 | |
96 | ||
67b4c664 | 97 | destroy_lttng_session_ok $SESSION_NAME |
02db71ba DG |
98 | |
99 | rm -rf $TRACE_PATH | |
100 | } | |
101 | ||
102 | function test_syscall_simple_list_two() | |
103 | { | |
104 | TRACE_PATH=$(mktemp -d) | |
105 | SESSION_NAME="kernel_syscall_simple_list_two" | |
106 | local EVENT_NAME="close" | |
107 | local EVENT_NAME2="read" | |
108 | ||
109 | diag "Syscall simple listing" | |
110 | ||
bf6ae429 | 111 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
02db71ba DG |
112 | |
113 | lttng_enable_kernel_syscall_ok $SESSION_NAME $EVENT_NAME | |
114 | lttng_enable_kernel_syscall_ok $SESSION_NAME $EVENT_NAME2 | |
115 | ||
116 | validate_list $SESSION_NAME $EVENT_NAME | |
117 | validate_list $SESSION_NAME $EVENT_NAME2 | |
118 | ||
c8e51d15 | 119 | trace_testapp |
02db71ba | 120 | |
c8e51d15 | 121 | # ensure all events are in the trace. |
02db71ba DG |
122 | validate_trace_exp "-e syscall_entry_$EVENT_NAME: -e compat_syscall_entry_$EVENT_NAME:" $TRACE_PATH |
123 | validate_trace_exp "-e syscall_exit_$EVENT_NAME: -e compat_syscall_exit_$EVENT_NAME:" $TRACE_PATH | |
124 | ||
02db71ba DG |
125 | validate_trace_exp "-e syscall_entry_$EVENT_NAME2: -e compat_syscall_entry_$EVENT_NAME2:" $TRACE_PATH |
126 | validate_trace_exp "-e syscall_exit_$EVENT_NAME2: -e compat_syscall_exit_$EVENT_NAME2:" $TRACE_PATH | |
127 | ||
128 | # ensure trace only contains those. | |
129 | 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 | |
130 | ||
67b4c664 | 131 | destroy_lttng_session_ok $SESSION_NAME |
02db71ba DG |
132 | |
133 | rm -rf $TRACE_PATH | |
134 | } | |
135 | ||
8cfcd41c MD |
136 | function test_syscall_single() |
137 | { | |
138 | TRACE_PATH=$(mktemp -d) | |
139 | SESSION_NAME="kernel_syscall_single" | |
140 | ||
031f232e DG |
141 | diag "Syscall trace single" |
142 | ||
bf6ae429 | 143 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c | 144 | |
8192bd8f | 145 | lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c | 146 | |
c8e51d15 | 147 | trace_testapp |
8cfcd41c | 148 | |
c8e51d15 | 149 | # ensure all events are in the trace. |
8192bd8f FD |
150 | validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH |
151 | validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH | |
8cfcd41c MD |
152 | |
153 | # ensure trace only contains those. | |
8192bd8f | 154 | validate_trace_only_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH |
8cfcd41c | 155 | |
67b4c664 | 156 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
157 | |
158 | rm -rf $TRACE_PATH | |
159 | } | |
160 | ||
161 | function test_syscall_two() | |
162 | { | |
163 | TRACE_PATH=$(mktemp -d) | |
164 | SESSION_NAME="kernel_syscall_two" | |
165 | ||
031f232e DG |
166 | diag "Syscall trace two events" |
167 | ||
bf6ae429 | 168 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c | 169 | |
8192bd8f | 170 | lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c MD |
171 | lttng_enable_kernel_syscall_ok $SESSION_NAME "close" |
172 | ||
c8e51d15 | 173 | trace_testapp |
8cfcd41c | 174 | |
c8e51d15 | 175 | # ensure all events are in the trace. |
8192bd8f FD |
176 | validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH |
177 | validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH | |
a39bd0ab MD |
178 | validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH |
179 | validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH | |
8cfcd41c MD |
180 | |
181 | # ensure trace only contains those. | |
8192bd8f | 182 | validate_trace_only_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat: -e syscall_entry_close: -e compat_syscall_entry_close: -e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH |
8cfcd41c | 183 | |
67b4c664 | 184 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
185 | |
186 | rm -rf $TRACE_PATH | |
187 | } | |
188 | ||
189 | function test_syscall_all() | |
190 | { | |
191 | TRACE_PATH=$(mktemp -d) | |
192 | SESSION_NAME="kernel_syscall_all" | |
193 | ||
031f232e DG |
194 | diag "Syscall trace all events" |
195 | ||
bf6ae429 | 196 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
197 | |
198 | # enable all syscalls | |
199 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
200 | ||
c8e51d15 | 201 | trace_testapp |
8cfcd41c MD |
202 | |
203 | # ensure at least open and close are there. | |
8192bd8f FD |
204 | validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH |
205 | validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH | |
a39bd0ab MD |
206 | validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH |
207 | validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH | |
8cfcd41c MD |
208 | # trace may contain other syscalls. |
209 | ||
67b4c664 | 210 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
211 | |
212 | rm -rf $TRACE_PATH | |
213 | } | |
214 | ||
215 | function test_syscall_all_disable_one() | |
216 | { | |
217 | TRACE_PATH=$(mktemp -d) | |
218 | SESSION_NAME="kernel_syscall_all_disable_one" | |
219 | ||
031f232e DG |
220 | diag "Syscall trace all events and disable one" |
221 | ||
bf6ae429 | 222 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
223 | |
224 | # enable all syscalls | |
225 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
fac26884 MD |
226 | # try to disable open system call: fails because enabler semantic of |
227 | # "all syscalls" is not "the open" system call. | |
8192bd8f | 228 | lttng_disable_kernel_syscall_fail $SESSION_NAME "openat" |
8cfcd41c | 229 | |
c8e51d15 | 230 | trace_testapp |
8cfcd41c | 231 | |
8192bd8f FD |
232 | # ensure "openat" syscall is there. |
233 | validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH | |
8cfcd41c MD |
234 | |
235 | # ensure "close" syscall is there. | |
a39bd0ab MD |
236 | validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH |
237 | validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH | |
8cfcd41c | 238 | |
67b4c664 | 239 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
240 | |
241 | rm -rf $TRACE_PATH | |
242 | } | |
243 | ||
244 | function test_syscall_all_disable_two() | |
245 | { | |
246 | TRACE_PATH=$(mktemp -d) | |
247 | SESSION_NAME="kernel_syscall_all_disable_two" | |
248 | ||
031f232e DG |
249 | diag "Syscall trace all events and disable two" |
250 | ||
bf6ae429 | 251 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
252 | |
253 | # enable all syscalls | |
254 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
fac26884 MD |
255 | # try to disable open and close system calls: fails because enabler |
256 | # semantic of "all syscalls" is not "the open" system call. | |
8192bd8f | 257 | lttng_disable_kernel_syscall_fail $SESSION_NAME "openat" |
fac26884 | 258 | lttng_disable_kernel_syscall_fail $SESSION_NAME "close" |
8cfcd41c | 259 | |
c8e51d15 | 260 | trace_testapp |
8cfcd41c | 261 | |
8192bd8f FD |
262 | # ensure "openat" syscall is there. |
263 | validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH | |
fac26884 MD |
264 | |
265 | # ensure "close" syscall is there. | |
266 | validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH | |
267 | validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH | |
8cfcd41c | 268 | |
c8e51d15 FD |
269 | # ensure "read" syscall is there. |
270 | validate_trace_exp "-e syscall_entry_read: -e compat_syscall_entry_read:" $TRACE_PATH | |
271 | validate_trace_exp "-e syscall_exit_read: -e compat_syscall_exit_read:" $TRACE_PATH | |
8cfcd41c | 272 | |
67b4c664 | 273 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
274 | |
275 | rm -rf $TRACE_PATH | |
276 | } | |
277 | ||
278 | function test_syscall_enable_all_disable_all() | |
279 | { | |
280 | TRACE_PATH=$(mktemp -d) | |
281 | SESSION_NAME="kernel_syscall_enable_all_disable_all" | |
282 | ||
031f232e DG |
283 | diag "Syscall trace all events and disable all" |
284 | ||
bf6ae429 | 285 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
286 | |
287 | # enable all system calls | |
288 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
289 | # disable all system calls | |
290 | lttng_disable_kernel_syscall_ok $SESSION_NAME | |
291 | ||
c8e51d15 | 292 | trace_testapp |
8cfcd41c MD |
293 | |
294 | # ensure nothing has been traced. | |
295 | validate_trace_empty $TRACE_PATH | |
296 | ||
67b4c664 | 297 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
298 | |
299 | rm -rf $TRACE_PATH | |
300 | } | |
301 | ||
302 | function test_syscall_enable_all_disable_all_enable_all() | |
303 | { | |
304 | TRACE_PATH=$(mktemp -d) | |
305 | SESSION_NAME="kernel_syscall_enable_all_disable_all_enable_all" | |
306 | ||
031f232e DG |
307 | diag "Syscall trace all events and enable/disable all" |
308 | ||
bf6ae429 | 309 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
310 | |
311 | # enable all system calls | |
312 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
313 | # disable all system calls | |
314 | lttng_disable_kernel_syscall_ok $SESSION_NAME | |
315 | # enable all system calls | |
316 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
317 | ||
c8e51d15 | 318 | trace_testapp |
8cfcd41c MD |
319 | |
320 | # ensure at least open and close are there. | |
8192bd8f FD |
321 | validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH |
322 | validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH | |
a39bd0ab MD |
323 | validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH |
324 | validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH | |
8cfcd41c MD |
325 | # trace may contain other syscalls. |
326 | ||
67b4c664 | 327 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
328 | |
329 | rm -rf $TRACE_PATH | |
330 | } | |
331 | ||
0ee507ec MJ |
332 | function test_syscall_enable_all_enable_one_disable_all() |
333 | { | |
334 | TRACE_PATH=$(mktemp -d) | |
335 | SESSION_NAME="kernel_syscall_enable_all_enable_one_disable_all" | |
336 | ||
337 | diag "Syscall trace all events, enable one and disable all" | |
338 | ||
339 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" | |
340 | ||
341 | # enable all syscalls | |
342 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
343 | ||
344 | # enable one specific syscall, "openat" | |
345 | lttng_enable_kernel_syscall_ok $SESSION_NAME openat | |
346 | ||
347 | # disable all syscalls | |
348 | lttng_disable_kernel_syscall_ok $SESSION_NAME | |
349 | ||
350 | trace_testapp | |
351 | ||
352 | # The trace shouldn't contain any syscalls, disable-all should disable | |
353 | # even individually specified syscalls | |
354 | trace_match_only openat 0 "$TRACE_PATH" | |
355 | ||
356 | destroy_lttng_session_ok $SESSION_NAME | |
357 | ||
358 | rm -rf "$TRACE_PATH" | |
359 | } | |
360 | ||
361 | function test_syscall_enable_one_enable_all_disable_one() | |
362 | { | |
363 | TRACE_PATH=$(mktemp -d) | |
364 | SESSION_NAME="kernel_syscall_enable_one_enable_all_disable_one" | |
365 | ||
366 | diag "Syscall trace all events and enable/disable one" | |
367 | ||
368 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" | |
369 | ||
370 | # enable one specific syscall, "openat" | |
371 | lttng_enable_kernel_syscall_ok $SESSION_NAME openat | |
372 | ||
373 | # enable all syscalls | |
374 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
375 | ||
376 | # disable one specific syscall, "openat" | |
377 | lttng_disable_kernel_syscall_ok $SESSION_NAME openat | |
378 | ||
379 | trace_testapp | |
380 | ||
381 | # The trace should contain all syscalls, including 'openat' because | |
382 | # enable-all overrides individually disabled syscalls. | |
383 | validate_trace openat "$TRACE_PATH" | |
384 | ||
385 | destroy_lttng_session_ok $SESSION_NAME | |
386 | ||
387 | rm -rf "$TRACE_PATH" | |
388 | } | |
389 | ||
390 | function test_syscall_enable_one_enable_all_disable_all_disable_one() | |
391 | { | |
392 | TRACE_PATH=$(mktemp -d) | |
393 | SESSION_NAME="kernel_syscall_enable_one_enable_all_disable_all_disable_one" | |
394 | ||
395 | diag "Syscall trace all events and enable/disable one" | |
396 | ||
397 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" | |
398 | ||
399 | # enable one specific syscall, "openat" | |
400 | lttng_enable_kernel_syscall_ok $SESSION_NAME openat | |
401 | ||
402 | # enable all syscalls | |
403 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
404 | ||
405 | # disable all syscalls | |
406 | lttng_disable_kernel_syscall_ok $SESSION_NAME | |
407 | ||
408 | # disable one specific syscall, "openat" | |
409 | lttng_disable_kernel_syscall_ok $SESSION_NAME openat | |
410 | ||
411 | trace_testapp | |
412 | ||
413 | # The trace shouldn't contain any syscalls, disable-all should disable | |
414 | # even individually specified syscalls | |
415 | trace_match_only openat 0 "$TRACE_PATH" | |
416 | ||
417 | destroy_lttng_session_ok $SESSION_NAME | |
418 | ||
419 | rm -rf "$TRACE_PATH" | |
420 | } | |
421 | ||
8cfcd41c MD |
422 | function test_syscall_enable_all_disable_all_twice() |
423 | { | |
424 | TRACE_PATH=$(mktemp -d) | |
425 | SESSION_NAME="kernel_syscall_enable_all_disable_all_twice" | |
426 | ||
031f232e DG |
427 | diag "Syscall trace all events and enable/disable all twice" |
428 | ||
bf6ae429 | 429 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
430 | |
431 | # enable all system calls | |
432 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
433 | # disable all system calls | |
434 | lttng_disable_kernel_syscall_ok $SESSION_NAME | |
435 | # enable all system calls | |
436 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
437 | # disable all system calls | |
438 | lttng_disable_kernel_syscall_ok $SESSION_NAME | |
439 | ||
c8e51d15 | 440 | trace_testapp |
8cfcd41c MD |
441 | |
442 | # ensure nothing has been traced. | |
443 | validate_trace_empty $TRACE_PATH | |
444 | ||
67b4c664 | 445 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
446 | |
447 | rm -rf $TRACE_PATH | |
448 | } | |
449 | ||
450 | function test_syscall_enable_one_disable_one() | |
451 | { | |
452 | TRACE_PATH=$(mktemp -d) | |
453 | SESSION_NAME="kernel_syscall_enable_one_disable_one" | |
454 | ||
031f232e DG |
455 | diag "Syscall trace one event and disable one" |
456 | ||
bf6ae429 | 457 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
458 | |
459 | # enable open system call | |
8192bd8f | 460 | lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c | 461 | # disable open system call |
8192bd8f | 462 | lttng_disable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c | 463 | |
c8e51d15 | 464 | trace_testapp |
8cfcd41c MD |
465 | |
466 | # ensure nothing has been traced. | |
467 | validate_trace_empty $TRACE_PATH | |
468 | ||
67b4c664 | 469 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
470 | |
471 | rm -rf $TRACE_PATH | |
472 | } | |
473 | ||
474 | function test_syscall_enable_two_disable_two() | |
475 | { | |
476 | TRACE_PATH=$(mktemp -d) | |
477 | SESSION_NAME="kernel_syscall_enable_two_disable_two" | |
478 | ||
031f232e DG |
479 | diag "Syscall trace two events and disable two" |
480 | ||
bf6ae429 | 481 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
482 | |
483 | # enable open and close system calls | |
8192bd8f | 484 | lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c MD |
485 | lttng_enable_kernel_syscall_ok $SESSION_NAME "close" |
486 | # disable open and close system calls | |
8192bd8f | 487 | lttng_disable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c MD |
488 | lttng_disable_kernel_syscall_ok $SESSION_NAME "close" |
489 | ||
c8e51d15 | 490 | trace_testapp |
8cfcd41c MD |
491 | |
492 | # ensure nothing has been traced. | |
493 | validate_trace_empty $TRACE_PATH | |
494 | ||
67b4c664 | 495 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
496 | |
497 | rm -rf $TRACE_PATH | |
498 | } | |
499 | ||
500 | function test_syscall_enable_two_disable_one() | |
501 | { | |
502 | TRACE_PATH=$(mktemp -d) | |
503 | SESSION_NAME="kernel_syscall_enable_two_disable_one" | |
504 | ||
031f232e DG |
505 | diag "Syscall trace two events and disable one" |
506 | ||
bf6ae429 | 507 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
508 | |
509 | # enable open and close system calls | |
8192bd8f | 510 | lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c MD |
511 | lttng_enable_kernel_syscall_ok $SESSION_NAME "close" |
512 | # disable close system call | |
513 | lttng_disable_kernel_syscall_ok $SESSION_NAME "close" | |
514 | ||
c8e51d15 | 515 | trace_testapp |
8cfcd41c MD |
516 | |
517 | # ensure open is there. | |
8192bd8f FD |
518 | validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH |
519 | validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH | |
8cfcd41c MD |
520 | |
521 | # ensure trace only contains those. | |
8192bd8f | 522 | validate_trace_only_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH |
8cfcd41c | 523 | |
67b4c664 | 524 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
525 | |
526 | rm -rf $TRACE_PATH | |
527 | } | |
528 | ||
529 | function test_syscall_disable_twice() | |
530 | { | |
531 | TRACE_PATH=$(mktemp -d) | |
532 | SESSION_NAME="kernel_syscall_disable_twice" | |
533 | ||
031f232e DG |
534 | diag "Syscall trace one event and disable twice" |
535 | ||
bf6ae429 | 536 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c | 537 | |
8192bd8f | 538 | lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c | 539 | # First disable will succeed |
8192bd8f | 540 | lttng_disable_kernel_syscall_ok $SESSION_NAME "openat" |
fac26884 | 541 | # Second disable succeeds too, due to enabler semantic. |
8192bd8f | 542 | lttng_disable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c | 543 | |
67b4c664 | 544 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
545 | |
546 | rm -rf $TRACE_PATH | |
547 | } | |
548 | ||
549 | function test_syscall_disable_all_twice() | |
550 | { | |
551 | TRACE_PATH=$(mktemp -d) | |
552 | SESSION_NAME="kernel_syscall_disable_all_twice" | |
553 | ||
031f232e DG |
554 | diag "Syscall trace all events and disable all twice" |
555 | ||
bf6ae429 | 556 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
557 | |
558 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
559 | # First disable will succeed | |
560 | lttng_disable_kernel_syscall_ok $SESSION_NAME | |
fac26884 MD |
561 | # Second disable succeeds too, due to enabler semantic. |
562 | lttng_disable_kernel_syscall_ok $SESSION_NAME | |
8cfcd41c | 563 | |
67b4c664 | 564 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
565 | |
566 | rm -rf $TRACE_PATH | |
567 | } | |
568 | ||
569 | ||
570 | function test_syscall_enable_unknown() | |
571 | { | |
572 | TRACE_PATH=$(mktemp -d) | |
573 | SESSION_NAME="kernel_syscall_enable_unknown" | |
574 | ||
031f232e DG |
575 | diag "Syscall enable an unknown event" |
576 | ||
bf6ae429 | 577 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c | 578 | |
fac26884 MD |
579 | # Enabling a syscall that does not exist succeeds, due to enabler |
580 | # semantic. | |
581 | lttng_enable_kernel_syscall_ok $SESSION_NAME "thissyscallcannotexist" | |
8cfcd41c | 582 | |
67b4c664 | 583 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
584 | |
585 | rm -rf $TRACE_PATH | |
586 | } | |
587 | ||
588 | function test_syscall_enable_all_enable_one() | |
589 | { | |
590 | TRACE_PATH=$(mktemp -d) | |
591 | SESSION_NAME="kernel_syscall_enable_all_enable_one" | |
592 | ||
031f232e DG |
593 | diag "Syscall enable all and enable one" |
594 | ||
bf6ae429 | 595 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
596 | |
597 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
fac26884 | 598 | # Enabling an event already enabled succeeds, due to enabler semantic. |
8192bd8f | 599 | lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" |
8cfcd41c | 600 | |
67b4c664 | 601 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
602 | |
603 | rm -rf $TRACE_PATH | |
604 | } | |
605 | ||
606 | function test_syscall_disable_all_disable_one() | |
607 | { | |
608 | TRACE_PATH=$(mktemp -d) | |
609 | SESSION_NAME="kernel_syscall_enable_all_enable_one" | |
610 | ||
031f232e DG |
611 | diag "Syscall disable all and disable one" |
612 | ||
bf6ae429 | 613 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
8cfcd41c MD |
614 | |
615 | lttng_enable_kernel_syscall_ok $SESSION_NAME | |
616 | lttng_disable_kernel_syscall_ok $SESSION_NAME | |
617 | # Disabling an event already disabled fails. | |
8192bd8f | 618 | lttng_disable_kernel_syscall_fail $SESSION_NAME "openat" |
8cfcd41c | 619 | |
67b4c664 | 620 | destroy_lttng_session_ok $SESSION_NAME |
8cfcd41c MD |
621 | |
622 | rm -rf $TRACE_PATH | |
623 | } | |
624 | ||
d96f6315 MD |
625 | function test_syscall_enable_channel_disable_all() |
626 | { | |
627 | TRACE_PATH=$(mktemp -d) | |
628 | SESSION_NAME="kernel_syscall_enable_channel_disable_all" | |
629 | CHANNEL_NAME="channel" | |
630 | ||
031f232e DG |
631 | diag "Syscall enable channel and disable all" |
632 | ||
bf6ae429 | 633 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
d96f6315 MD |
634 | |
635 | lttng_enable_kernel_channel_ok $SESSION_NAME $CHANNEL_NAME | |
fac26884 MD |
636 | # sessiond semantic for "disable all" is to try to match all enalers |
637 | # it knowns about. Disable all succeeds if it finds no match. | |
638 | lttng_disable_kernel_syscall_ok $SESSION_NAME "-a" $CHANNEL_NAME | |
d96f6315 | 639 | |
67b4c664 | 640 | destroy_lttng_session_ok $SESSION_NAME |
d96f6315 MD |
641 | |
642 | rm -rf $TRACE_PATH | |
643 | } | |
644 | ||
645 | function test_syscall_enable_channel_disable_one() | |
646 | { | |
647 | TRACE_PATH=$(mktemp -d) | |
648 | SESSION_NAME="kernel_syscall_enable_channel_disable_all" | |
649 | CHANNEL_NAME="channel" | |
650 | ||
031f232e DG |
651 | diag "Syscall enable channel and disable one" |
652 | ||
bf6ae429 | 653 | create_lttng_session_ok $SESSION_NAME $TRACE_PATH |
d96f6315 MD |
654 | |
655 | lttng_enable_kernel_channel_ok $SESSION_NAME $CHANNEL_NAME | |
8192bd8f | 656 | lttng_disable_kernel_syscall_fail $SESSION_NAME "openat" $CHANNEL_NAME |
d96f6315 | 657 | |
67b4c664 | 658 | destroy_lttng_session_ok $SESSION_NAME |
d96f6315 MD |
659 | |
660 | rm -rf $TRACE_PATH | |
661 | } | |
662 | ||
8cfcd41c MD |
663 | # MUST set TESTDIR before calling those functions |
664 | plan_tests $NUM_TESTS | |
665 | ||
666 | print_test_banner "$TEST_DESC" | |
667 | ||
668 | if [ "$(id -u)" == "0" ]; then | |
669 | isroot=1 | |
670 | else | |
671 | isroot=0 | |
672 | fi | |
673 | ||
674 | skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || | |
675 | { | |
676 | start_lttng_sessiond | |
677 | ||
02db71ba DG |
678 | test_syscall_event_list |
679 | test_syscall_simple_list | |
680 | test_syscall_simple_list_two | |
8cfcd41c MD |
681 | test_syscall_single |
682 | test_syscall_two | |
683 | test_syscall_all | |
684 | test_syscall_all_disable_one | |
685 | test_syscall_all_disable_two | |
686 | test_syscall_enable_all_disable_all | |
687 | test_syscall_enable_all_disable_all_enable_all | |
688 | test_syscall_enable_all_disable_all_twice | |
0ee507ec MJ |
689 | test_syscall_enable_all_enable_one_disable_all |
690 | test_syscall_enable_one_enable_all_disable_one | |
691 | test_syscall_enable_one_enable_all_disable_all_disable_one | |
8cfcd41c MD |
692 | test_syscall_enable_one_disable_one |
693 | test_syscall_enable_two_disable_two | |
694 | test_syscall_enable_two_disable_one | |
695 | test_syscall_disable_twice | |
696 | test_syscall_disable_all_twice | |
697 | test_syscall_enable_unknown | |
698 | test_syscall_enable_all_enable_one | |
699 | test_syscall_disable_all_disable_one | |
d96f6315 MD |
700 | test_syscall_enable_channel_disable_all |
701 | test_syscall_enable_channel_disable_one | |
8cfcd41c MD |
702 | |
703 | stop_lttng_sessiond | |
704 | } |