From: Charles Manning Date: Fri, 7 May 2010 03:24:51 +0000 (+1200) Subject: yaffs Add another test script X-Git-Tag: pre-name-change~66 X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=commitdiff_plain;h=e0f1d0213364d12d512b044afd637d3761d31bdc yaffs Add another test script Signed-off-by: Charles Manning --- diff --git a/linux-tests/stress_test.sh b/linux-tests/stress_test.sh new file mode 100755 index 0000000..27498e5 --- /dev/null +++ b/linux-tests/stress_test.sh @@ -0,0 +1,265 @@ +#!/bin/sh +# Do some random operations on a yaffs2 file system + +MTD="/dev/mtdblock0" +MOUNT_PT="/mnt" +TEST_DIR="$MOUNT_PT/stress_dir" +REF_FILE="$MOUNT_PT/ref.file" +SUM_FILE="$MOUNT_PT/sum.file" +MIN_LOW_WATER=5 +MAX_LOW_WATER=85 +MIN_HIGH_WATER=15 +MAX_HIGH_WATER=95 + +let low_water=25 +let high_water=90 +let df_percent=50 + + +update_df_percent(){ + df_percent=$(df | grep $MTD | sed "s_[ %] *_ _g" | cut -d" " -f 5) +} + +update_df_percent + +calc_low_water() { + let low_water=0 + while [ $low_water -lt $MIN_LOW_WATER ] ; + do + let low_water=$RANDOM%100 + while [[ $low_water -ge $df_percent || $low_water -gt $MAX_LOW_WATER ]] ; + do + let low_water=$RANDOM%100 + done + done +} + +calc_high_water() { + let high_water=100 + while [ $high_water -gt $MAX_HIGH_WATER ] ; + do + let high_water=$RANDOM%100 + while [[ $high_water -le $df_percent || $high_water -lt $MIN_HIGH_WATER ]] ; + do + let high_water=$RANDOM%100 + done + done +} + + + +maybe_sleep(){ + local val + let val=$RANDOM%10000 + if [ $val -le 1 ] ; then + let val=$RANDOM%100 + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!! !!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!! S L E E P $val" + echo "!!!!!!!!! !!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + sleep $val + echo " Sleep completed " + fi +} + +maybe_remount(){ + local val + let val=$RANDOM%10000 + + if [ $val -le 1 ] ; then + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!! !!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!! R E M O U N T !!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!! !!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + + umount $MOUNT_PT + mount -t yaffs2 $MTD $MOUNT_PT + fi + +} + + +make_space_slow(){ + + update_df_percent + + + calc_low_water + + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!! Slowly reduce usage from $df_percent percent to $low_water percent" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!" + while [ $df_percent -ge $low_water ] ; do + + DELETE_FILE=`ls $TEST_DIR | head -n 1` + rm "$TEST_DIR/$DELETE_FILE" + + update_df_percent + maybe_sleep + maybe_remount + done +} + +make_space_fast(){ + + calc_low_water + update_df_percent + + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!! Quickly reduce usage from $df_percent percent to $low_water percent" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!" + while [ $df_percent -ge $low_water ] ; do + + let file_prefix=$RANDOM%100 + rm -f $TEST_DIR/dummy $TEST_DIR/$file_prefix* + + update_df_percent + maybe_sleep + maybe_remount + done +} + +make_space(){ + local xx + let xx=$RANDOM%100 + update_df_percent + + if [ $df_percent -gt $MIN_LOW_WATER ] ; then + + if [ $xx -lt 50 ] ; then + make_space_slow + else + make_space_fast + fi + fi +} + +periodic_action(){ + + maybe_sleep + maybe_remount +} + +random_number(){ + local val + val=$RANDOM + echo $val +} + + +drop_caches(){ + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!!!! D R O P C A C H E S" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + sync + echo 3 > /proc/sys/vm/drop_caches +} + +maybe_drop_caches(){ + local x + let x=$RANDOM%10000 + if [ $x -eq 99 ] ; then + drop_caches + fi +} + +create_files(){ + + update_df_percent + + if [ $df_percent -lt $MAX_HIGH_WATER ] ; then + + calc_high_water + + md5sum $TEST_DIR/* > $SUM_FILE + + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!! Fill from $df_percent percent to $high_water percent" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + let chunks=$RANDOM%100 + let fsize=$RANDOM*$chunks+1 + echo "!!!!!! File size is $fsize" + + + update_df_percent + + let skip=0 + + while [ $df_percent -le $high_water ] ; do + + if [ $skip -lt 1 ] ; then + dd if=/dev/urandom of=$REF_FILE bs=$fsize count=1 + REF_SUM=$(md5sum $REF_FILE | cut -f1 -d" " ) + let skip=500 + fi + + FNAME=$TEST_DIR/$RANDOM-$RANDOM-$RANDOM + cp $REF_FILE $FNAME + FILE_SUM=$(md5sum $FNAME | cut -f1 -d" ") + md5sum $FNAME >> $SUM_FILE + + if [ "$FILE_SUM" != "$REF_SUM" ] ; then + echo "File comparison failed $REF_SUM - $FILE_SUM" + exit 1 + fi + + update_df_percent + maybe_sleep + maybe_remount + maybe_drop_caches + done + + if ! md5sum -c $SUM_FILE > /dev/null ; then + echo "File verification failed" + exit 1 + fi + fi + +} + +fill_disk(){ + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + echo "!!!!!!!!!!! F I L L D I S K" + echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + let full=0 + while [ $full -eq 0 ] ; do + dd if=/dev/urandom of=$TEST_DIR/$RANDOM-$RANDOM-fill bs=1000 count=50 2> /dev/null || let full=1 || true + done + +} + +mkdir -p $TEST_DIR +rm -f $TEST_DIR/* +touch $TEST_DIR/dont-want-empty-dir +create_files + +while true ; do + + let x=$RANDOM%100 + if [ $x -lt 50 ] ; then + create_files + fi + + let x=$RANDOM%100 + if [ $x -lt 50 ] ; then + make_space + fi + + let x=$RANDOM%100 + if [ $x -lt 10 ] ; then + fill_disk + fi + + let x=$RANDOM%100 + if [ $x -lt 1 ] ; then + drop_caches + fi +done