version 1.4, 2010/12/31 00:35:42 |
version 1.5, 2012/07/19 13:36:18 |
Line 13 get_powerd_event_count() { |
|
Line 13 get_powerd_event_count() { |
|
grep "not running" powerd.log | wc -l |
grep "not running" powerd.log | wc -l |
} |
} |
|
|
|
get_rnd_bits_count() { |
|
env RUMPHIJACK=blanket=/dev/random:/dev/urandom \ |
|
RUMP_SERVER=unix://t_swsensor_socket \ |
|
LD_PRELOAD=/usr/lib/librumphijack.so rndctl -l | \ |
|
grep "swsensor-sensor" | \ |
|
awk '{print $2}' |
|
} |
|
|
check_powerd_event() { |
check_powerd_event() { |
event=$(grep "not running" powerd.log | \ |
event=$(grep "not running" powerd.log | \ |
sed -e "$1p" -e "d" ) |
sed -e "$1p" -e "d" ) |
Line 40 check_powerd_event() { |
|
Line 48 check_powerd_event() { |
|
# requested properties |
# requested properties |
|
|
start_rump() { |
start_rump() { |
rump_server -l rumpvfs -l rumpdev -l rumpdev_sysmon ${RUMP_SERVER} |
rump_allserver -l rumpvfs -l rumpdev -l rumpdev_sysmon ${RUMP_SERVER} |
if [ $( get_sensor_info | wc -l ) -ne 0 ] ; then |
if [ $( get_sensor_info | wc -l ) -ne 0 ] ; then |
rump.modunload swsensor |
rump.modunload swsensor |
rump.modload -f $1 swsensor |
rump.modload -f $1 swsensor |
|
|
atf_set timeout 60 |
atf_set timeout 60 |
atf_set require.progs rump.powerd rump.envstat rump.modload \ |
atf_set require.progs rump.powerd rump.envstat rump.modload \ |
rump.halt rump.sysctl rump_server \ |
rump.halt rump.sysctl rump_server \ |
sed grep |
sed grep awk \ |
|
rndctl expr |
} |
} |
|
|
common_cleanup() { |
common_cleanup() { |
|
|
# $3 initial limit |
# $3 initial limit |
# $4 amount to lower limit |
# $4 amount to lower limit |
# $5 difference from limit to trigger event |
# $5 difference from limit to trigger event |
|
# $6 sensor flags, for FHAS_ENTROPY and FMONNOTSUPP |
|
|
common_body() { |
common_body() { |
# Start the rump-server process and load the module |
# Start the rump-server process and load the module |
start_rump "-i mode=$1 -i value=$2 -i limit=$3" |
modload_args="-i mode=$1 -i value=$2 -i limit=$3 ${6:+-i flags=$6}" |
|
start_rump "$modload_args" |
|
|
# create configuration files for updates |
# create configuration files for updates |
create_envsys_conf_files $3 $4 |
create_envsys_conf_files $3 $4 |
|
|
fi |
fi |
|
|
# Step 7 - verify that we can set our own limit |
# Step 7 - verify that we can set our own limit |
rump.envstat -c env1.conf |
|
if [ $( get_sensor_key critical-min ) -ne $(( $3 - $4 )) ] ; then |
|
atf_fail "7: Limit not set by envstat -c" |
|
fi |
|
|
|
# Step 8 - make sure user-set limit works |
# Steps 7 thru 12 are skipped if the sensor cannot be monitored |
if [ ${skip_events} -eq 0 ] ; then |
if [ $( expr \( 0$6 / 2048 \) % 2 ) -ne 1 ] ; then |
rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $4 - $5 )) |
rump.envstat -c env1.conf |
sleep 5 |
if [ $( get_sensor_key critical-min ) -ne $(( $3 - $4 )) ] ; then |
cnt=$(get_powerd_event_count) |
atf_fail "7: Limit not set by envstat -c" |
if [ ${cnt} -lt ${expected_event} ] ; then |
|
atf_fail "8: No event triggered" |
|
elif [ ${cnt} -gt ${expected_event} ] ; then |
|
atf_fail "8: Multiple events triggered" |
|
fi |
fi |
evt=$( check_powerd_event ${cnt} "critical-under") |
|
if [ -n "${evt}" ] ; then |
# Step 8 - make sure user-set limit works |
atf_fail "8: ${evt}" |
if [ ${skip_events} -eq 0 ] ; then |
|
rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $4 - $5 )) |
|
sleep 5 |
|
cnt=$(get_powerd_event_count) |
|
if [ ${cnt} -lt ${expected_event} ] ; then |
|
atf_fail "8: No event triggered" |
|
elif [ ${cnt} -gt ${expected_event} ] ; then |
|
atf_fail "8: Multiple events triggered" |
|
fi |
|
evt=$( check_powerd_event ${cnt} "critical-under") |
|
if [ -n "${evt}" ] ; then |
|
atf_fail "8: ${evt}" |
|
fi |
|
expected_event=$(( 1 + ${expected_event} )) |
fi |
fi |
expected_event=$(( 1 + ${expected_event} )) |
|
fi |
|
|
|
# Step 9 - verify that we return to normal state |
# Step 9 - verify that we return to normal state |
if [ ${skip_events} -eq 0 ] ; then |
if [ ${skip_events} -eq 0 ] ; then |
rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $4 + $5 )) |
rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $4 + $5 )) |
sleep 5 |
sleep 5 |
cnt=$(get_powerd_event_count) |
cnt=$(get_powerd_event_count) |
if [ ${cnt} -lt ${expected_event} ] ; then |
if [ ${cnt} -lt ${expected_event} ] ; then |
atf_fail "9: No event triggered" |
atf_fail "9: No event triggered" |
elif [ ${cnt} -gt ${expected_event} ] ; then |
elif [ ${cnt} -gt ${expected_event} ] ; then |
atf_fail "9: Multiple events triggered" |
atf_fail "9: Multiple events triggered" |
fi |
fi |
evt=$( check_powerd_event ${cnt} "normal") |
evt=$( check_powerd_event ${cnt} "normal") |
if [ -n "${evt}" ] ; then |
if [ -n "${evt}" ] ; then |
atf_fail "9: ${evt}" |
atf_fail "9: ${evt}" |
|
fi |
|
expected_event=$(( 1 + ${expected_event} )) |
fi |
fi |
expected_event=$(( 1 + ${expected_event} )) |
|
fi |
|
|
|
# Step 10 - reset to defaults |
# Step 10 - reset to defaults |
rump.envstat -S |
rump.envstat -S |
if [ $1 -eq 0 ] ; then |
if [ $1 -eq 0 ] ; then |
get_sensor_info | grep -q critical-min && |
get_sensor_info | grep -q critical-min && |
atf_fail "10: Failed to clear a limit with envstat -S" |
atf_fail "10: Failed to clear a limit with envstat -S" |
else |
else |
if [ $( get_sensor_key critical-min ) -ne $3 ] ; then |
if [ $( get_sensor_key critical-min ) -ne $3 ] ; then |
atf_fail "10: Limit not reset to initial value" |
atf_fail "10: Limit not reset to initial value" |
|
fi |
fi |
fi |
fi |
|
|
|
# Step 11 - see if more events occur |
# Step 11 - see if more events occur |
if [ ${skip_events} -eq 0 ] ; then |
if [ ${skip_events} -eq 0 ] ; then |
rump.envstat -c env0.conf |
rump.envstat -c env0.conf |
rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $4 - $5 )) |
rump.sysctl -w hw.swsensor.cur_value=$(( $3 - $4 - $5 )) |
sleep 5 |
sleep 5 |
cnt=$(get_powerd_event_count) |
cnt=$(get_powerd_event_count) |
if [ ${cnt} -ge ${expected_event} ] ; then |
if [ ${cnt} -ge ${expected_event} ] ; then |
if [ $1 -ne 2 ] ; then |
if [ $1 -ne 2 ] ; then |
atf_fail "11b Event triggered after reset" |
atf_fail "11b Event triggered after reset" |
fi |
fi |
evt=$( check_powerd_event ${cnt} "critical-under") |
evt=$( check_powerd_event ${cnt} "critical-under") |
if [ -n "${evt}" ] ; then |
if [ -n "${evt}" ] ; then |
atf_fail "11a: ${evt}" |
atf_fail "11a: ${evt}" |
|
fi |
fi |
fi |
fi |
fi |
fi |
|
|
|
# Step 12 - make sure we can set new limits once more |
# Step 12 - make sure we can set new limits once more |
rump.envstat -c env2.conf |
rump.envstat -c env2.conf |
if [ $( get_sensor_key critical-min ) -ne $3 ] ; then |
if [ $( get_sensor_key critical-min ) -ne $3 ] ; then |
atf_fail "12a: Limit not reset to same value" |
atf_fail "12a: Limit not reset to same value" |
fi |
fi |
rump.envstat -c env1.conf |
rump.envstat -c env1.conf |
if [ $( get_sensor_key critical-min ) -ne $(( $3 - $4 )) ] ; then |
if [ $( get_sensor_key critical-min ) -ne $(( $3 - $4 )) ] ; then |
atf_fail "12b: Limit not reset to new value" |
atf_fail "12b: Limit not reset to new value" |
|
fi |
|
fi |
|
|
|
# Step 13 - confirm registration (or lack thereof) with rndctl |
|
rnd_bits=$( get_rnd_bits_count ) |
|
if [ $( expr \( 0$6 / 8192 \) % 2 ) -eq 1 ] ; then |
|
if [ -z "$rnd_bits" ] ; then |
|
atf_fail "13a: Not registered with rndctl" |
|
fi |
|
else |
|
if [ -n "$rnd_bits" ] ; then |
|
atf_fail "13b: Wrongly registered with rndctl" |
|
fi |
|
fi |
|
|
|
# Steps 14 and 15 are only if sensor is providing entropy |
|
if [ $( expr \( 0$6 / 8192 \) % 2 ) -ne 1 ] ; then |
|
return |
|
fi |
|
|
|
# Step 14 - make sure entropy collected when device is being polled |
|
rump.envstat -c env0.conf |
|
rump.sysctl -w hw.swsensor.cur_value=$3 |
|
sleep 5 |
|
rump.sysctl -w hw.swsensor.cur_value=$(( $3 + $4 )) |
|
sleep 5 |
|
new_rnd_bits=$( get_rnd_bits_count ) |
|
if [ $new_rnd_bits -le $rnd_bits ] ; then |
|
atf_fail "14a: entropy bits did not increase after polling" |
|
fi |
|
rnd_bits=$new_rnd_bits |
|
sleep 5 |
|
new_rnd_bits=$( get_rnd_bits_count ) |
|
if [ $new_rnd_bits -gt $rnd_bits ] ; then |
|
atf_fail "14b: entropy bits increased after poll with no value change" |
|
fi |
|
|
|
# Step 15 - make sure entropy collected when device is interrogated |
|
# |
|
rump.envstat -c env0.conf |
|
rump.sysctl -w hw.swsensor.cur_value=$3 |
|
get_sensor_key cur-value |
|
rnd_bits=$( get_rnd_bits_count ) |
|
rump.sysctl -w hw.swsensor.cur_value=$(( $3 + $4 )) |
|
get_sensor_key cur-value |
|
new_rnd_bits=$( get_rnd_bits_count ) |
|
if [ $new_rnd_bits -le $rnd_bits ] ; then |
|
atf_fail "15a: entropy bits did not increase after interrogation" |
|
fi |
|
rnd_bits=$new_rnd_bits |
|
get_sensor_key cur-value |
|
new_rnd_bits=$( get_rnd_bits_count ) |
|
if [ $new_rnd_bits -gt $rnd_bits ] ; then |
|
atf_fail "15b: entropy bits increased after interrogation with no value change" |
fi |
fi |
} |
} |
|
|
Line 290 alarm_sensor_cleanup() { |
|
Line 358 alarm_sensor_cleanup() { |
|
common_cleanup |
common_cleanup |
} |
} |
|
|
|
atf_test_case entropy_polled_sensor cleanup |
|
entropy_polled_sensor_head() { |
|
common_head "Test a simple sensor that provides entropy" |
|
} |
|
|
|
entropy_polled_sensor_body() { |
|
common_body 0 50 30 10 1 8192 |
|
} |
|
|
|
entropy_polled_sensor_cleanup() { |
|
common_cleanup |
|
} |
|
|
|
atf_test_case entropy_interrupt_sensor cleanup |
|
entropy_interrupt_sensor_head() { |
|
common_head "Test a sensor that provides entropy without polling" |
|
} |
|
|
|
entropy_interrupt_sensor_body() { |
|
common_body 0 50 30 10 1 10240 |
|
} |
|
|
|
entropy_interrupt_sensor_cleanup() { |
|
common_cleanup |
|
} |
|
|
atf_init_test_cases() { |
atf_init_test_cases() { |
RUMP_SERVER="unix://t_swsensor_socket" ; export RUMP_SERVER |
RUMP_SERVER="unix://t_swsensor_socket" ; export RUMP_SERVER |
atf_add_test_case simple_sensor |
atf_add_test_case simple_sensor |
atf_add_test_case limit_sensor |
atf_add_test_case limit_sensor |
atf_add_test_case alarm_sensor |
atf_add_test_case alarm_sensor |
|
atf_add_test_case entropy_polled_sensor |
|
atf_add_test_case entropy_interrupt_sensor |
} |
} |