X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=tests%2Fregression%2Fkernel%2Ftest_select_poll_epoll;h=cdde1ea4f04c281eef142fe4466d6f93e31b9e6b;hb=2a2ac572b7d75ef18ce4dfe73b89a00da44bcb61;hp=db4ffae88734bea21b246dd8962c5fb26823f9a3;hpb=671e39d79a1ad9c3f13c4784a26710a5b1f14237;p=lttng-tools.git diff --git a/tests/regression/kernel/test_select_poll_epoll b/tests/regression/kernel/test_select_poll_epoll index db4ffae88..cdde1ea4f 100755 --- a/tests/regression/kernel/test_select_poll_epoll +++ b/tests/regression/kernel/test_select_poll_epoll @@ -10,7 +10,6 @@ TEST_DESC="Kernel tracer - select, poll and epoll payload extraction" CURDIR=$(dirname "$0")/ TESTDIR=$CURDIR/../.. VALIDATE_SCRIPT="$CURDIR/validate_select_poll_epoll.py" -NUM_TESTS=102 DISABLE_VALIDATE=0 # Babeltrace python bindings are required for the validation, but @@ -27,6 +26,12 @@ LAST_WARNING=$(dmesg | grep " WARNING:" | cut -d' ' -f1 | tail -1) LAST_OOPS=$(dmesg | grep " OOPS:" | cut -d' ' -f1 | tail -1) LAST_BUG=$(dmesg | grep " BUG:" | cut -d' ' -f1 | tail -1) +SUPPORTED_SYSCALLS_LIST=$("$CURDIR"/select_poll_epoll --list-supported-test-syscalls) +SUPPORTED_SYSCALLS_COUNT=$(echo $SUPPORTED_SYSCALLS_LIST | awk -F '[\t,]' '{print NF}') + +# Two tests validate their trace for every supported syscall +NUM_TESTS=$((88+(2*SUPPORTED_SYSCALLS_COUNT))) + # shellcheck source=../../utils/utils.sh source $TESTDIR/utils/utils.sh @@ -51,27 +56,19 @@ function test_working_cases() TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") - # arm64 does not have epoll_wait - uname -m | grep -E "aarch64" >/dev/null 2>&1 - if test $? = 0; then - SYSCALL_LIST="select,pselect6,poll,ppoll,epoll_ctl,epoll_pwait" - else - SYSCALL_LIST="select,pselect6,poll,ppoll,epoll_ctl,epoll_wait,epoll_pwait" - fi - diag "Working cases for select, pselect6, poll, ppoll and epoll, waiting for input" create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" - lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST + lttng_enable_kernel_syscall_ok $SESSION_NAME $SUPPORTED_SYSCALLS_LIST add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 1 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t working_cases stop_lttng_tracing_ok - validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 1 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" + validate_trace "$SUPPORTED_SYSCALLS_LIST" "$TRACE_PATH" + check_trace_content -t working_cases --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" destroy_lttng_session_ok $SESSION_NAME @@ -85,27 +82,19 @@ function test_timeout_cases() TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") - # arm64 does not have epoll_wait - uname -m | grep -E "aarch64" >/dev/null 2>&1 - if test $? = 0; then - SYSCALL_LIST="select,pselect6,poll,ppoll,epoll_ctl,epoll_pwait" - else - SYSCALL_LIST="select,pselect6,poll,ppoll,epoll_ctl,epoll_wait,epoll_pwait" - fi - diag "Timeout cases (1ms) for select, pselect6, poll, ppoll and epoll" create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" - lttng_enable_kernel_syscall_ok $SESSION_NAME "$SYSCALL_LIST" + lttng_enable_kernel_syscall_ok $SESSION_NAME "$SUPPORTED_SYSCALLS_LIST" add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 2 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t working_cases_timeout stop_lttng_tracing_ok - validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 2 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + validate_trace "$SUPPORTED_SYSCALLS_LIST" "$TRACE_PATH" + check_trace_content -t working_cases_timeout --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -116,7 +105,7 @@ function test_timeout_cases() function test_pselect_invalid_fd() { SESSION_NAME="syscall_payload" - SYSCALL_LIST="pselect6" + local SYSCALL_LIST="pselect6" TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") @@ -128,11 +117,11 @@ function test_pselect_invalid_fd() add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 3 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t pselect_invalid_fd stop_lttng_tracing_ok validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 3 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + check_trace_content -t pselect_invalid_fd --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -140,10 +129,10 @@ function test_pselect_invalid_fd() rm -f "$TEST_VALIDATION_OUTPUT_PATH" } -function test_big_ppoll() +function test_ppoll_big() { SESSION_NAME="syscall_payload" - SYSCALL_LIST="ppoll" + local SYSCALL_LIST="ppoll" TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") @@ -155,11 +144,11 @@ function test_big_ppoll() add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 4 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t ppoll_big stop_lttng_tracing_ok validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 4 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + check_trace_content -t ppoll_big --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -167,10 +156,10 @@ function test_big_ppoll() rm -f "$TEST_VALIDATION_OUTPUT_PATH" } -function test_ppoll_overflow() +function test_ppoll_fds_buffer_overflow() { SESSION_NAME="syscall_payload" - SYSCALL_LIST="ppoll" + local SYSCALL_LIST="ppoll" TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") @@ -183,12 +172,12 @@ function test_ppoll_overflow() start_lttng_tracing_ok diag "Expect segfaults" - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 5 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t ppoll_fds_buffer_overflow stop_lttng_tracing_ok validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 5 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + check_trace_content -t ppoll_fds_buffer_overflow --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -196,10 +185,10 @@ function test_ppoll_overflow() rm -f "$TEST_VALIDATION_OUTPUT_PATH" } -function test_pselect_invalid_ptr() +function test_pselect_invalid_pointer() { SESSION_NAME="syscall_payload" - SYSCALL_LIST="pselect6" + local SYSCALL_LIST="pselect6" TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") @@ -211,11 +200,11 @@ function test_pselect_invalid_ptr() add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 6 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t pselect_invalid_pointer stop_lttng_tracing_ok validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 6 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + check_trace_content -t pselect_invalid_pointer --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -223,10 +212,10 @@ function test_pselect_invalid_ptr() rm -f "$TEST_VALIDATION_OUTPUT_PATH" } -function test_ppoll_ulong_max() +function test_ppoll_fds_ulong_max() { SESSION_NAME="syscall_payload" - SYSCALL_LIST="ppoll" + local SYSCALL_LIST="ppoll" TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") @@ -238,11 +227,11 @@ function test_ppoll_ulong_max() add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 7 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t ppoll_fds_ulong_max stop_lttng_tracing_ok validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 7 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + check_trace_content -t ppoll_fds_ulong_max --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -250,10 +239,10 @@ function test_ppoll_ulong_max() rm -f "$TEST_VALIDATION_OUTPUT_PATH" } -function test_epoll_pwait_invalid_ptr() +function test_epoll_pwait_invalid_pointer() { SESSION_NAME="syscall_payload" - SYSCALL_LIST="epoll_pwait" + local SYSCALL_LIST="epoll_pwait" TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") @@ -265,11 +254,11 @@ function test_epoll_pwait_invalid_ptr() add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 8 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t epoll_pwait_invalid_pointer stop_lttng_tracing_ok validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 8 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + check_trace_content -t epoll_pwait_invalid_pointer --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -277,10 +266,10 @@ function test_epoll_pwait_invalid_ptr() rm -f "$TEST_VALIDATION_OUTPUT_PATH" } -function test_epoll_pwait_int_max() +function test_epoll_pwait_fds_int_max() { SESSION_NAME="syscall_payload" - SYSCALL_LIST="epoll_pwait" + local SYSCALL_LIST="epoll_pwait" TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") @@ -292,11 +281,11 @@ function test_epoll_pwait_int_max() add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 9 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t epoll_pwait_int_max stop_lttng_tracing_ok validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 9 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + check_trace_content -t epoll_pwait_int_max --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -304,10 +293,10 @@ function test_epoll_pwait_int_max() rm -f "$TEST_VALIDATION_OUTPUT_PATH" } -function test_ppoll_concurrent() +function test_ppoll_concurrent_write() { SESSION_NAME="syscall_payload" - SYSCALL_LIST="ppoll" + local SYSCALL_LIST="ppoll" TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") @@ -319,11 +308,11 @@ function test_ppoll_concurrent() add_context_kernel_ok $SESSION_NAME channel0 pid start_lttng_tracing_ok - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 10 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t ppoll_concurrent_write stop_lttng_tracing_ok validate_trace "$SYSCALL_LIST" "$TRACE_PATH" - check_trace_content -t 10 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + check_trace_content -t ppoll_concurrent_write --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -331,10 +320,10 @@ function test_ppoll_concurrent() rm -f "$TEST_VALIDATION_OUTPUT_PATH" } -function test_epoll_pwait_concurrent() +function test_epoll_pwait_concurrent_unmap() { SESSION_NAME="syscall_payload" - SYSCALL_LIST="epoll_ctl,epoll_pwait" + local SYSCALL_LIST="epoll_ctl,epoll_pwait" TRACE_PATH=$(mktemp -d -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") TEST_VALIDATION_OUTPUT_PATH=$(mktemp -u -t "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") @@ -348,13 +337,13 @@ function test_epoll_pwait_concurrent() start_lttng_tracing_ok diag "Expect segfaults" for i in $(seq 1 100); do - yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 11 + yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t epoll_pwait_concurrent_munmap done stop_lttng_tracing_ok # epoll_wait is not always generated in the trace (stress test) validate_trace "epoll_ctl" "$TRACE_PATH" - check_trace_content -t 11 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null + check_trace_content -t epoll_pwait_concurrent_munmap --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null destroy_lttng_session_ok $SESSION_NAME @@ -380,6 +369,8 @@ else isroot=0 fi +diag "Supported syscalls are $SUPPORTED_SYSCALLS_LIST" + skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || { validate_lttng_modules_present @@ -389,14 +380,14 @@ skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || test_working_cases test_timeout_cases test_pselect_invalid_fd - test_big_ppoll - test_ppoll_overflow - test_pselect_invalid_ptr - test_ppoll_ulong_max - test_epoll_pwait_invalid_ptr - test_epoll_pwait_int_max - test_ppoll_concurrent - test_epoll_pwait_concurrent + test_ppoll_big + test_ppoll_fds_buffer_overflow + test_pselect_invalid_pointer + test_ppoll_fds_ulong_max + test_epoll_pwait_invalid_pointer + test_epoll_pwait_fds_int_max + test_ppoll_concurrent_write + test_epoll_pwait_concurrent_unmap stop_lttng_sessiond