diff options
Diffstat (limited to 'ubi-utils/scripts')
| -rw-r--r-- | ubi-utils/scripts/ubi_jffs2_test.sh | 412 | ||||
| -rwxr-xr-x | ubi-utils/scripts/ubi_test.sh | 17 | ||||
| -rwxr-xr-x | ubi-utils/scripts/ubi_tools_test.sh | 10 | 
3 files changed, 434 insertions, 5 deletions
| diff --git a/ubi-utils/scripts/ubi_jffs2_test.sh b/ubi-utils/scripts/ubi_jffs2_test.sh new file mode 100644 index 0000000..4d97431 --- /dev/null +++ b/ubi-utils/scripts/ubi_jffs2_test.sh @@ -0,0 +1,412 @@ +#!/bin/sh +# +# UBI Volume creation/deletion/write/read and JFFS2 on top of UBI +# testcases. +# +# 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 Added fixup for delayed device node creation by udev +#     This points to a problem in the tools, mabe in the desing +#     Tue Oct 31 14:14:54 CET 2006 +# + +VERSION="1.1" + +export PATH=$PATH:/bin:~/bin:/usr/local/bin:/home/dedekind/work/prj/ubi/tools/flashutils/bin/ + +ITERATIONS=250 +ALIGNMENT=2048 + +UBIMKVOL="ubimkvol -a $ALIGNMENT" +UBIRMVOL=ubirmvol +UBIUPDATEVOL=ubiupdatevol + +SIZE_512K=524288 +SIZE_1M=1310720 + +MINVOL=10 +MAXVOL=12 + +TLOG=/dev/null + +# +# 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 "*** 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 $MINVOL $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 +} + +# +# FIXME Udev needs some time until the device nodes are created. +#       This will cause trouble if after ubimkvol an update attempt +#       is started immediately, since the device node is not yet +#       available. We should either fix the tools with inotify or +#       other ideas or figure out a different way to solve the problem +#       e.g. to use ubi0 and make the volume device nodes obsolete... +# +udev_wait () +{ +    echo -n "FIXME Waiting for udev to create/delete device node " +    grep 2\.6\.5 /proc/version > /dev/null +    if [ $? -eq "0" ]; then +	for i in `seq 0 5`; do +	    sleep 1; echo -n "."; +	done +	echo " ok" +    fi +} + +# 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 "*** Truncate volume if it exists ... " +	echo "    $UBIUPDATEVOL -d0 -n$volume -t" +	$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 +	# udev_wait +    fi +} + +# writevol_test - Tests volume creation and writing data to it. +# +# @volume:  Volume number +# @size:    Size of random data to write +# @type:    Volume type static or dynamic +# +writevol_test () +{ +    volume=$1 +    size=$2 +    type=$3 + +    echo "*** Write volume test with size $size" + +### Make sure that volume exist, delete existing volume, create new + +    delete_volume $volume + +    echo "*** Try to create volume" +    echo "    $UBIMKVOL -d0 -n$volume -t$type -NNEW$volume -s $size ... " +    $UBIMKVOL -d0 -n$volume -t$type -N"NEW$volume" -s $size +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed +    udev_wait + +### Try to create same volume again +    echo -n "*** Try to create some volume again, this must fail ... " +    $UBIMKVOL -d0 -n$volume -t$type -N"NEW$volume" -s $size +    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 ... " +    echo "    $UBIUPDATEVOL -d0 -n$volume testdata.bin" +    ls -l testdata.bin +    $UBIUPDATEVOL -d0 -n$volume testdata.bin +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    echo "*** Download data with dd bs=1 ... " +    dd if=/dev/ubi0_$volume of=readdata.bin bs=$size count=1 +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    echo -n "*** Comparing data ... " +    cmp readdata.bin testdata.bin +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    echo -n "*** Now truncate volume ... " +    $UBIUPDATEVOL -d0 -n$volume -t +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed +} + +jffs2_torture () +{ +    rm -f $TLOG +    touch $TLOG + +    echo "*** Torture test ... " + +    for i in `seq $iterations`; do +	dd if=/dev/urandom of=test.bin bs=$i count=1 2>> $TLOG +	if [ $? -ne "0" ] ; then +	    echo "Testing $i byte (dd if=/dev/urandom of=foo bs=$i count=1) ... " +	    exit_failure +	fi +	#passed + +	dd if=test.bin of=new.bin bs=$i count=1 2>> $TLOG +	if [ $? -ne "0" ] ; then +	    echo "dd if=test.bin of=new.bin bs=$i count=1 2>> $TLOG" +	    exit_failure +	fi +	#passed + +	#echo "Comparing files ... " +	cmp test.bin new.bin +	dd if=test.bin of=new.bin bs=$i count=1 2>> $TLOG +	if [ $? -ne "0" ] ; then +	    exit_failure +	fi +	#passed +	#echo -n "." +    done + +    echo -n "step0:ok " + +    for i in `seq $iterations`; do +	dd if=/dev/urandom of=foo bs=$i count=1 2>> $TLOG +	if [ $? -ne "0" ] ; then +	    echo "Testing $i byte (dd if=/dev/urandom of=foo bs=$i count=1) ... " +	    exit_failure +	fi +	#passed +    done + +    echo -n "step1:ok " + +    for i in `seq $iterations`; do +	dd if=/dev/zero of=foo bs=1 count=$i 2>> $TLOG +	if [ $? -ne "0" ] ; then +	    echo "Testing $i byte (dd if=/dev/zero of=foo bs=1 count=$i) ... " +	    exit_failure +	fi +	#passed +    done + +    echo -n "step2:ok " + +    for i in `seq $iterations`; do +	dd if=/dev/zero of=foo bs=$i count=16 2>> $TLOG +	if [ $? -ne "0" ] ; then +	    echo "Testing $i byte (dd if=/dev/zero of=foo bs=$i count=1024) ... " +	    exit_failure +	fi +	#passed +    done + +    echo -n "step3:ok " + +    passed +} + +# writevol_test - Tests volume creation and writing data to it. +# +# @volume:  Volume number +# @size:    Size of random data to write +# @type:    Volume type static or dynamic +# +jffs2_test () +{ +    name=$1 +    iterations=$2 +    directory=`pwd` + +    ### Setup +    ulimit -c unlimited + +    echo -n "*** Create directory /mnt/$name ... " +    mkdir -p /mnt/$name +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    echo -n "*** mount -t jffs2 mtd:$name /mnt/$name ... " +    mount -t jffs2 mtd:$name /mnt/$name +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    echo -n "*** change directory ... " +    cd /mnt/$name +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    ls +    echo "*** list directory ... " +    ls -la +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    ### Torture +    echo -n "*** touch I_WAS_HERE ... " +    touch I_WAS_HERE +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    jffs2_torture + +    echo "*** list directory ... " +    ls -la +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    ### Cleanup +    echo -n "*** go back ... " +    cd $directory +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    ### Still mounted, ubiupdatevol must fail! + +    echo -n "*** $UBIUPDATEVOL -d0 -n$volume -t must fail! ..." +    $UBIUPDATEVOL -d0 -n$volume -t +    if [ $? -eq "0" ] ; then +	exit_failure +    fi +    passed + +    echo -n "*** umount /mnt/$name ... " +    umount /mnt/$name +    if [ $? -ne "0" ] ; then +	exit_failure +    fi +    passed + +    return +} + +echo "***********************************************************************" +echo "*           UBI JFFS2 Testing starts now ...                          *" +echo "*                                 Good luck!                          *" +echo "***********************************************************************" +echo "VERSION: $VERSION" + +# 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 + +for volume in `seq $MINVOL $MAXVOL`; do +    echo -n "************ VOLUME $volume NEW$volume " +    echo "******************************************" +    writevol_test $volume $SIZE_1M dynamic +    jffs2_test NEW$volume $ITERATIONS +    delete_volume $volume +done + +echo "***********************************************************************" +echo "*               Congratulations, no errors found!                     *" +echo "*              Have fun with your cool UBI system!                    *" +echo "***********************************************************************" + +exit_success diff --git a/ubi-utils/scripts/ubi_test.sh b/ubi-utils/scripts/ubi_test.sh index 622ec7e..3835bcb 100755 --- a/ubi-utils/scripts/ubi_test.sh +++ b/ubi-utils/scripts/ubi_test.sh @@ -5,12 +5,18 @@  # 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 +# + +VERSION="1.0"  export PATH=$PATH:~/bin:/usr/local/bin:/home/dedekind/work/prj/ubi/tools/flashutils/bin/  UBIMKVOL=ubimkvol  UBIRMVOL=ubirmvol -UBIWRITEVOL=ubiupdateevol +UBIWRITEVOL=ubiwritevol  # 128 KiB 131072  # 256 KiB 262144 @@ -135,6 +141,7 @@ mkvol_rmvol_test ()      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 @@ -204,8 +211,10 @@ writevol_test ()      fi      passed -    echo -n "*** Now writing data to volume ... " +    echo "*** Now writing data to volume ... " +    # sleep 5      ls -l testdata.bin +    echo "    $UBIWRITEVOL -d0 -n$MINVOL testdata.bin"      $UBIWRITEVOL -d0 -n$MINVOL testdata.bin      if [ $? -ne "0" ] ; then  	exit_failure @@ -265,7 +274,7 @@ if [ $? -ne "0" ]; then  fi  # Set to zero if not running on example hardware -grep 114218D /proc/cpuinfo > /dev/null +grep 1142 /proc/cpuinfo > /dev/null  if [ $? -eq "0" ]; then      echo "Running on example hardware"      mount -o remount,rw / / @@ -304,8 +313,8 @@ done  echo "***********************************************************************"  echo "*                write to dynamic volumes ...                         *"  echo "***********************************************************************" +echo "VERSION: $VERSION" -#for size in 31313  ; do  for size in 131073 131072 2048 1 4096 12800 31313 262144 ; do      writevol_test $size dynamic  done diff --git a/ubi-utils/scripts/ubi_tools_test.sh b/ubi-utils/scripts/ubi_tools_test.sh index 9163e0c..b4d167e 100755 --- a/ubi-utils/scripts/ubi_tools_test.sh +++ b/ubi-utils/scripts/ubi_tools_test.sh @@ -7,6 +7,12 @@  # 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 +# + +VERSION="1.0"  export PATH=$PATH:~/bin:/usr/local/bin:/home/dedekind/work/prj/ubi/tools/flashutils/bin/ @@ -121,7 +127,7 @@ if [ $? -ne "0" ]; then  fi  # Set to zero if not running on example hardware -grep 114218D /proc/cpuinfo > /dev/null +grep 1142 /proc/cpuinfo > /dev/null  if [ $? -eq "0" ]; then      echo "Running on example hardware"      mount -o remount,rw / / @@ -135,6 +141,7 @@ fi  pfiflash_basic ()  {      echo "Calling pfiflash with test-data ... " +    echo "    $PFIFLASH $test_pfi"      $PFIFLASH $test_pfi      if [ $? -ne "0" ]; then  	echo "Uhhh something went wrong!" @@ -232,6 +239,7 @@ pfiflash_advanced ()  echo "***********************************************************************"  echo "*                Testing pfiflash ...                                 *"  echo "***********************************************************************" +echo "VERSION: $VERSION"  pfiflash_basic  pfiflash_advanced | 
