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