X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=tests%2Fregression%2Fkernel%2Ftest_syscall;h=a7800d2a1fede246cadeaaba7e70f423cd15392c;hb=d324faf7d618feb0b209c8c7da497b244fa7046a;hp=657c5eea26629692f88dff96171e102fc8051858;hpb=d96f6315f068984c2edda2ac612bacbdb2c7b0d2;p=lttng-tools.git diff --git a/tests/regression/kernel/test_syscall b/tests/regression/kernel/test_syscall index 657c5eea2..a7800d2a1 100755 --- a/tests/regression/kernel/test_syscall +++ b/tests/regression/kernel/test_syscall @@ -20,18 +20,111 @@ TEST_DESC="Kernel tracer - System calls" CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/../.. -NUM_TESTS=132 +NUM_TESTS=157 # test command issues at least open and close system calls TESTCMD="cat /proc/cpuinfo > /dev/null" source $TESTDIR/utils/utils.sh +function validate_list() +{ + local session_name=$1 + local event_name=$2 + local opt=$3 + + out=$($TESTDIR/../src/bin/lttng/$LTTNG_BIN list $session_name $opt | grep $event_name) + if [ -z "$out" ]; then + fail "Validate syscall listing" + diag "$event_name not found when listing $session_name (opt $opt)" + else + pass "Validate syscall listing. Found $event_name." + fi +} + +function test_syscall_event_list() +{ + local EVENT_NAME="getpid" + + diag "Syscall event listing" + + validate_list "" $EVENT_NAME "-k --syscall" +} + +function test_syscall_simple_list() +{ + TRACE_PATH=$(mktemp -d) + SESSION_NAME="kernel_syscall_simple_list" + local EVENT_NAME="close" + + diag "Syscall simple listing" + + create_lttng_session $SESSION_NAME $TRACE_PATH + + lttng_enable_kernel_syscall_ok $SESSION_NAME $EVENT_NAME + + validate_list $SESSION_NAME $EVENT_NAME + + start_lttng_tracing + eval ${TESTCMD} + stop_lttng_tracing + + # ensure each is there. + 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 + + rm -rf $TRACE_PATH +} + +function test_syscall_simple_list_two() +{ + TRACE_PATH=$(mktemp -d) + SESSION_NAME="kernel_syscall_simple_list_two" + local EVENT_NAME="close" + local EVENT_NAME2="read" + + diag "Syscall simple listing" + + create_lttng_session $SESSION_NAME $TRACE_PATH + + lttng_enable_kernel_syscall_ok $SESSION_NAME $EVENT_NAME + lttng_enable_kernel_syscall_ok $SESSION_NAME $EVENT_NAME2 + + validate_list $SESSION_NAME $EVENT_NAME + validate_list $SESSION_NAME $EVENT_NAME2 + + start_lttng_tracing + eval ${TESTCMD} + stop_lttng_tracing + + # ensure each is there. + 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 + + rm -rf $TRACE_PATH +} + function test_syscall_single() { TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_single" + diag "Syscall trace single" + create_lttng_session $SESSION_NAME $TRACE_PATH lttng_enable_kernel_syscall_ok $SESSION_NAME "open" @@ -41,11 +134,11 @@ function test_syscall_single() stop_lttng_tracing # 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 + 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 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_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH destroy_lttng_session $SESSION_NAME @@ -57,6 +150,8 @@ function test_syscall_two() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_two" + diag "Syscall trace two events" + create_lttng_session $SESSION_NAME $TRACE_PATH lttng_enable_kernel_syscall_ok $SESSION_NAME "open" @@ -67,13 +162,13 @@ function test_syscall_two() stop_lttng_tracing # 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 - 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 + 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_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_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 destroy_lttng_session $SESSION_NAME @@ -85,6 +180,8 @@ function test_syscall_all() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_all" + diag "Syscall trace all events" + create_lttng_session $SESSION_NAME $TRACE_PATH # enable all syscalls @@ -95,10 +192,10 @@ function test_syscall_all() stop_lttng_tracing # 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_close -e compat_syscall_entry_close" $TRACE_PATH - validate_trace_exp "-e syscall_exit_close -e compat_syscall_exit_close" $TRACE_PATH + 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_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 @@ -111,23 +208,26 @@ function test_syscall_all_disable_one() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_all_disable_one" + diag "Syscall trace all events and disable one" + create_lttng_session $SESSION_NAME $TRACE_PATH # enable all syscalls lttng_enable_kernel_syscall_ok $SESSION_NAME - # disable open system call - lttng_disable_kernel_syscall_ok $SESSION_NAME "open" + # 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" start_lttng_tracing eval ${TESTCMD} stop_lttng_tracing - # ensure "open" syscall is not there. - 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 + # 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 "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 + 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 @@ -139,25 +239,32 @@ function test_syscall_all_disable_two() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_all_disable_two" + diag "Syscall trace all events and disable two" + create_lttng_session $SESSION_NAME $TRACE_PATH # enable all syscalls lttng_enable_kernel_syscall_ok $SESSION_NAME - # disable open system call - lttng_disable_kernel_syscall_ok $SESSION_NAME "open" - lttng_disable_kernel_syscall_ok $SESSION_NAME "close" + # 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 "close" start_lttng_tracing # generates open, close, execve (at least) eval ${TESTCMD} stop_lttng_tracing - # ensure "open" and "close" syscalls are not there. - 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 + # 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 "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 + 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 destroy_lttng_session $SESSION_NAME @@ -169,6 +276,8 @@ function test_syscall_enable_all_disable_all() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_enable_all_disable_all" + diag "Syscall trace all events and disable all" + create_lttng_session $SESSION_NAME $TRACE_PATH # enable all system calls @@ -194,6 +303,8 @@ function test_syscall_enable_all_disable_all_enable_all() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_enable_all_disable_all_enable_all" + diag "Syscall trace all events and enable/disable all" + create_lttng_session $SESSION_NAME $TRACE_PATH # enable all system calls @@ -209,10 +320,10 @@ function test_syscall_enable_all_disable_all_enable_all() stop_lttng_tracing # 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_close -e compat_syscall_entry_close" $TRACE_PATH - validate_trace_exp "-e syscall_exit_close -e compat_syscall_exit_close" $TRACE_PATH + 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_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 @@ -225,6 +336,8 @@ function test_syscall_enable_all_disable_all_twice() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_enable_all_disable_all_twice" + diag "Syscall trace all events and enable/disable all twice" + create_lttng_session $SESSION_NAME $TRACE_PATH # enable all system calls @@ -254,6 +367,8 @@ function test_syscall_enable_one_disable_one() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_enable_one_disable_one" + diag "Syscall trace one event and disable one" + create_lttng_session $SESSION_NAME $TRACE_PATH # enable open system call @@ -279,6 +394,8 @@ function test_syscall_enable_two_disable_two() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_enable_two_disable_two" + diag "Syscall trace two events and disable two" + create_lttng_session $SESSION_NAME $TRACE_PATH # enable open and close system calls @@ -306,6 +423,8 @@ function test_syscall_enable_two_disable_one() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_enable_two_disable_one" + diag "Syscall trace two events and disable one" + create_lttng_session $SESSION_NAME $TRACE_PATH # enable open and close system calls @@ -320,11 +439,11 @@ function test_syscall_enable_two_disable_one() stop_lttng_tracing # 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_open: -e compat_syscall_entry_open:" $TRACE_PATH + validate_trace_exp "-e syscall_exit_open: -e compat_syscall_exit_open:" $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_open: -e compat_syscall_entry_open: -e syscall_exit_open: -e compat_syscall_exit_open:" $TRACE_PATH destroy_lttng_session $SESSION_NAME @@ -336,13 +455,15 @@ function test_syscall_disable_twice() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_disable_twice" + diag "Syscall trace one event and disable twice" + create_lttng_session $SESSION_NAME $TRACE_PATH lttng_enable_kernel_syscall_ok $SESSION_NAME "open" # First disable will succeed lttng_disable_kernel_syscall_ok $SESSION_NAME "open" - # Second disable will fail - lttng_disable_kernel_syscall_fail $SESSION_NAME "open" + # Second disable succeeds too, due to enabler semantic. + lttng_disable_kernel_syscall_ok $SESSION_NAME "open" destroy_lttng_session $SESSION_NAME @@ -354,13 +475,15 @@ function test_syscall_disable_all_twice() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_disable_all_twice" + diag "Syscall trace all events and disable all twice" + create_lttng_session $SESSION_NAME $TRACE_PATH lttng_enable_kernel_syscall_ok $SESSION_NAME # First disable will succeed lttng_disable_kernel_syscall_ok $SESSION_NAME - # Second disable will fail - lttng_disable_kernel_syscall_fail $SESSION_NAME + # Second disable succeeds too, due to enabler semantic. + lttng_disable_kernel_syscall_ok $SESSION_NAME destroy_lttng_session $SESSION_NAME @@ -373,9 +496,13 @@ function test_syscall_enable_unknown() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_enable_unknown" + diag "Syscall enable an unknown event" + create_lttng_session $SESSION_NAME $TRACE_PATH - lttng_enable_kernel_syscall_fail $SESSION_NAME "thissyscallcannotexist" + # Enabling a syscall that does not exist succeeds, due to enabler + # semantic. + lttng_enable_kernel_syscall_ok $SESSION_NAME "thissyscallcannotexist" destroy_lttng_session $SESSION_NAME @@ -387,11 +514,13 @@ function test_syscall_enable_all_enable_one() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_enable_all_enable_one" + diag "Syscall enable all and enable one" + create_lttng_session $SESSION_NAME $TRACE_PATH lttng_enable_kernel_syscall_ok $SESSION_NAME - # Enabling an event already enabled fails. - lttng_enable_kernel_syscall_fail $SESSION_NAME "open" + # Enabling an event already enabled succeeds, due to enabler semantic. + lttng_enable_kernel_syscall_ok $SESSION_NAME "open" destroy_lttng_session $SESSION_NAME @@ -403,6 +532,8 @@ function test_syscall_disable_all_disable_one() TRACE_PATH=$(mktemp -d) SESSION_NAME="kernel_syscall_enable_all_enable_one" + diag "Syscall disable all and disable one" + create_lttng_session $SESSION_NAME $TRACE_PATH lttng_enable_kernel_syscall_ok $SESSION_NAME @@ -421,10 +552,14 @@ function test_syscall_enable_channel_disable_all() SESSION_NAME="kernel_syscall_enable_channel_disable_all" CHANNEL_NAME="channel" + diag "Syscall enable channel and disable all" + create_lttng_session $SESSION_NAME $TRACE_PATH lttng_enable_kernel_channel_ok $SESSION_NAME $CHANNEL_NAME - lttng_disable_kernel_syscall_fail $SESSION_NAME "-a" $CHANNEL_NAME + # sessiond semantic for "disable all" is to try to match all enalers + # 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 @@ -437,6 +572,8 @@ function test_syscall_enable_channel_disable_one() SESSION_NAME="kernel_syscall_enable_channel_disable_all" CHANNEL_NAME="channel" + diag "Syscall enable channel and disable one" + create_lttng_session $SESSION_NAME $TRACE_PATH lttng_enable_kernel_channel_ok $SESSION_NAME $CHANNEL_NAME @@ -462,6 +599,9 @@ skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || { start_lttng_sessiond + test_syscall_event_list + test_syscall_simple_list + test_syscall_simple_list_two test_syscall_single test_syscall_two test_syscall_all