1# $NetBSD: t_swsensor.sh,v 1.4 2010/12/31 00:35:42 pgoyette Exp $ 2 3get_sensor_info() { 4 rump.envstat -x | \ 5 sed -e "\;swsensor;,\;/array;p" -e "d" 6} 7 8get_sensor_key() { 9 get_sensor_info | grep -A1 $1 | grep integer | sed -e 's;<[/a-z]*>;;g' 10} 11 12get_powerd_event_count() { 13 grep "not running" powerd.log | wc -l 14} 15 16check_powerd_event() { 17 event=$(grep "not running" powerd.log | \ 18 sed -e "$1p" -e "d" ) 19 event=${event##*//} 20 script=${event%% *} 21 event=${event#* } 22 device=${event%% *} 23 event=${event#* } 24 state=${event%% *} 25 sensor=${event#* } 26 sensor=${sensor% *} 27 28 if [ "${script}" != "sensor_indicator" ] ; then 29 echo "Event uses wrong script: ${script}" 30 elif [ "${device}" != "swsensor" ] ; then 31 echo "Event uses wrong device: ${device}" 32 elif [ "${sensor}" != "sensor" ] ; then 33 echo "Event uses wrong sensor: ${sensor}" 34 elif [ "${state}" != "$2" ] ; then 35 echo "Event uses wrong state: ${state}" 36 fi 37} 38 39# Start the rump server, then load the swsensor module with the 40# requested properties 41 42start_rump() { 43 rump_server -l rumpvfs -l rumpdev -l rumpdev_sysmon ${RUMP_SERVER} 44 if [ $( get_sensor_info | wc -l ) -ne 0 ] ; then 45 rump.modunload swsensor 46 rump.modload -f $1 swsensor 47 else 48 rump.modload $1 swsensor 49 fi 50 return $? 51} 52 53common_head() { 54 atf_set descr "$1" 55 atf_set timeout 60 56 atf_set require.progs rump.powerd rump.envstat rump.modload \ 57 rump.halt rump.sysctl rump_server \ 58 sed grep 59} 60 61common_cleanup() { 62 rump.modunload swsensor 63 rump.halt 64} 65 66create_envsys_conf_files() { 67 cat << ENV0 > env0.conf 68 swsensor { 69 refresh-timeout = 2s; 70 } 71ENV0 72 cat << ENV1 > env1.conf 73 swsensor { 74 sensor0 { critical-min = $(( $1 - $2 )); } 75 } 76ENV1 77 cat << ENV2 > env2.conf 78 swsensor { 79 sensor0 { critical-min = $1; } 80 } 81ENV2 82} 83 84# Test body common to all sensors 85# $1 sensor mode 86# $2 initial sensor value 87# $3 initial limit 88# $4 amount to lower limit 89# $5 difference from limit to trigger event 90 91common_body() { 92 # Start the rump-server process and load the module 93 start_rump "-i mode=$1 -i value=$2 -i limit=$3" 94 95 # create configuration files for updates 96 create_envsys_conf_files $3 $4 97 98 if [ $? -ne 0 ] ; then 99 atf_skip "Cannot set-up rump environment" 100 fi 101 102 # start powerd so we can detect sensor events 103 rump.powerd -n -d > powerd.log 2>&1 & 104 if [ -z "$(jobs)" ] ; then 105 skip_events=1 106 echo "Skipping event sub-tests - powerd did not start" 107 else 108 skip_events=0 109 expected_event=1 110 fi 111 112 # Step 0 - verify that sensor is registered 113 get_sensor_info | grep -q swsensor || 114 atf_fail "0: Device swsensor not registered" 115 116 # Step 1 - update the refresh-timeout and verify 117 # (use $(( ... )) since the timeout is displayed in hex!) 118 rump.envstat -c env0.conf 119 if [ $(( $( get_sensor_key refresh-timeout ) )) -ne 2 ] ; then 120 atf_fail "1: Could not set refresh-timout to 2s" 121 fi 122 123 # Step 2 - verify that we can read sensor's value 124 if [ $1 -ne 0 -a $( get_sensor_key cur-value ) -ne $2 ] ; then 125 atf_fail "2: Value not available" 126 fi 127 128 # Step 3 - verify that changes in sensor value are seen 129 rump.sysctl -w hw.swsensor.cur_value=$(( $2 + 1 )) 130 if [ $( get_sensor_key cur-value ) -ne $(( $2 + 1 )) ] ; then 131 atf_fail "3: Value not updated" 132 fi 133 134 # Step 4 - if sensor provides hw limit, make sure we can read it 135 if [ $1 -ne 0 ] ; then 136 if [ $( get_sensor_key critical-min ) -ne $3 ] ; then 137 atf_fail "4: Limit not set by device" 138 fi 139 fi 140 141 # Step 5 - if sensor provides hw limit, make sure it works 142 if [ $1 -ne 0 -a ${skip_events} -eq 0 ] ; then 143 rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $5 )) 144 sleep 5 145 cnt=$(get_powerd_event_count) 146 if [ ${cnt} -lt ${expected_event} ] ; then 147 atf_fail "5: No event triggered" 148 elif [ ${cnt} -gt ${expected_event} ] ; then 149 atf_fail "5: Multiple events triggered" 150 fi 151 evt=$( check_powerd_event ${cnt} "critical-under") 152 if [ -n "${evt}" ] ; then 153 atf_fail "5: ${evt}" 154 fi 155 expected_event=$(( 1 + ${expected_event} )) 156 fi 157 158 # Step 6 - verify that we return to normal state 159 if [ $1 -ne 0 -a ${skip_events} -eq 0 ] ; then 160 rump.sysctl -w hw.swsensor.cur_value=$(( $3 + $5 )) 161 sleep 5 162 cnt=$(get_powerd_event_count) 163 if [ ${cnt} -lt ${expected_event} ] ; then 164 atf_fail "6: No event triggered" 165 elif [ ${cnt} -gt ${expected_event} ] ; then 166 atf_fail "6: Multiple events triggered" 167 fi 168 evt=$( check_powerd_event ${cnt} "normal") 169 if [ -n "${evt}" ] ; then 170 atf_fail "6: ${evt}" 171 fi 172 expected_event=$(( 1 + ${expected_event} )) 173 fi 174 175 # Step 7 - verify that we can set our own limit 176 rump.envstat -c env1.conf 177 if [ $( get_sensor_key critical-min ) -ne $(( $3 - $4 )) ] ; then 178 atf_fail "7: Limit not set by envstat -c" 179 fi 180 181 # Step 8 - make sure user-set limit works 182 if [ ${skip_events} -eq 0 ] ; then 183 rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $4 - $5 )) 184 sleep 5 185 cnt=$(get_powerd_event_count) 186 if [ ${cnt} -lt ${expected_event} ] ; then 187 atf_fail "8: No event triggered" 188 elif [ ${cnt} -gt ${expected_event} ] ; then 189 atf_fail "8: Multiple events triggered" 190 fi 191 evt=$( check_powerd_event ${cnt} "critical-under") 192 if [ -n "${evt}" ] ; then 193 atf_fail "8: ${evt}" 194 fi 195 expected_event=$(( 1 + ${expected_event} )) 196 fi 197 198 # Step 9 - verify that we return to normal state 199 if [ ${skip_events} -eq 0 ] ; then 200 rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $4 + $5 )) 201 sleep 5 202 cnt=$(get_powerd_event_count) 203 if [ ${cnt} -lt ${expected_event} ] ; then 204 atf_fail "9: No event triggered" 205 elif [ ${cnt} -gt ${expected_event} ] ; then 206 atf_fail "9: Multiple events triggered" 207 fi 208 evt=$( check_powerd_event ${cnt} "normal") 209 if [ -n "${evt}" ] ; then 210 atf_fail "9: ${evt}" 211 fi 212 expected_event=$(( 1 + ${expected_event} )) 213 fi 214 215 # Step 10 - reset to defaults 216 rump.envstat -S 217 if [ $1 -eq 0 ] ; then 218 get_sensor_info | grep -q critical-min && 219 atf_fail "10: Failed to clear a limit with envstat -S" 220 else 221 if [ $( get_sensor_key critical-min ) -ne $3 ] ; then 222 atf_fail "10: Limit not reset to initial value" 223 fi 224 fi 225 226 # Step 11 - see if more events occur 227 if [ ${skip_events} -eq 0 ] ; then 228 rump.envstat -c env0.conf 229 rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $4 - $5 )) 230 sleep 5 231 cnt=$(get_powerd_event_count) 232 if [ ${cnt} -ge ${expected_event} ] ; then 233 if [ $1 -ne 2 ] ; then 234 atf_fail "11b Event triggered after reset" 235 fi 236 evt=$( check_powerd_event ${cnt} "critical-under") 237 if [ -n "${evt}" ] ; then 238 atf_fail "11a: ${evt}" 239 fi 240 fi 241 fi 242 243 # Step 12 - make sure we can set new limits once more 244 rump.envstat -c env2.conf 245 if [ $( get_sensor_key critical-min ) -ne $3 ] ; then 246 atf_fail "12a: Limit not reset to same value" 247 fi 248 rump.envstat -c env1.conf 249 if [ $( get_sensor_key critical-min ) -ne $(( $3 - $4 )) ] ; then 250 atf_fail "12b: Limit not reset to new value" 251 fi 252} 253 254atf_test_case simple_sensor cleanup 255simple_sensor_head() { 256 common_head "Test a simple sensor" 257} 258 259simple_sensor_body() { 260 common_body 0 50 30 10 1 261} 262 263simple_sensor_cleanup() { 264 common_cleanup 265} 266 267atf_test_case limit_sensor cleanup 268limit_sensor_head() { 269 common_head "Test a sensor with internal limit" 270} 271 272limit_sensor_body() { 273 common_body 1 45 25 8 2 274} 275 276limit_sensor_cleanup() { 277 common_cleanup 278} 279 280atf_test_case alarm_sensor cleanup 281alarm_sensor_head() { 282 common_head "Test a sensor with internal checking" 283} 284 285alarm_sensor_body() { 286 common_body 2 40 20 6 3 287} 288 289alarm_sensor_cleanup() { 290 common_cleanup 291} 292 293atf_init_test_cases() { 294 RUMP_SERVER="unix://t_swsensor_socket" ; export RUMP_SERVER 295 atf_add_test_case simple_sensor 296 atf_add_test_case limit_sensor 297 atf_add_test_case alarm_sensor 298} 299