1 # 2 # Copyright 2015 EMC Corp. 3 # All rights reserved. 4 # 5 # Redistribution and use in source and binary forms, with or without 6 # modification, are permitted provided that the following conditions are 7 # met: 8 # 9 # * Redistributions of source code must retain the above copyright 10 # notice, this list of conditions and the following disclaimer. 11 # * Redistributions in binary form must reproduce the above copyright 12 # notice, this list of conditions and the following disclaimer in the 13 # documentation and/or other materials provided with the distribution. 14 # 15 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 # 27 # 28 29 # Make sure time(1) is consistent with the FreeBSD time command and not the 30 # shell interpretation of time(1) 31 TIME=/usr/bin/time 32 33 validate_time_output() 34 { 35 local time_output=$1 36 37 # RLIMIT_CPU is enforced by a 1-second timer. Allow 3 + 1 + a little. 38 atf_check awk ' 39 /^(user|sys) / { 40 sum += $2 41 } 42 END { 43 if (sum < 3 || sum >= 4.5) { 44 print(sum); 45 exit(1); 46 } 47 } 48 ' < $time_output 49 } 50 51 atf_test_case cputime_hard_flag cleanup 52 cputime_hard_flag_body() 53 { 54 55 atf_check -o match:'cputime[[:space:]]+3 secs' \ 56 limits -H -t 3 limits -H 57 atf_check -o match:'cputime[[:space:]]+3 secs' \ 58 limits -H -t 3 limits -S 59 atf_check -e save:time_output -s signal:sigkill \ 60 $TIME -p limits -H -t 3 sh -c 'while : ; do : ; done' 61 validate_time_output time_output 62 } 63 cputime_hard_flag_cleanup() 64 { 65 rm -f time_output 66 } 67 68 SIGXCPU=24 # atf_check doesn't know sigxcpu 69 70 atf_test_case cputime_soft_flag cleanup 71 cputime_soft_flag_body() 72 { 73 74 atf_check -o match:'cputime-max[[:space:]]+infinity secs' \ 75 limits -S -t 3 limits -H 76 atf_check -o match:'cputime-cur[[:space:]]+3 secs' \ 77 limits -S -t 3 limits -S 78 atf_check -e save:time_output -s signal:$SIGXCPU \ 79 $TIME -p limits -S -t 3 sh -c 'while : ; do : ; done' 80 validate_time_output time_output 81 } 82 cputime_soft_flag_cleanup() 83 { 84 rm -f time_output 85 } 86 87 atf_init_test_cases() 88 { 89 90 atf_add_test_case cputime_hard_flag 91 atf_add_test_case cputime_soft_flag 92 } 93