blob: 8200c361bb2005ceec05c8e900aa8f0ed5f9567c [file] [log] [blame]
#!/bin/sh
set -e
. /etc/utils.sh
. $(dirname $0)/Config.sh
. $(dirname $0)/utils.sh
error=
cleanup()
{
umount /mnt || echo but no matter
}
usbstick()
{
file=/mnt/diag_test_file
want=4289204007
blkdev=$(find_usb_blkdev)
if [ -z "$blkdev" ]; then
error="no USB mass storage device connected"
return 1
fi
umount /mnt || echo but no matter
run fdisk -l $blkdev
run mount -t vfat ${blkdev}1 /mnt
run rm -f $file
echo "This file must have these exact letters, please do not modify" > $file
sync
run umount /mnt
run mount -t vfat ${blkdev}1 /mnt
cksum=$(cksum $file)
sum=${cksum%% *}
if [ "$sum" != $want ]; then
error="cksum mismatch, wanted $want, got '$sum'"
return 1
fi
run rm -f $file
run umount /mnt
return 0
}
usb3disk()
{
# do a read test from the disk, expect at least 40 MB/sec
blkdev=$(find_usb_blkdev)
if [ -z "$blkdev" ]; then
error="no USB mass storage device connected"
return 1
fi
# this runs dd and prints xfer rate several times as the 1st dd runs
f=/tmp/dd1
dd if=$blkdev bs=65536 count=10000 2>$f |
for n in `seq 1 10`; do dd bs=65536 count=1000 of=/dev/null; done
# eg: 65536000 bytes transferred in 1.522 secs (43059132 bytes/sec)
dd1=$(tail -n 1 /tmp/dd1)
dd1=${dd1%% bytes/sec*}
dd1=${dd1##* secs (}
if [ "$dd1" -lt $usb_min_bps ]; then
error="wanted $usb_min_bps b/s or more, got $dd1 b/s"
return 1
fi
result="$dd1 bytes/sec"
return 0
}
case "$1" in
diag | quick)
if usb3disk; then
echo PASS $result
else
echo FAIL "$error"
fi
;;
*)
echo "Usage: $0 {diag|quick}"
exit 1
esac