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