Commit | Line | Data |
---|---|---|
a0b1f42c JD |
1 | #!/bin/bash |
2 | # | |
9d16b343 | 3 | # Copyright (C) 2016 Julien Desfossez <jdesfossez@efficios.com> |
a0b1f42c | 4 | # |
9d16b343 | 5 | # SPDX-License-Identifier: GPL-2.0-only |
a0b1f42c | 6 | # |
a0b1f42c JD |
7 | |
8 | TEST_DESC="Kernel tracer - select, poll and epoll payload extraction" | |
9 | ||
2af9cd67 | 10 | CURDIR=$(dirname "$0")/ |
a0b1f42c JD |
11 | TESTDIR=$CURDIR/../.. |
12 | VALIDATE_SCRIPT="$CURDIR/validate_select_poll_epoll.py" | |
13 | NUM_TESTS=102 | |
14 | ||
15 | # Only run this test on x86 and arm | |
16 | uname -m | grep -E "x86|i686|arm|aarch64" >/dev/null 2>&1 | |
17 | if test $? != 0; then | |
18 | exit 0 | |
19 | fi | |
20 | ||
21 | DISABLE_VALIDATE=0 | |
22 | # Babeltrace python bindings are required for the validation, but | |
23 | # it is not a mandatory dependancy of the project, so fail run the | |
24 | # without the content validation, at least we test that we are not | |
25 | # crashing the kernel. | |
26 | $VALIDATE_SCRIPT --help >/dev/null 2>&1 | |
27 | if test $? != 0; then | |
28 | echo "# Failed to run the validation script, Babeltrace Python bindings might be missing" | |
29 | DISABLE_VALIDATE=1 | |
30 | fi | |
31 | ||
32 | LAST_WARNING=$(dmesg | grep " WARNING:" | cut -d' ' -f1 | tail -1) | |
33 | LAST_OOPS=$(dmesg | grep " OOPS:" | cut -d' ' -f1 | tail -1) | |
34 | LAST_BUG=$(dmesg | grep " BUG:" | cut -d' ' -f1 | tail -1) | |
35 | ||
2af9cd67 | 36 | # shellcheck source=../../utils/utils.sh |
a0b1f42c JD |
37 | source $TESTDIR/utils/utils.sh |
38 | ||
39 | function check_trace_content() | |
40 | { | |
41 | if test $DISABLE_VALIDATE == 1; then | |
42 | ok 0 "Validation skipped" | |
43 | return | |
44 | fi | |
45 | ||
46 | $VALIDATE_SCRIPT $@ | |
47 | if test $? = 0; then | |
48 | ok 0 "Validation success" | |
49 | else | |
50 | fail "Validation" | |
51 | fi | |
52 | } | |
53 | ||
54 | function test_working_cases() | |
55 | { | |
a0b1f42c | 56 | SESSION_NAME="syscall_payload" |
2af9cd67 JG |
57 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
58 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
59 | |
60 | # arm64 does not have epoll_wait | |
61 | uname -m | grep -E "aarch64" >/dev/null 2>&1 | |
62 | if test $? = 0; then | |
63 | SYSCALL_LIST="select,pselect6,poll,ppoll,epoll_ctl,epoll_pwait" | |
64 | else | |
65 | SYSCALL_LIST="select,pselect6,poll,ppoll,epoll_ctl,epoll_wait,epoll_pwait" | |
66 | fi | |
67 | ||
68 | diag "Working cases for select, pselect6, poll, ppoll and epoll, waiting for input" | |
69 | ||
2af9cd67 | 70 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
71 | |
72 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
73 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
74 | ||
75 | start_lttng_tracing_ok | |
2af9cd67 | 76 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 1 |
a0b1f42c | 77 | stop_lttng_tracing_ok |
a0b1f42c | 78 | |
2af9cd67 JG |
79 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
80 | check_trace_content -t 1 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" | |
a0b1f42c JD |
81 | |
82 | destroy_lttng_session_ok $SESSION_NAME | |
83 | ||
2af9cd67 JG |
84 | rm -rf "$TRACE_PATH" |
85 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
86 | } |
87 | ||
88 | function test_timeout_cases() | |
89 | { | |
a0b1f42c | 90 | SESSION_NAME="syscall_payload" |
2af9cd67 JG |
91 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
92 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
93 | |
94 | # arm64 does not have epoll_wait | |
95 | uname -m | grep -E "aarch64" >/dev/null 2>&1 | |
96 | if test $? = 0; then | |
97 | SYSCALL_LIST="select,pselect6,poll,ppoll,epoll_ctl,epoll_pwait" | |
98 | else | |
99 | SYSCALL_LIST="select,pselect6,poll,ppoll,epoll_ctl,epoll_wait,epoll_pwait" | |
100 | fi | |
101 | ||
102 | diag "Timeout cases (1ms) for select, pselect6, poll, ppoll and epoll" | |
103 | ||
2af9cd67 | 104 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
105 | |
106 | lttng_enable_kernel_syscall_ok $SESSION_NAME "$SYSCALL_LIST" | |
107 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
108 | ||
109 | start_lttng_tracing_ok | |
2af9cd67 | 110 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 2 |
a0b1f42c | 111 | stop_lttng_tracing_ok |
a0b1f42c | 112 | |
2af9cd67 JG |
113 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
114 | check_trace_content -t 2 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
115 | |
116 | destroy_lttng_session_ok $SESSION_NAME | |
117 | ||
2af9cd67 JG |
118 | rm -rf "$TRACE_PATH" |
119 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
120 | } |
121 | ||
8b3b99e2 | 122 | function test_pselect_invalid_fd() |
a0b1f42c | 123 | { |
a0b1f42c JD |
124 | SESSION_NAME="syscall_payload" |
125 | SYSCALL_LIST="pselect6" | |
2af9cd67 JG |
126 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
127 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c | 128 | |
8b3b99e2 | 129 | diag "pselect with invalid FD" |
a0b1f42c | 130 | |
2af9cd67 | 131 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
132 | |
133 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
134 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
135 | ||
136 | start_lttng_tracing_ok | |
2af9cd67 | 137 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 3 |
a0b1f42c | 138 | stop_lttng_tracing_ok |
a0b1f42c | 139 | |
2af9cd67 JG |
140 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
141 | check_trace_content -t 3 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
142 | |
143 | destroy_lttng_session_ok $SESSION_NAME | |
144 | ||
2af9cd67 JG |
145 | rm -rf "$TRACE_PATH" |
146 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
147 | } |
148 | ||
149 | function test_big_ppoll() | |
150 | { | |
a0b1f42c JD |
151 | SESSION_NAME="syscall_payload" |
152 | SYSCALL_LIST="ppoll" | |
2af9cd67 JG |
153 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
154 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
155 | |
156 | diag "ppoll with 2047 FDs" | |
157 | ||
2af9cd67 | 158 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
159 | |
160 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
161 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
162 | ||
163 | start_lttng_tracing_ok | |
2af9cd67 | 164 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 4 |
a0b1f42c | 165 | stop_lttng_tracing_ok |
a0b1f42c | 166 | |
2af9cd67 JG |
167 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
168 | check_trace_content -t 4 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
169 | |
170 | destroy_lttng_session_ok $SESSION_NAME | |
171 | ||
2af9cd67 JG |
172 | rm -rf "$TRACE_PATH" |
173 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
174 | } |
175 | ||
176 | function test_ppoll_overflow() | |
177 | { | |
a0b1f42c JD |
178 | SESSION_NAME="syscall_payload" |
179 | SYSCALL_LIST="ppoll" | |
2af9cd67 JG |
180 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
181 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
182 | |
183 | diag "ppoll buffer overflow, should segfault, waits for input" | |
184 | ||
2af9cd67 | 185 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
186 | |
187 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
188 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
189 | ||
190 | start_lttng_tracing_ok | |
191 | diag "Expect segfaults" | |
2af9cd67 | 192 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 5 |
a0b1f42c | 193 | stop_lttng_tracing_ok |
a0b1f42c | 194 | |
2af9cd67 | 195 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
a0b1f42c | 196 | |
2af9cd67 | 197 | check_trace_content -t 5 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null |
a0b1f42c JD |
198 | |
199 | destroy_lttng_session_ok $SESSION_NAME | |
200 | ||
2af9cd67 JG |
201 | rm -rf "$TRACE_PATH" |
202 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
203 | } |
204 | ||
205 | function test_pselect_invalid_ptr() | |
206 | { | |
a0b1f42c JD |
207 | SESSION_NAME="syscall_payload" |
208 | SYSCALL_LIST="pselect6" | |
2af9cd67 JG |
209 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
210 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
211 | |
212 | diag "pselect with invalid pointer, waits for input" | |
213 | ||
2af9cd67 | 214 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
215 | |
216 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
217 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
218 | ||
219 | start_lttng_tracing_ok | |
2af9cd67 | 220 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 6 |
a0b1f42c | 221 | stop_lttng_tracing_ok |
a0b1f42c | 222 | |
2af9cd67 JG |
223 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
224 | check_trace_content -t 6 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
225 | |
226 | destroy_lttng_session_ok $SESSION_NAME | |
227 | ||
2af9cd67 JG |
228 | rm -rf "$TRACE_PATH" |
229 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
230 | } |
231 | ||
232 | function test_ppoll_ulong_max() | |
233 | { | |
a0b1f42c JD |
234 | SESSION_NAME="syscall_payload" |
235 | SYSCALL_LIST="ppoll" | |
2af9cd67 JG |
236 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
237 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
238 | |
239 | diag "ppoll with ulong_max fds, waits for input" | |
240 | ||
2af9cd67 | 241 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
242 | |
243 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
244 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
245 | ||
246 | start_lttng_tracing_ok | |
2af9cd67 | 247 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 7 |
a0b1f42c | 248 | stop_lttng_tracing_ok |
a0b1f42c | 249 | |
2af9cd67 JG |
250 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
251 | check_trace_content -t 7 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
252 | |
253 | destroy_lttng_session_ok $SESSION_NAME | |
254 | ||
2af9cd67 JG |
255 | rm -rf "$TRACE_PATH" |
256 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
257 | } |
258 | ||
259 | function test_epoll_pwait_invalid_ptr() | |
260 | { | |
a0b1f42c JD |
261 | SESSION_NAME="syscall_payload" |
262 | SYSCALL_LIST="epoll_pwait" | |
2af9cd67 JG |
263 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
264 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
265 | |
266 | diag "epoll_pwait with invalid pointer, waits for input" | |
267 | ||
2af9cd67 | 268 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
269 | |
270 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
271 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
272 | ||
273 | start_lttng_tracing_ok | |
2af9cd67 | 274 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 8 |
a0b1f42c | 275 | stop_lttng_tracing_ok |
a0b1f42c | 276 | |
2af9cd67 JG |
277 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
278 | check_trace_content -t 8 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
279 | |
280 | destroy_lttng_session_ok $SESSION_NAME | |
281 | ||
2af9cd67 JG |
282 | rm -rf "$TRACE_PATH" |
283 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
284 | } |
285 | ||
286 | function test_epoll_pwait_int_max() | |
287 | { | |
a0b1f42c JD |
288 | SESSION_NAME="syscall_payload" |
289 | SYSCALL_LIST="epoll_pwait" | |
2af9cd67 JG |
290 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
291 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
292 | |
293 | diag "epoll_pwait with maxevents set to INT_MAX, waits for input" | |
294 | ||
2af9cd67 | 295 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
296 | |
297 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
298 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
299 | ||
300 | start_lttng_tracing_ok | |
2af9cd67 | 301 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 9 |
a0b1f42c | 302 | stop_lttng_tracing_ok |
a0b1f42c | 303 | |
2af9cd67 JG |
304 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
305 | check_trace_content -t 9 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
306 | |
307 | destroy_lttng_session_ok $SESSION_NAME | |
308 | ||
2af9cd67 JG |
309 | rm -rf "$TRACE_PATH" |
310 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
311 | } |
312 | ||
313 | function test_ppoll_concurrent() | |
314 | { | |
a0b1f42c JD |
315 | SESSION_NAME="syscall_payload" |
316 | SYSCALL_LIST="ppoll" | |
2af9cd67 JG |
317 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
318 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
319 | |
320 | diag "ppoll with concurrent updates of the structure from user-space, stress test (3000 iterations), waits for input + timeout 1ms" | |
321 | ||
2af9cd67 | 322 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
323 | |
324 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
325 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
326 | ||
327 | start_lttng_tracing_ok | |
2af9cd67 | 328 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 10 |
a0b1f42c | 329 | stop_lttng_tracing_ok |
a0b1f42c | 330 | |
2af9cd67 JG |
331 | validate_trace "$SYSCALL_LIST" "$TRACE_PATH" |
332 | check_trace_content -t 10 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
333 | |
334 | destroy_lttng_session_ok $SESSION_NAME | |
335 | ||
2af9cd67 JG |
336 | rm -rf "$TRACE_PATH" |
337 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
338 | } |
339 | ||
340 | function test_epoll_pwait_concurrent() | |
341 | { | |
a0b1f42c JD |
342 | SESSION_NAME="syscall_payload" |
343 | SYSCALL_LIST="epoll_ctl,epoll_pwait" | |
2af9cd67 JG |
344 | TRACE_PATH=$(mktemp --tmpdir -d "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_trace_path.XXXXXX") |
345 | TEST_VALIDATION_OUTPUT_PATH=$(mktemp --tmpdir -u "tmp.test_kernel_select_poll_epoll_${FUNCNAME[0]}_validation.XXXXXX") | |
a0b1f42c JD |
346 | |
347 | diag "epoll_pwait with concurrent munmap of the buffer from user-space, should randomly segfault, run multiple times, waits for input + timeout 1ms" | |
348 | ||
2af9cd67 | 349 | create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" |
a0b1f42c JD |
350 | |
351 | lttng_enable_kernel_syscall_ok $SESSION_NAME $SYSCALL_LIST | |
352 | add_context_kernel_ok $SESSION_NAME channel0 pid | |
353 | ||
354 | start_lttng_tracing_ok | |
355 | diag "Expect segfaults" | |
356 | for i in $(seq 1 100); do | |
2af9cd67 | 357 | yes | "$CURDIR"/select_poll_epoll --validation-file "$TEST_VALIDATION_OUTPUT_PATH" -t 11 |
a0b1f42c | 358 | done |
a0b1f42c JD |
359 | stop_lttng_tracing_ok |
360 | ||
361 | # epoll_wait is not always generated in the trace (stress test) | |
2af9cd67 JG |
362 | validate_trace "epoll_ctl" "$TRACE_PATH" |
363 | check_trace_content -t 11 --validation-file "$TEST_VALIDATION_OUTPUT_PATH" "$TRACE_PATH" 2>/dev/null | |
a0b1f42c JD |
364 | |
365 | destroy_lttng_session_ok $SESSION_NAME | |
366 | ||
2af9cd67 JG |
367 | rm -rf "$TRACE_PATH" |
368 | rm -f "$TEST_VALIDATION_OUTPUT_PATH" | |
a0b1f42c JD |
369 | } |
370 | ||
371 | # MUST set TESTDIR before calling those functions | |
372 | plan_tests $NUM_TESTS | |
373 | ||
374 | print_test_banner "$TEST_DESC" | |
375 | ||
376 | if [ "$(id -u)" == "0" ]; then | |
377 | isroot=1 | |
378 | else | |
379 | isroot=0 | |
380 | fi | |
381 | ||
382 | skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || | |
383 | { | |
384 | start_lttng_sessiond | |
385 | ||
386 | test_working_cases | |
387 | test_timeout_cases | |
8b3b99e2 | 388 | test_pselect_invalid_fd |
a0b1f42c JD |
389 | test_big_ppoll |
390 | test_ppoll_overflow | |
391 | test_pselect_invalid_ptr | |
392 | test_ppoll_ulong_max | |
393 | test_epoll_pwait_invalid_ptr | |
394 | test_epoll_pwait_int_max | |
395 | test_ppoll_concurrent | |
396 | test_epoll_pwait_concurrent | |
397 | ||
398 | stop_lttng_sessiond | |
399 | ||
400 | NEW_WARNING=$(dmesg | grep " WARNING:" | cut -d' ' -f1 | tail -1) | |
401 | NEW_OOPS=$(dmesg | grep " OOPS:" | cut -d' ' -f1 | tail -1) | |
402 | NEW_BUG=$(dmesg | grep " BUG:" | cut -d' ' -f1 | tail -1) | |
403 | ||
404 | if test "$LAST_WARNING" != "$NEW_WARNING"; then | |
405 | fail "New WARNING generated" | |
406 | fi | |
407 | if test "$LAST_OOPS" != "$NEW_OOPS"; then | |
408 | fail "New OOPS generated" | |
409 | fi | |
410 | if test "$LAST_BUG" != "$NEW_BUG"; then | |
411 | fail "New BUG generated" | |
412 | fi | |
413 | } |