git: 485f783f882e - main - limits_test: validate CPU time used, not real time
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 14 Apr 2023 20:16:17 UTC
The branch main has been updated by vangyzen: URL: https://cgit.FreeBSD.org/src/commit/?id=485f783f882ed026cdbfede89aa7bddad3fffdf3 commit 485f783f882ed026cdbfede89aa7bddad3fffdf3 Author: Eric van Gyzen <vangyzen@FreeBSD.org> AuthorDate: 2023-04-14 21:11:29 +0000 Commit: Eric van Gyzen <vangyzen@FreeBSD.org> CommitDate: 2023-04-14 21:16:05 +0000 limits_test: validate CPU time used, not real time RLIMIT_CPU applies to CPU time, not real (wall-clock) time. This test failed in AWS, where the real time was 5-7 seconds. Sum the user and system CPU time used, and validate that. While I'm here, don't bother specifying -s exit:0 or -e empty, since those are checked by default. MFC after: 1 week Sponsored by: Dell EMC Isilon --- usr.bin/limits/tests/limits_test.sh | 44 ++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/usr.bin/limits/tests/limits_test.sh b/usr.bin/limits/tests/limits_test.sh index 63f60e8eedf5..195813d322a6 100755 --- a/usr.bin/limits/tests/limits_test.sh +++ b/usr.bin/limits/tests/limits_test.sh @@ -31,30 +31,58 @@ # shell interpretation of time(1) TIME=/usr/bin/time -atf_test_case cputime_hard_flag +validate_time_output() +{ + local time_output=$1 + + # RLIMIT_CPU is enforced by a 1-second timer. Allow 3 + 1 + a little. + atf_check awk ' + /^(user|sys) / { + sum += $2 + } + END { + if (sum < 3 || sum >= 4.5) { + print(sum); + exit(1); + } + } + ' < $time_output +} + +atf_test_case cputime_hard_flag cleanup cputime_hard_flag_body() { - atf_check -e empty -o match:'cputime[[:space:]]+3 secs' -s exit:0 \ + atf_check -o match:'cputime[[:space:]]+3 secs' \ limits -H -t 3 limits -H - atf_check -e empty -o match:'cputime[[:space:]]+3 secs' -s exit:0 \ + atf_check -o match:'cputime[[:space:]]+3 secs' \ limits -H -t 3 limits -S - atf_check -e match:'real[[:space:]]+[34]\.[0-9][0-9]' -o empty -s signal:sigkill \ + atf_check -e save:time_output -s signal:sigkill \ limits -H -t 3 $TIME -p sh -c 'while : ; do : ; done' + validate_time_output time_output +} +cputime_hard_flag_cleanup() +{ + rm -f time_output } SIGXCPU=24 # atf_check doesn't know sigxcpu -atf_test_case cputime_soft_flag +atf_test_case cputime_soft_flag cleanup cputime_soft_flag_body() { - atf_check -e empty -o match:'cputime-max[[:space:]]+infinity secs' -s exit:0 \ + atf_check -o match:'cputime-max[[:space:]]+infinity secs' \ limits -S -t 3 limits -H - atf_check -e empty -o match:'cputime-cur[[:space:]]+3 secs' -s exit:0 \ + atf_check -o match:'cputime-cur[[:space:]]+3 secs' \ limits -S -t 3 limits -S - atf_check -e match:'real[[:space:]]+[34]\.[0-9][0-9]' -o empty -s signal:$SIGXCPU \ + atf_check -e save:time_output -s signal:$SIGXCPU \ limits -S -t 3 $TIME -p sh -c 'while : ; do : ; done' + validate_time_output time_output +} +cputime_soft_flag_cleanup() +{ + rm -f time_output } atf_init_test_cases()