X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=tests%2Fregression%2Fkernel%2Ftest_syscall;h=d09d61a95aeb2e96f73ab98c47b451813dc71ecb;hp=9fe599a1595e0b14ffa2fdfb20ba6efef4cf1453;hb=2463b7879c00298daa79744cdaae82ac061a4ed8;hpb=bf6ae429bc7bf2fefdce61e48806768dab7567d5 diff --git a/tests/regression/kernel/test_syscall b/tests/regression/kernel/test_syscall index 9fe599a15..d09d61a95 100755 --- a/tests/regression/kernel/test_syscall +++ b/tests/regression/kernel/test_syscall @@ -1,32 +1,52 @@ #!/bin/bash # -# Copyright (C) - 2013 Christian Babeux -# Copyright (C) - 2014 Mathieu Desnoyers +# Copyright (C) 2013 Christian Babeux +# Copyright (C) 2014 Mathieu Desnoyers # -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License, version 2 only, as -# published by the Free Software Foundation. +# SPDX-License-Identifier: GPL-2.0-only # -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. TEST_DESC="Kernel tracer - System calls" CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/../.. -NUM_TESTS=157 +NUM_TESTS=183 -# test command issues at least open and close system calls -TESTCMD="cat /proc/cpuinfo > /dev/null" +# `gen-syscall-event` starts and waits for the creation a file passed by +# arguments to start executing 3 syscalls (open,read,close) and returning. +TESTCMD="$TESTDIR/utils/testapp/gen-syscall-events/gen-syscall-events" source $TESTDIR/utils/utils.sh +function trace_testapp() +{ + local start_file_sync + start_file_sync=$(mktemp -u) + + # Clear all entries from the resource tracker + lttng_untrack_kernel_all_ok + + # Launch the testapp and save its Process ID + ./"$TESTCMD" "$start_file_sync" "/proc/cpuinfo" "/proc/cmdline" & + PID=$! + + # Set LTTng to track this PID and start the tracing + lttng_track_pid_ok $PID + + start_lttng_tracing_ok + + # Create start file to launch the execution of the workload by the + # test app + touch "$start_file_sync" + + wait $PID + + stop_lttng_tracing_ok + + # Clean up the synchronization file + rm -f "$start_file_sync" +} + function validate_list() { local session_name=$1 @@ -65,18 +85,16 @@ function test_syscall_simple_list() validate_list $SESSION_NAME $EVENT_NAME - start_lttng_tracing - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp - # ensure each is there. + # ensure all events are in the trace. validate_trace_exp "-e syscall_entry_$EVENT_NAME: -e compat_syscall_entry_$EVENT_NAME:" $TRACE_PATH validate_trace_exp "-e syscall_exit_$EVENT_NAME: -e compat_syscall_exit_$EVENT_NAME:" $TRACE_PATH # ensure trace only contains those. 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 - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -98,22 +116,19 @@ function test_syscall_simple_list_two() validate_list $SESSION_NAME $EVENT_NAME validate_list $SESSION_NAME $EVENT_NAME2 - start_lttng_tracing - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp - # ensure each is there. + # ensure all events are in the trace. validate_trace_exp "-e syscall_entry_$EVENT_NAME: -e compat_syscall_entry_$EVENT_NAME:" $TRACE_PATH validate_trace_exp "-e syscall_exit_$EVENT_NAME: -e compat_syscall_exit_$EVENT_NAME:" $TRACE_PATH - # ensure each is there. validate_trace_exp "-e syscall_entry_$EVENT_NAME2: -e compat_syscall_entry_$EVENT_NAME2:" $TRACE_PATH validate_trace_exp "-e syscall_exit_$EVENT_NAME2: -e compat_syscall_exit_$EVENT_NAME2:" $TRACE_PATH # ensure trace only contains those. 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 - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -127,20 +142,18 @@ function test_syscall_single() create_lttng_session_ok $SESSION_NAME $TRACE_PATH - lttng_enable_kernel_syscall_ok $SESSION_NAME "open" + lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" - start_lttng_tracing - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp - # ensure each is there. - validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH - validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH + # ensure all events are in the trace. + validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH + validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH # ensure trace only contains those. - validate_trace_only_exp "-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH + validate_trace_only_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -154,23 +167,21 @@ function test_syscall_two() create_lttng_session_ok $SESSION_NAME $TRACE_PATH - lttng_enable_kernel_syscall_ok $SESSION_NAME "open" + lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" lttng_enable_kernel_syscall_ok $SESSION_NAME "close" - start_lttng_tracing - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp - # ensure each is there. - validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH - validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH + # ensure all events are in the trace. + validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH + validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH # ensure trace only contains those. - 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 + 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 - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -187,18 +198,16 @@ function test_syscall_all() # enable all syscalls lttng_enable_kernel_syscall_ok $SESSION_NAME - start_lttng_tracing - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp # ensure at least open and close are there. - validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH - validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH + validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH + validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH # trace may contain other syscalls. - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -216,20 +225,18 @@ function test_syscall_all_disable_one() lttng_enable_kernel_syscall_ok $SESSION_NAME # try to disable open system call: fails because enabler semantic of # "all syscalls" is not "the open" system call. - lttng_disable_kernel_syscall_fail $SESSION_NAME "open" + lttng_disable_kernel_syscall_fail $SESSION_NAME "openat" - start_lttng_tracing - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp - # ensure "open" syscall is there. - validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH + # ensure "openat" syscall is there. + validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH # ensure "close" syscall is there. validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -247,26 +254,23 @@ function test_syscall_all_disable_two() lttng_enable_kernel_syscall_ok $SESSION_NAME # try to disable open and close system calls: fails because enabler # semantic of "all syscalls" is not "the open" system call. - lttng_disable_kernel_syscall_fail $SESSION_NAME "open" + lttng_disable_kernel_syscall_fail $SESSION_NAME "openat" lttng_disable_kernel_syscall_fail $SESSION_NAME "close" - start_lttng_tracing - # generates open, close, execve (at least) - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp - # ensure "open" syscall is there. - validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH + # ensure "openat" syscall is there. + validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH # ensure "close" syscall is there. validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH - # ensure "execve" syscall is there. - validate_trace_exp "-e syscall_entry_execve: -e compat_syscall_entry_execve:" $TRACE_PATH - validate_trace_exp "-e syscall_exit_execve: -e compat_syscall_exit_execve:" $TRACE_PATH + # ensure "read" syscall is there. + validate_trace_exp "-e syscall_entry_read: -e compat_syscall_entry_read:" $TRACE_PATH + validate_trace_exp "-e syscall_exit_read: -e compat_syscall_exit_read:" $TRACE_PATH - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -285,15 +289,12 @@ function test_syscall_enable_all_disable_all() # disable all system calls lttng_disable_kernel_syscall_ok $SESSION_NAME - start_lttng_tracing - # generates open, close, execve (at least) - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp # ensure nothing has been traced. validate_trace_empty $TRACE_PATH - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -314,19 +315,16 @@ function test_syscall_enable_all_disable_all_enable_all() # enable all system calls lttng_enable_kernel_syscall_ok $SESSION_NAME - start_lttng_tracing - # generates open, close, execve (at least) - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp # ensure at least open and close are there. - validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH - validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH + validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH + validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH validate_trace_exp "-e syscall_entry_close: -e compat_syscall_entry_close:" $TRACE_PATH validate_trace_exp "-e syscall_exit_close: -e compat_syscall_exit_close:" $TRACE_PATH # trace may contain other syscalls. - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -349,15 +347,12 @@ function test_syscall_enable_all_disable_all_twice() # disable all system calls lttng_disable_kernel_syscall_ok $SESSION_NAME - start_lttng_tracing - # generates open, close, execve (at least) - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp # ensure nothing has been traced. validate_trace_empty $TRACE_PATH - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -372,19 +367,16 @@ function test_syscall_enable_one_disable_one() create_lttng_session_ok $SESSION_NAME $TRACE_PATH # enable open system call - lttng_enable_kernel_syscall_ok $SESSION_NAME "open" + lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" # disable open system call - lttng_disable_kernel_syscall_ok $SESSION_NAME "open" + lttng_disable_kernel_syscall_ok $SESSION_NAME "openat" - start_lttng_tracing - # generates open, close, execve (at least) - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp # ensure nothing has been traced. validate_trace_empty $TRACE_PATH - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -399,21 +391,18 @@ function test_syscall_enable_two_disable_two() create_lttng_session_ok $SESSION_NAME $TRACE_PATH # enable open and close system calls - lttng_enable_kernel_syscall_ok $SESSION_NAME "open" + lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" lttng_enable_kernel_syscall_ok $SESSION_NAME "close" # disable open and close system calls - lttng_disable_kernel_syscall_ok $SESSION_NAME "open" + lttng_disable_kernel_syscall_ok $SESSION_NAME "openat" lttng_disable_kernel_syscall_ok $SESSION_NAME "close" - start_lttng_tracing - # generates open, close, execve (at least) - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp # ensure nothing has been traced. validate_trace_empty $TRACE_PATH - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -428,24 +417,21 @@ function test_syscall_enable_two_disable_one() create_lttng_session_ok $SESSION_NAME $TRACE_PATH # enable open and close system calls - lttng_enable_kernel_syscall_ok $SESSION_NAME "open" + lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" lttng_enable_kernel_syscall_ok $SESSION_NAME "close" # disable close system call lttng_disable_kernel_syscall_ok $SESSION_NAME "close" - start_lttng_tracing - # generates open, close, execve (at least) - eval ${TESTCMD} - stop_lttng_tracing + trace_testapp # ensure open is there. - validate_trace_exp "-e syscall_entry_open: -e compat_syscall_entry_open:" $TRACE_PATH - validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH + validate_trace_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat:" $TRACE_PATH + validate_trace_exp "-e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH # ensure trace only contains those. - validate_trace_only_exp "-e syscall_entry_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH + validate_trace_only_exp "-e syscall_entry_openat: -e compat_syscall_entry_openat: -e syscall_exit_openat: -e compat_syscall_exit_openat:" $TRACE_PATH - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -459,13 +445,13 @@ function test_syscall_disable_twice() create_lttng_session_ok $SESSION_NAME $TRACE_PATH - lttng_enable_kernel_syscall_ok $SESSION_NAME "open" + lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" # First disable will succeed - lttng_disable_kernel_syscall_ok $SESSION_NAME "open" + lttng_disable_kernel_syscall_ok $SESSION_NAME "openat" # Second disable succeeds too, due to enabler semantic. - lttng_disable_kernel_syscall_ok $SESSION_NAME "open" + lttng_disable_kernel_syscall_ok $SESSION_NAME "openat" - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -485,7 +471,7 @@ function test_syscall_disable_all_twice() # Second disable succeeds too, due to enabler semantic. lttng_disable_kernel_syscall_ok $SESSION_NAME - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -504,7 +490,7 @@ function test_syscall_enable_unknown() # semantic. lttng_enable_kernel_syscall_ok $SESSION_NAME "thissyscallcannotexist" - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -520,9 +506,9 @@ function test_syscall_enable_all_enable_one() lttng_enable_kernel_syscall_ok $SESSION_NAME # Enabling an event already enabled succeeds, due to enabler semantic. - lttng_enable_kernel_syscall_ok $SESSION_NAME "open" + lttng_enable_kernel_syscall_ok $SESSION_NAME "openat" - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -539,9 +525,9 @@ function test_syscall_disable_all_disable_one() lttng_enable_kernel_syscall_ok $SESSION_NAME lttng_disable_kernel_syscall_ok $SESSION_NAME # Disabling an event already disabled fails. - lttng_disable_kernel_syscall_fail $SESSION_NAME "open" + lttng_disable_kernel_syscall_fail $SESSION_NAME "openat" - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -561,7 +547,7 @@ function test_syscall_enable_channel_disable_all() # it knowns about. Disable all succeeds if it finds no match. lttng_disable_kernel_syscall_ok $SESSION_NAME "-a" $CHANNEL_NAME - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH } @@ -577,9 +563,9 @@ function test_syscall_enable_channel_disable_one() create_lttng_session_ok $SESSION_NAME $TRACE_PATH lttng_enable_kernel_channel_ok $SESSION_NAME $CHANNEL_NAME - lttng_disable_kernel_syscall_fail $SESSION_NAME "open" $CHANNEL_NAME + lttng_disable_kernel_syscall_fail $SESSION_NAME "openat" $CHANNEL_NAME - destroy_lttng_session $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME rm -rf $TRACE_PATH }