Test: add diag to each syscall test
[lttng-tools.git] / tests / regression / kernel / test_syscall
CommitLineData
8cfcd41c
MD
1#!/bin/bash
2#
3# Copyright (C) - 2013 Christian Babeux <christian.babeux@efficios.com>
4# Copyright (C) - 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
5#
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.
9#
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
13# more details.
14#
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.
18
19TEST_DESC="Kernel tracer - System calls"
20
21CURDIR=$(dirname $0)/
22TESTDIR=$CURDIR/../..
d96f6315 23NUM_TESTS=132
8cfcd41c
MD
24
25# test command issues at least open and close system calls
26TESTCMD="cat /proc/cpuinfo > /dev/null"
27
28source $TESTDIR/utils/utils.sh
29
30function test_syscall_single()
31{
32 TRACE_PATH=$(mktemp -d)
33 SESSION_NAME="kernel_syscall_single"
34
031f232e
DG
35 diag "Syscall trace single"
36
8cfcd41c
MD
37 create_lttng_session $SESSION_NAME $TRACE_PATH
38
39 lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
40
41 start_lttng_tracing
42 eval ${TESTCMD}
43 stop_lttng_tracing
44
45 # ensure each is there.
a39bd0ab
MD
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
8cfcd41c
MD
48
49 # ensure trace only contains those.
a39bd0ab 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
8cfcd41c
MD
51
52 destroy_lttng_session $SESSION_NAME
53
54 rm -rf $TRACE_PATH
55}
56
57function test_syscall_two()
58{
59 TRACE_PATH=$(mktemp -d)
60 SESSION_NAME="kernel_syscall_two"
61
031f232e
DG
62 diag "Syscall trace two events"
63
8cfcd41c
MD
64 create_lttng_session $SESSION_NAME $TRACE_PATH
65
66 lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
67 lttng_enable_kernel_syscall_ok $SESSION_NAME "close"
68
69 start_lttng_tracing
70 eval ${TESTCMD}
71 stop_lttng_tracing
72
73 # ensure each is there.
a39bd0ab
MD
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
8cfcd41c
MD
78
79 # ensure trace only contains those.
a39bd0ab 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
8cfcd41c
MD
81
82 destroy_lttng_session $SESSION_NAME
83
84 rm -rf $TRACE_PATH
85}
86
87function test_syscall_all()
88{
89 TRACE_PATH=$(mktemp -d)
90 SESSION_NAME="kernel_syscall_all"
91
031f232e
DG
92 diag "Syscall trace all events"
93
8cfcd41c
MD
94 create_lttng_session $SESSION_NAME $TRACE_PATH
95
96 # enable all syscalls
97 lttng_enable_kernel_syscall_ok $SESSION_NAME
98
99 start_lttng_tracing
100 eval ${TESTCMD}
101 stop_lttng_tracing
102
103 # ensure at least open and close are there.
a39bd0ab
MD
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
8cfcd41c
MD
108 # trace may contain other syscalls.
109
110 destroy_lttng_session $SESSION_NAME
111
112 rm -rf $TRACE_PATH
113}
114
115function test_syscall_all_disable_one()
116{
117 TRACE_PATH=$(mktemp -d)
118 SESSION_NAME="kernel_syscall_all_disable_one"
119
031f232e
DG
120 diag "Syscall trace all events and disable one"
121
8cfcd41c
MD
122 create_lttng_session $SESSION_NAME $TRACE_PATH
123
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"
128
129 start_lttng_tracing
130 eval ${TESTCMD}
131 stop_lttng_tracing
132
133 # ensure "open" syscall is not there.
a39bd0ab 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
8cfcd41c
MD
135
136 # ensure "close" syscall is there.
a39bd0ab
MD
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
8cfcd41c
MD
139
140 destroy_lttng_session $SESSION_NAME
141
142 rm -rf $TRACE_PATH
143}
144
145function test_syscall_all_disable_two()
146{
147 TRACE_PATH=$(mktemp -d)
148 SESSION_NAME="kernel_syscall_all_disable_two"
149
031f232e
DG
150 diag "Syscall trace all events and disable two"
151
8cfcd41c
MD
152 create_lttng_session $SESSION_NAME $TRACE_PATH
153
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"
159
160 start_lttng_tracing
161 # generates open, close, execve (at least)
162 eval ${TESTCMD}
163 stop_lttng_tracing
164
165 # ensure "open" and "close" syscalls are not there.
a39bd0ab 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
8cfcd41c
MD
167
168 # ensure "execve" syscall is there.
a39bd0ab
MD
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
8cfcd41c
MD
171
172 destroy_lttng_session $SESSION_NAME
173
174 rm -rf $TRACE_PATH
175}
176
177function test_syscall_enable_all_disable_all()
178{
179 TRACE_PATH=$(mktemp -d)
180 SESSION_NAME="kernel_syscall_enable_all_disable_all"
181
031f232e
DG
182 diag "Syscall trace all events and disable all"
183
8cfcd41c
MD
184 create_lttng_session $SESSION_NAME $TRACE_PATH
185
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
190
191 start_lttng_tracing
192 # generates open, close, execve (at least)
193 eval ${TESTCMD}
194 stop_lttng_tracing
195
196 # ensure nothing has been traced.
197 validate_trace_empty $TRACE_PATH
198
199 destroy_lttng_session $SESSION_NAME
200
201 rm -rf $TRACE_PATH
202}
203
204function test_syscall_enable_all_disable_all_enable_all()
205{
206 TRACE_PATH=$(mktemp -d)
207 SESSION_NAME="kernel_syscall_enable_all_disable_all_enable_all"
208
031f232e
DG
209 diag "Syscall trace all events and enable/disable all"
210
8cfcd41c
MD
211 create_lttng_session $SESSION_NAME $TRACE_PATH
212
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
219
220 start_lttng_tracing
221 # generates open, close, execve (at least)
222 eval ${TESTCMD}
223 stop_lttng_tracing
224
225 # ensure at least open and close are there.
a39bd0ab
MD
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
8cfcd41c
MD
230 # trace may contain other syscalls.
231
232 destroy_lttng_session $SESSION_NAME
233
234 rm -rf $TRACE_PATH
235}
236
237function test_syscall_enable_all_disable_all_twice()
238{
239 TRACE_PATH=$(mktemp -d)
240 SESSION_NAME="kernel_syscall_enable_all_disable_all_twice"
241
031f232e
DG
242 diag "Syscall trace all events and enable/disable all twice"
243
8cfcd41c
MD
244 create_lttng_session $SESSION_NAME $TRACE_PATH
245
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
254
255 start_lttng_tracing
256 # generates open, close, execve (at least)
257 eval ${TESTCMD}
258 stop_lttng_tracing
259
260 # ensure nothing has been traced.
261 validate_trace_empty $TRACE_PATH
262
263 destroy_lttng_session $SESSION_NAME
264
265 rm -rf $TRACE_PATH
266}
267
268function test_syscall_enable_one_disable_one()
269{
270 TRACE_PATH=$(mktemp -d)
271 SESSION_NAME="kernel_syscall_enable_one_disable_one"
272
031f232e
DG
273 diag "Syscall trace one event and disable one"
274
8cfcd41c
MD
275 create_lttng_session $SESSION_NAME $TRACE_PATH
276
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"
281
282 start_lttng_tracing
283 # generates open, close, execve (at least)
284 eval ${TESTCMD}
285 stop_lttng_tracing
286
287 # ensure nothing has been traced.
288 validate_trace_empty $TRACE_PATH
289
290 destroy_lttng_session $SESSION_NAME
291
292 rm -rf $TRACE_PATH
293}
294
295function test_syscall_enable_two_disable_two()
296{
297 TRACE_PATH=$(mktemp -d)
298 SESSION_NAME="kernel_syscall_enable_two_disable_two"
299
031f232e
DG
300 diag "Syscall trace two events and disable two"
301
8cfcd41c
MD
302 create_lttng_session $SESSION_NAME $TRACE_PATH
303
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"
310
311 start_lttng_tracing
312 # generates open, close, execve (at least)
313 eval ${TESTCMD}
314 stop_lttng_tracing
315
316 # ensure nothing has been traced.
317 validate_trace_empty $TRACE_PATH
318
319 destroy_lttng_session $SESSION_NAME
320
321 rm -rf $TRACE_PATH
322}
323
324function test_syscall_enable_two_disable_one()
325{
326 TRACE_PATH=$(mktemp -d)
327 SESSION_NAME="kernel_syscall_enable_two_disable_one"
328
031f232e
DG
329 diag "Syscall trace two events and disable one"
330
8cfcd41c
MD
331 create_lttng_session $SESSION_NAME $TRACE_PATH
332
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"
338
339 start_lttng_tracing
340 # generates open, close, execve (at least)
341 eval ${TESTCMD}
342 stop_lttng_tracing
343
344 # ensure open is there.
a39bd0ab
MD
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
8cfcd41c
MD
347
348 # ensure trace only contains those.
a39bd0ab 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
8cfcd41c
MD
350
351 destroy_lttng_session $SESSION_NAME
352
353 rm -rf $TRACE_PATH
354}
355
356function test_syscall_disable_twice()
357{
358 TRACE_PATH=$(mktemp -d)
359 SESSION_NAME="kernel_syscall_disable_twice"
360
031f232e
DG
361 diag "Syscall trace one event and disable twice"
362
8cfcd41c
MD
363 create_lttng_session $SESSION_NAME $TRACE_PATH
364
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"
370
371 destroy_lttng_session $SESSION_NAME
372
373 rm -rf $TRACE_PATH
374}
375
376function test_syscall_disable_all_twice()
377{
378 TRACE_PATH=$(mktemp -d)
379 SESSION_NAME="kernel_syscall_disable_all_twice"
380
031f232e
DG
381 diag "Syscall trace all events and disable all twice"
382
8cfcd41c
MD
383 create_lttng_session $SESSION_NAME $TRACE_PATH
384
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
390
391 destroy_lttng_session $SESSION_NAME
392
393 rm -rf $TRACE_PATH
394}
395
396
397function test_syscall_enable_unknown()
398{
399 TRACE_PATH=$(mktemp -d)
400 SESSION_NAME="kernel_syscall_enable_unknown"
401
031f232e
DG
402 diag "Syscall enable an unknown event"
403
8cfcd41c
MD
404 create_lttng_session $SESSION_NAME $TRACE_PATH
405
406 lttng_enable_kernel_syscall_fail $SESSION_NAME "thissyscallcannotexist"
407
408 destroy_lttng_session $SESSION_NAME
409
410 rm -rf $TRACE_PATH
411}
412
413function test_syscall_enable_all_enable_one()
414{
415 TRACE_PATH=$(mktemp -d)
416 SESSION_NAME="kernel_syscall_enable_all_enable_one"
417
031f232e
DG
418 diag "Syscall enable all and enable one"
419
8cfcd41c
MD
420 create_lttng_session $SESSION_NAME $TRACE_PATH
421
422 lttng_enable_kernel_syscall_ok $SESSION_NAME
423 # Enabling an event already enabled fails.
424 lttng_enable_kernel_syscall_fail $SESSION_NAME "open"
425
426 destroy_lttng_session $SESSION_NAME
427
428 rm -rf $TRACE_PATH
429}
430
431function test_syscall_disable_all_disable_one()
432{
433 TRACE_PATH=$(mktemp -d)
434 SESSION_NAME="kernel_syscall_enable_all_enable_one"
435
031f232e
DG
436 diag "Syscall disable all and disable one"
437
8cfcd41c
MD
438 create_lttng_session $SESSION_NAME $TRACE_PATH
439
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"
444
445 destroy_lttng_session $SESSION_NAME
446
447 rm -rf $TRACE_PATH
448}
449
d96f6315
MD
450function test_syscall_enable_channel_disable_all()
451{
452 TRACE_PATH=$(mktemp -d)
453 SESSION_NAME="kernel_syscall_enable_channel_disable_all"
454 CHANNEL_NAME="channel"
455
031f232e
DG
456 diag "Syscall enable channel and disable all"
457
d96f6315
MD
458 create_lttng_session $SESSION_NAME $TRACE_PATH
459
460 lttng_enable_kernel_channel_ok $SESSION_NAME $CHANNEL_NAME
461 lttng_disable_kernel_syscall_fail $SESSION_NAME "-a" $CHANNEL_NAME
462
463 destroy_lttng_session $SESSION_NAME
464
465 rm -rf $TRACE_PATH
466}
467
468function test_syscall_enable_channel_disable_one()
469{
470 TRACE_PATH=$(mktemp -d)
471 SESSION_NAME="kernel_syscall_enable_channel_disable_all"
472 CHANNEL_NAME="channel"
473
031f232e
DG
474 diag "Syscall enable channel and disable one"
475
d96f6315
MD
476 create_lttng_session $SESSION_NAME $TRACE_PATH
477
478 lttng_enable_kernel_channel_ok $SESSION_NAME $CHANNEL_NAME
479 lttng_disable_kernel_syscall_fail $SESSION_NAME "open" $CHANNEL_NAME
480
481 destroy_lttng_session $SESSION_NAME
482
483 rm -rf $TRACE_PATH
484}
485
8cfcd41c
MD
486# MUST set TESTDIR before calling those functions
487plan_tests $NUM_TESTS
488
489print_test_banner "$TEST_DESC"
490
491if [ "$(id -u)" == "0" ]; then
492 isroot=1
493else
494 isroot=0
495fi
496
497skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS ||
498{
499 start_lttng_sessiond
500
501 test_syscall_single
502 test_syscall_two
503 test_syscall_all
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
d96f6315
MD
517 test_syscall_enable_channel_disable_all
518 test_syscall_enable_channel_disable_one
8cfcd41c
MD
519
520 stop_lttng_sessiond
521}
This page took 0.045468 seconds and 5 git commands to generate.