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)
diag "Syscall trace single"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
diag "Syscall trace two events"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
lttng_enable_kernel_syscall_ok $SESSION_NAME "close"
diag "Syscall trace all events"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable all syscalls
lttng_enable_kernel_syscall_ok $SESSION_NAME
diag "Syscall trace all events and disable one"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ 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
diag "Syscall trace all events and disable two"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ 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
diag "Syscall trace all events and disable all"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable all system calls
lttng_enable_kernel_syscall_ok $SESSION_NAME
diag "Syscall trace all events and enable/disable all"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable all system calls
lttng_enable_kernel_syscall_ok $SESSION_NAME
diag "Syscall trace all events and enable/disable all twice"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable all system calls
lttng_enable_kernel_syscall_ok $SESSION_NAME
diag "Syscall trace one event and disable one"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable open system call
lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
diag "Syscall trace two events and disable two"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable open and close system calls
lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
diag "Syscall trace two events and disable one"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
# enable open and close system calls
lttng_enable_kernel_syscall_ok $SESSION_NAME "open"
diag "Syscall trace one event and disable twice"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ 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
diag "Syscall trace all events and disable all twice"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ 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
diag "Syscall enable an unknown event"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ 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
diag "Syscall enable all and enable one"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ 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
diag "Syscall disable all and disable one"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ create_lttng_session_ok $SESSION_NAME $TRACE_PATH
lttng_enable_kernel_syscall_ok $SESSION_NAME
lttng_disable_kernel_syscall_ok $SESSION_NAME
diag "Syscall enable channel and disable all"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ 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
diag "Syscall enable channel and disable one"
- create_lttng_session $SESSION_NAME $TRACE_PATH
+ 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
{
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