yaffs Add another test script
authorCharles Manning <cdhmanning@gmail.com>
Fri, 7 May 2010 03:24:51 +0000 (15:24 +1200)
committerCharles Manning <cdhmanning@gmail.com>
Fri, 7 May 2010 03:24:51 +0000 (15:24 +1200)
Signed-off-by: Charles Manning <cdhmanning@gmail.com>
linux-tests/stress_test.sh [new file with mode: 0755]

diff --git a/linux-tests/stress_test.sh b/linux-tests/stress_test.sh
new file mode 100755 (executable)
index 0000000..27498e5
--- /dev/null
@@ -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