1# 2# Copyright (c) 2022-2023 Klara, Inc. 3# 4# SPDX-License-Identifier: BSD-2-Clause 5# 6 7# Name of user to use for -u tests when running as root. Beware that 8# processes owned by that user will be affected by the test. 9TEST_USER=nobody 10 11_renice() { 12 atf_check -o empty -e ignore -s exit:0 renice "$@" 13} 14 15atf_check_nice_value() { 16 local pid=$1 17 local expected=$2 18 local actual="$(ps -o nice= -p $pid)" 19 atf_check test "$actual" -eq "$expected" 20} 21 22atf_test_case renice_abs_pid 23renice_abs_pid_head() { 24 atf_set "descr" "Set a process's nice number to an absolute value" 25} 26renice_abs_pid_body() { 27 local pid nice incr 28 sleep 60 & 29 pid=$! 30 nice="$(ps -o nice= -p $pid)" 31 incr=3 32 _renice $((nice+incr)) $pid 33 atf_check_nice_value $pid $((nice+incr)) 34 kill $pid 35} 36 37atf_test_case renice_rel_pid 38renice_rel_pid_head() { 39 atf_set "descr" "Change a process's nice number by a relative value" 40} 41renice_rel_pid_body() { 42 local pid nice incr 43 sleep 60 & 44 pid=$! 45 nice="$(ps -o nice= -p $pid)" 46 incr=3 47 _renice -n $incr $pid 48 _renice -p -n $incr $pid 49 _renice -n $incr -p $pid 50 atf_check_nice_value $pid $((nice+incr+incr+incr)) 51 kill $pid 52} 53 54atf_test_case renice_abs_pgid 55renice_abs_pgid_head() { 56 atf_set "descr" "Set a process group's nice number to an absolute value" 57} 58renice_abs_pgid_body() { 59 local pid pgid nice incr 60 # make sure target runs in a different pgrp than ours 61 pid="$(sh -mc "sleep 60 >/dev/null & echo \$!")" 62 pgid="$(ps -o pgid= -p $pid)" 63 nice="$(ps -o nice= -p $pid)" 64 incr=3 65 _renice $((nice+incr)) -g $pgid 66 atf_check_nice_value $pid $((nice+incr)) 67 kill $pid 68} 69 70atf_test_case renice_rel_pgid 71renice_rel_pgid_head() { 72 atf_set "descr" "Change a process group's nice number by a relative value" 73} 74renice_rel_pgid_body() { 75 local pid pgid nice incr 76 # make sure target runs in a different pgrp than ours 77 pid="$(sh -mc "sleep 60 >/dev/null & echo \$!")" 78 pgid="$(ps -o pgid= -p $pid)" 79 nice="$(ps -o nice= -p $pid)" 80 incr=3 81 _renice -g -n $incr $pgid 82 _renice -n $incr -g $pgid 83 atf_check_nice_value $pid $((nice+incr+incr)) 84 kill $pid 85} 86 87atf_test_case renice_abs_user 88renice_abs_user_head() { 89 atf_set "descr" "Set a user's processes' nice numbers to an absolute value" 90 atf_set "require.user" "root" 91} 92renice_abs_user_body() { 93 local user pid nice incr 94 pid="$(su -m $TEST_USER -c "/bin/sh -c 'sleep 60 >/dev/null & echo \$!'")" 95 nice="$(ps -o nice= -p $pid)" 96 incr=3 97 _renice $((nice+incr)) -u $TEST_USER 98 atf_check_nice_value $pid $((nice+incr)) 99 kill $pid 100} 101 102atf_test_case renice_rel_user 103renice_rel_user_head() { 104 atf_set "descr" "Change a user's processes' nice numbers by a relative value" 105 atf_set "require.user" "root" 106} 107renice_rel_user_body() { 108 local user pid nice incr 109 pid="$(su -m $TEST_USER -c "/bin/sh -c 'sleep 60 >/dev/null & echo \$!'")" 110 nice="$(ps -o nice= -p $pid)" 111 incr=3 112 _renice -u -n $incr $TEST_USER 113 _renice -n $incr -u $TEST_USER 114 atf_check_nice_value $pid $((nice+incr+incr)) 115 kill $pid 116} 117 118atf_test_case renice_delim 119renice_delim_head() { 120 atf_set "descr" "Test various delimiter positions" 121} 122renice_delim_body() { 123 local pid nice incr 124 sleep 60 & 125 pid=$! 126 nice="$(ps -o nice= -p $pid)" 127 incr=0 128 # without -p 129 : $((incr=incr+1)) 130 _renice -- $((nice+incr)) $pid 131 atf_check_nice_value $pid $((nice+incr)) 132 : $((incr=incr+1)) 133 _renice $((nice+incr)) -- $pid 134 atf_check_nice_value $pid $((nice+incr)) 135 : $((incr=incr+1)) 136 _renice $((nice+incr)) $pid -- 137 atf_check_nice_value $pid $((nice+incr)) 138 # with -p 139 : $((incr=incr+1)) 140 _renice -p -- $((nice+incr)) $pid 141 atf_check_nice_value $pid $((nice+incr)) 142 : $((incr=incr+1)) 143 _renice -p $((nice+incr)) -- $pid 144 atf_check_nice_value $pid $((nice+incr)) 145 : $((incr=incr+1)) 146 _renice -p $((nice+incr)) $pid -- 147 atf_check_nice_value $pid $((nice+incr)) 148 : $((incr=incr+1)) 149 _renice $((nice+incr)) -p -- $pid 150 atf_check_nice_value $pid $((nice+incr)) 151 : $((incr=incr+1)) 152 _renice $((nice+incr)) -p $pid -- 153 atf_check_nice_value $pid $((nice+incr)) 154 kill $pid 155} 156 157atf_test_case renice_incr_noarg 158renice_incr_noarg_head() { 159 atf_set "descr" "Do not segfault if -n is given without an argument" 160} 161renice_incr_noarg_body() { 162 atf_check -o empty -e ignore -s exit:1 renice -n 163} 164 165atf_init_test_cases() { 166 atf_add_test_case renice_abs_pid 167 atf_add_test_case renice_rel_pid 168 atf_add_test_case renice_abs_pgid 169 atf_add_test_case renice_rel_pgid 170 atf_add_test_case renice_abs_user 171 atf_add_test_case renice_rel_user 172 atf_add_test_case renice_delim 173 atf_add_test_case renice_incr_noarg 174} 175