Refactor: test: wrapper for create_lttng_session
[lttng-tools.git] / tests / regression / kernel / test_syscall
index 55baab877375e7905595de941846112067ea9d1e..9fe599a1595e0b14ffa2fdfb20ba6efef4cf1453 100755 (executable)
@@ -20,19 +20,112 @@ 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_ok $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_ok $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"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace single"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
 
@@ -57,7 +150,9 @@ function test_syscall_two()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_two"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace two events"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
        lttng_enable_kernel_syscall_ok $SESSION_NAME "close"
@@ -85,7 +180,9 @@ function test_syscall_all()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_all"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace all events"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        # enable all syscalls
        lttng_enable_kernel_syscall_ok $SESSION_NAME
@@ -111,19 +208,22 @@ function test_syscall_all_disable_one()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_all_disable_one"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace all events and disable one"
+
+       create_lttng_session_ok $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
@@ -139,21 +239,28 @@ function test_syscall_all_disable_two()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_all_disable_two"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace all events and disable two"
+
+       create_lttng_session_ok $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
@@ -169,7 +276,9 @@ function test_syscall_enable_all_disable_all()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_enable_all_disable_all"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace all events and disable all"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        # enable all system calls
        lttng_enable_kernel_syscall_ok $SESSION_NAME
@@ -194,7 +303,9 @@ function test_syscall_enable_all_disable_all_enable_all()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_enable_all_disable_all_enable_all"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace all events and enable/disable all"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        # enable all system calls
        lttng_enable_kernel_syscall_ok $SESSION_NAME
@@ -225,7 +336,9 @@ function test_syscall_enable_all_disable_all_twice()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_enable_all_disable_all_twice"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace all events and enable/disable all twice"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        # enable all system calls
        lttng_enable_kernel_syscall_ok $SESSION_NAME
@@ -254,7 +367,9 @@ function test_syscall_enable_one_disable_one()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_enable_one_disable_one"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace one event and disable one"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        # enable open system call
        lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
@@ -279,7 +394,9 @@ function test_syscall_enable_two_disable_two()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_enable_two_disable_two"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace two events and disable two"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        # enable open and close system calls
        lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
@@ -306,7 +423,9 @@ function test_syscall_enable_two_disable_one()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_enable_two_disable_one"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace two events and disable one"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        # enable open and close system calls
        lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
@@ -336,13 +455,15 @@ function test_syscall_disable_twice()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_disable_twice"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace one event and disable twice"
+
+       create_lttng_session_ok $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"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall trace all events and disable all twice"
+
+       create_lttng_session_ok $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"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall enable an unknown event"
+
+       create_lttng_session_ok $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"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall enable all and enable one"
+
+       create_lttng_session_ok $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,7 +532,9 @@ function test_syscall_disable_all_disable_one()
        TRACE_PATH=$(mktemp -d)
        SESSION_NAME="kernel_syscall_enable_all_enable_one"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall disable all and disable one"
+
+       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME
        lttng_disable_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"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall enable channel and disable all"
+
+       create_lttng_session_ok $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,7 +572,9 @@ function test_syscall_enable_channel_disable_one()
        SESSION_NAME="kernel_syscall_enable_channel_disable_all"
        CHANNEL_NAME="channel"
 
-       create_lttng_session $SESSION_NAME $TRACE_PATH
+       diag "Syscall enable channel and 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
@@ -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
This page took 0.027932 seconds and 4 git commands to generate.