blob: 73e4b195f674ee29696b9914e4d1637c15f80e1c [file] [log] [blame]
#!/bin/sh
#
# UBI Volume creation/deletion/write/read test script
#
# Written in shell language to reduce dependencies to more sophisticated
# interpreters, which may not be available on some stupid platforms.
#
# Author: Frank Haverkamp <haver@vnet.ibm.com>
#
# 1.0 Initial version
# 1.1 Use ubiupdatevol instead of ubiwritevol
#
VERSION="1.1"
export PATH=$PATH:~/bin:/usr/local/bin:/home/dedekind/work/prj/ubi/tools/flashutils/bin/
UBIMKVOL=ubimkvol
UBIRMVOL=ubirmvol
UBIUPDATEVOL=ubiupdatevol
# 128 KiB 131072
# 256 KiB 262144
# 512 KiB 524288
SIZE_512K=524288
SIZE_1M=1310720
SELF=$0
MINVOL=10
MAXVOL=12
#
# To have a standardized output I define the following function to be
# used when a test was ok or when it failed.
#
failed ()
{
echo "FAILED"
}
passed ()
{
echo "PASSED"
}
#
# Print sucess message. Consider to exit with zero as return code.
#
exit_success ()
{
echo "SUCCESS"
exit 0
}
#
# Print failure message. Consider to exit with non zero return code.
#
exit_failure ()
{
echo "FAILED"
exit 1
}
###############################################################################
#
# START
#
###############################################################################
fix_sysfs_issue ()
{
echo -n "*** Fixing the sysfs issue with the /dev nodes ... "
minor=0
major=`grep ubi0 /proc/devices | sed -e 's/\(.*\) ubi0/\1/'`
rm -rf /dev/ubi0
mknod /dev/ubi0 c $major 0
for minor in `seq 0 $MAXVOL`; do
### echo " mknod /dev/ubi0_$minor c $major $(($minor + 1))"
rm -rf /dev/ubi0_$minor
mknod /dev/ubi0_$minor c $major $(($minor + 1))
done
passed
}
# delete_volume - Delete a volume. If it does not exist, do not try
# to delete it.
# @id: volume id
#
delete_volume ()
{
volume=$1
### FIXME broken sysfs!!!!
if [ -e /sys/class/ubi/$volume -o -e /sys/class/ubi/ubi0/$volume -o -e /sys/class/ubi/ubi0_$volume ]; then
echo -n "*** Truncate volume if it exists ... "
$UBIUPDATEVOL -d0 -n$volume -t
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
echo -n "*** Delete volume if it exists ... "
$UBIRMVOL -d0 -n$volume
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
fi
}
mkvol_rmvol_test ()
{
type=$1
### Test if volume delete on non-existing volumes fails nicely
for i in `seq $MINVOL $MAXVOL`; do
echo "*** Delete if exist or not $i ... "
delete_volume $i
passed
done
### Now deleting volumes must fail
for i in `seq $MINVOL $MAXVOL`; do
echo "*** Trying to delete non existing UBI Volume $i ... "
$UBIRMVOL -d0 -n$i
if [ $? -eq "0" ] ; then
exit_failure
fi
passed
done
### Test if volume creation works ok
for i in `seq $MINVOL $MAXVOL`; do
echo "*** Creating UBI Volume $i ... "
echo " $UBIMKVOL -d0 -n$i -t$type -NNEW$i -s $SIZE_512K"
$UBIMKVOL -d0 -n$i -t$type -N"NEW$i" -s $SIZE_512K
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
done
### Now deleting volumes must be ok
for i in `seq $MINVOL $MAXVOL`; do
echo "*** Trying to delete UBI Volume $i ... "
$UBIRMVOL -d0 -n$i
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
done
### Now allocate too large volume
echo -n "*** Try to create too large volume"
$UBIMKVOL -d0 -n$MINVOL -t$type -N"NEW$MINVOL" -s 800000000
if [ $? -eq "0" ] ; then
exit_failure
fi
passed
}
# writevol_test - Tests volume creation and writing data to it.
#
# @size: Size of random data to write
# @type: Volume type static or dynamic
#
writevol_test ()
{
size=$1
type=$2
echo "*** Write volume test with size $size"
### Make sure that volume exist, delete existing volume, create new
delete_volume $MINVOL
echo -n "*** Try to create volume ... "
$UBIMKVOL -d0 -n$MINVOL -t$type -N"NEW$MINVOL" -s $SIZE_1M
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
### Try to create same volume again
echo -n "*** Try to create some volume again, this must fail ... "
$UBIMKVOL -d0 -n$MINVOL -t$type -N"NEW$MINVOL" -s $SIZE_1M
if [ $? -eq "0" ] ; then
exit_failure
fi
passed
### Now create test data, write it, read it, compare it
echo -n "*** Create test data ... "
dd if=/dev/urandom of=testdata.bin bs=$size count=1
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
echo "*** Now writing data to volume ... "
# sleep 5
ls -l testdata.bin
echo " $UBIUPDATEVOL -d0 -n$MINVOL testdata.bin"
$UBIUPDATEVOL -d0 -n$MINVOL testdata.bin
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
if [ $type = "static" ] ; then
echo "*** Download data with cat ... "
cat /dev/ubi0_$MINVOL > readdata.bin
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
else
echo "*** Download data with dd bs=1 ... "
dd if=/dev/ubi0_$MINVOL of=readdata.bin bs=$size count=1
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
# Size 1 does not work with this test ...
#
#echo "*** Download data with dd bs=$size ... "
#dd if=/dev/ubi0_$MINVOL of=readdata2.bin bs=$size count=1
#if [ $? -ne "0" ] ; then
# exit_failure
#fi
#passed
#echo -n "*** Comparing data (1) ... "
#cmp readdata.bin readdata2.bin
#if [ $? -ne "0" ] ; then
# exit_failure
#fi
#passed
fi
echo -n "*** Comparing data ... "
cmp readdata.bin testdata.bin
if [ $? -ne "0" ] ; then
exit_failure
fi
passed
}
echo "***********************************************************************"
echo "* UBI Testing starts now ... *"
echo "* Good luck! *"
echo "***********************************************************************"
# Set to zero if not running on example hardware
grep ubi /proc/devices > /dev/null
if [ $? -ne "0" ]; then
echo "No UBI found in /proc/devices! I am broken!"
exit_failure
fi
# Set to zero if not running on example hardware
grep 1142 /proc/cpuinfo > /dev/null
if [ $? -eq "0" ]; then
echo "Running on example hardware"
mount -o remount,rw / /
sleep 1
fix_sysfs_issue
else
echo "Running on Artems hardware"
fi
echo "***********************************************************************"
echo "* mkvol/rmvol testing for static volumes ... *"
echo "***********************************************************************"
mkvol_rmvol_test static
echo "***********************************************************************"
echo "* mkvol/rmvol testing for dynamic volumes ... *"
echo "***********************************************************************"
mkvol_rmvol_test dynamic
echo "***********************************************************************"
echo "* write to static volumes ... *"
echo "***********************************************************************"
# 10 Erase blocks = (128 KiB - 64 * 2) * 10
# = 1309440 bytes
# 128 KiB 131072
# 256 KiB 262144
# 512 KiB 524288
for size in 262144 131073 131072 2048 1 4096 12800 31313 ; do
writevol_test $size static
done
echo "***********************************************************************"
echo "* write to dynamic volumes ... *"
echo "***********************************************************************"
echo "VERSION: $VERSION"
for size in 131073 131072 2048 1 4096 12800 31313 262144 ; do
writevol_test $size dynamic
done
echo "***********************************************************************"
echo "* Congratulations, no errors found! *"
echo "* Have fun with your cool UBI system! *"
echo "***********************************************************************"
exit_success