Tests: fix: select_poll_epoll: test assumes epoll fd value
[lttng-tools.git] / tests / regression / kernel / test_select_poll_epoll
index 16b0da525c4fae8cf394aa57729dd84bb24641d6..6d5509b25990ea7960e39803cc07b2c54e6b7290 100755 (executable)
@@ -7,7 +7,7 @@
 
 TEST_DESC="Kernel tracer - select, poll and epoll payload extraction"
 
-CURDIR=$(dirname $0)/
+CURDIR=$(dirname "$0")/
 TESTDIR=$CURDIR/../..
 VALIDATE_SCRIPT="$CURDIR/validate_select_poll_epoll.py"
 NUM_TESTS=102
@@ -33,6 +33,7 @@ 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)
 
+# shellcheck source=../../utils/utils.sh
 source $TESTDIR/utils/utils.sh
 
 function check_trace_content()
@@ -52,8 +53,9 @@ function check_trace_content()
 
 function test_working_cases()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "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
@@ -65,28 +67,29 @@ function test_working_cases()
 
        diag "Working cases for select, pselect6, poll, ppoll and epoll, waiting for input"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
-       { out=$(yes | $CURDIR/select_poll_epoll -t 1); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 1
        stop_lttng_tracing_ok
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
-       check_trace_content -t 1 -p $pid $TRACE_PATH
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
+       check_trace_content -t 1 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH"
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_timeout_cases()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "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
@@ -98,244 +101,252 @@ function test_timeout_cases()
 
        diag "Timeout cases (1ms) for select, pselect6, poll, ppoll and epoll"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME "$SYSCALL_LIST"
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
-       { out=$($CURDIR/select_poll_epoll -t 2); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 2
        stop_lttng_tracing_ok
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
-       check_trace_content -t 2 -p $pid $TRACE_PATH 2>/dev/null
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
+       check_trace_content -t 2 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_pselect_invalid_fd()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
        SYSCALL_LIST="pselect6"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX")
 
        diag "pselect with invalid FD"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
-       { out=$($CURDIR/select_poll_epoll -t 3); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 3
        stop_lttng_tracing_ok
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
-       check_trace_content -t 3 -p $pid $TRACE_PATH 2>/dev/null
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
+       check_trace_content -t 3 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_big_ppoll()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
        SYSCALL_LIST="ppoll"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX")
 
        diag "ppoll with 2047 FDs"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
-       { out=$(yes | $CURDIR/select_poll_epoll -t 4); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 4
        stop_lttng_tracing_ok
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
-       check_trace_content -t 4 -p $pid $TRACE_PATH 2>/dev/null
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
+       check_trace_content -t 4 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_ppoll_overflow()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
        SYSCALL_LIST="ppoll"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX")
 
        diag "ppoll buffer overflow, should segfault, waits for input"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
        diag "Expect segfaults"
-       { out=$(yes | $CURDIR/select_poll_epoll -t 5); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 5
        stop_lttng_tracing_ok
-       echo $out
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
 
-       check_trace_content -t 5 -p $pid $TRACE_PATH 2>/dev/null
+       check_trace_content -t 5 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_pselect_invalid_ptr()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
        SYSCALL_LIST="pselect6"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX")
 
        diag "pselect with invalid pointer, waits for input"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
-       { out=$(yes | $CURDIR/select_poll_epoll -t 6); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 6
        stop_lttng_tracing_ok
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
-       check_trace_content -t 6 -p $pid $TRACE_PATH 2>/dev/null
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
+       check_trace_content -t 6 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_ppoll_ulong_max()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
        SYSCALL_LIST="ppoll"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX")
 
        diag "ppoll with ulong_max fds, waits for input"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
-       { out=$(yes | $CURDIR/select_poll_epoll -t 7); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 7
        stop_lttng_tracing_ok
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
-       check_trace_content -t 7 -p $pid $TRACE_PATH 2>/dev/null
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
+       check_trace_content -t 7 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_epoll_pwait_invalid_ptr()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
        SYSCALL_LIST="epoll_pwait"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX")
 
        diag "epoll_pwait with invalid pointer, waits for input"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
-       { out=$(yes | $CURDIR/select_poll_epoll -t 8); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 8
        stop_lttng_tracing_ok
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
-       check_trace_content -t 8 -p $pid $TRACE_PATH 2>/dev/null
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
+       check_trace_content -t 8 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_epoll_pwait_int_max()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
        SYSCALL_LIST="epoll_pwait"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX")
 
        diag "epoll_pwait with maxevents set to INT_MAX, waits for input"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
-       { out=$(yes | $CURDIR/select_poll_epoll -t 9); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 9
        stop_lttng_tracing_ok
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
-       check_trace_content -t 9 -p $pid $TRACE_PATH 2>/dev/null
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
+       check_trace_content -t 9 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_ppoll_concurrent()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
        SYSCALL_LIST="ppoll"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX")
 
        diag "ppoll with concurrent updates of the structure from user-space, stress test (3000 iterations), waits for input + timeout 1ms"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
 
        start_lttng_tracing_ok
-       { out=$(yes | $CURDIR/select_poll_epoll -t 10); } 2>/dev/null
+       yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 10
        stop_lttng_tracing_ok
-       pid=$(echo $out | cut -d' ' -f1)
 
-       validate_trace "$SYSCALL_LIST" $TRACE_PATH
-       check_trace_content -t 10 -p $pid $TRACE_PATH 2>/dev/null
+       validate_trace "$SYSCALL_LIST" "$TRACE_PATH"
+       check_trace_content -t 10 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 function test_epoll_pwait_concurrent()
 {
-       TRACE_PATH=$(mktemp --tmpdir -d "tmp.${FUNCNAME[0]}_trace_path.XXXXXX")
        SESSION_NAME="syscall_payload"
        SYSCALL_LIST="epoll_ctl,epoll_pwait"
+       TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX")
+       TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX")
 
        diag "epoll_pwait with concurrent munmap of the buffer from user-space, should randomly segfault, run multiple times, waits for input + timeout 1ms"
 
-       create_lttng_session_ok $SESSION_NAME $TRACE_PATH
+       create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
 
        lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST
        add_context_kernel_ok $SESSION_NAME channel0 pid
@@ -343,18 +354,18 @@ function test_epoll_pwait_concurrent()
        start_lttng_tracing_ok
        diag "Expect segfaults"
        for i in $(seq 1 100); do
-               { out=$($CURDIR/select_poll_epoll -t 11); } 2>/dev/null
+               yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 11
        done
-       pid=$(echo $out | cut -d' ' -f1)
        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 -p $pid $TRACE_PATH 2>/dev/null
+       validate_trace "epoll_ctl" "$TRACE_PATH"
+       check_trace_content -t 11 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       rm -rf $TRACE_PATH
+       rm -rf "$TRACE_PATH"
+       rm -f "$TEST_VALIDATION_OUTPUT_PATH"
 }
 
 # MUST set TESTDIR before calling those functions
This page took 0.029451 seconds and 4 git commands to generate.