Test: add diag to each syscall test
[lttng-tools.git] / tests / regression / kernel / test_syscall
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
19 TEST_DESC="Kernel tracer - System calls"
20
21 CURDIR=$(dirname $0)/
22 TESTDIR=$CURDIR/../..
23 NUM_TESTS=132
24
25 # test command issues at least open and close system calls
26 TESTCMD="cat /proc/cpuinfo > /dev/null"
27
28 source $TESTDIR/utils/utils.sh
29
30 function test_syscall_single()
31 {
32 TRACE_PATH=$(mktemp -d)
33 SESSION_NAME="kernel_syscall_single"
34
35 diag "Syscall trace single"
36
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.
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
48
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
51
52 destroy_lttng_session $SESSION_NAME
53
54 rm -rf $TRACE_PATH
55 }
56
57 function test_syscall_two()
58 {
59 TRACE_PATH=$(mktemp -d)
60 SESSION_NAME="kernel_syscall_two"
61
62 diag "Syscall trace two events"
63
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.
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
78
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
81
82 destroy_lttng_session $SESSION_NAME
83
84 rm -rf $TRACE_PATH
85 }
86
87 function test_syscall_all()
88 {
89 TRACE_PATH=$(mktemp -d)
90 SESSION_NAME="kernel_syscall_all"
91
92 diag "Syscall trace all events"
93
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.
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.
109
110 destroy_lttng_session $SESSION_NAME
111
112 rm -rf $TRACE_PATH
113 }
114
115 function test_syscall_all_disable_one()
116 {
117 TRACE_PATH=$(mktemp -d)
118 SESSION_NAME="kernel_syscall_all_disable_one"
119
120 diag "Syscall trace all events and disable one"
121
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.
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
135
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
139
140 destroy_lttng_session $SESSION_NAME
141
142 rm -rf $TRACE_PATH
143 }
144
145 function test_syscall_all_disable_two()
146 {
147 TRACE_PATH=$(mktemp -d)
148 SESSION_NAME="kernel_syscall_all_disable_two"
149
150 diag "Syscall trace all events and disable two"
151
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.
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
167
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
171
172 destroy_lttng_session $SESSION_NAME
173
174 rm -rf $TRACE_PATH
175 }
176
177 function test_syscall_enable_all_disable_all()
178 {
179 TRACE_PATH=$(mktemp -d)
180 SESSION_NAME="kernel_syscall_enable_all_disable_all"
181
182 diag "Syscall trace all events and disable all"
183
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
204 function 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
209 diag "Syscall trace all events and enable/disable all"
210
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.
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.
231
232 destroy_lttng_session $SESSION_NAME
233
234 rm -rf $TRACE_PATH
235 }
236
237 function test_syscall_enable_all_disable_all_twice()
238 {
239 TRACE_PATH=$(mktemp -d)
240 SESSION_NAME="kernel_syscall_enable_all_disable_all_twice"
241
242 diag "Syscall trace all events and enable/disable all twice"
243
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
268 function test_syscall_enable_one_disable_one()
269 {
270 TRACE_PATH=$(mktemp -d)
271 SESSION_NAME="kernel_syscall_enable_one_disable_one"
272
273 diag "Syscall trace one event and disable one"
274
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
295 function test_syscall_enable_two_disable_two()
296 {
297 TRACE_PATH=$(mktemp -d)
298 SESSION_NAME="kernel_syscall_enable_two_disable_two"
299
300 diag "Syscall trace two events and disable two"
301
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
324 function test_syscall_enable_two_disable_one()
325 {
326 TRACE_PATH=$(mktemp -d)
327 SESSION_NAME="kernel_syscall_enable_two_disable_one"
328
329 diag "Syscall trace two events and disable one"
330
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.
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
347
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
350
351 destroy_lttng_session $SESSION_NAME
352
353 rm -rf $TRACE_PATH
354 }
355
356 function test_syscall_disable_twice()
357 {
358 TRACE_PATH=$(mktemp -d)
359 SESSION_NAME="kernel_syscall_disable_twice"
360
361 diag "Syscall trace one event and disable twice"
362
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
376 function test_syscall_disable_all_twice()
377 {
378 TRACE_PATH=$(mktemp -d)
379 SESSION_NAME="kernel_syscall_disable_all_twice"
380
381 diag "Syscall trace all events and disable all twice"
382
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
397 function test_syscall_enable_unknown()
398 {
399 TRACE_PATH=$(mktemp -d)
400 SESSION_NAME="kernel_syscall_enable_unknown"
401
402 diag "Syscall enable an unknown event"
403
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
413 function test_syscall_enable_all_enable_one()
414 {
415 TRACE_PATH=$(mktemp -d)
416 SESSION_NAME="kernel_syscall_enable_all_enable_one"
417
418 diag "Syscall enable all and enable one"
419
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
431 function test_syscall_disable_all_disable_one()
432 {
433 TRACE_PATH=$(mktemp -d)
434 SESSION_NAME="kernel_syscall_enable_all_enable_one"
435
436 diag "Syscall disable all and disable one"
437
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
450 function 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
456 diag "Syscall enable channel and disable all"
457
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
468 function 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
474 diag "Syscall enable channel and disable one"
475
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
486 # MUST set TESTDIR before calling those functions
487 plan_tests $NUM_TESTS
488
489 print_test_banner "$TEST_DESC"
490
491 if [ "$(id -u)" == "0" ]; then
492 isroot=1
493 else
494 isroot=0
495 fi
496
497 skip $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
517 test_syscall_enable_channel_disable_all
518 test_syscall_enable_channel_disable_one
519
520 stop_lttng_sessiond
521 }
This page took 0.042707 seconds and 6 git commands to generate.