#!/bin/bash
################################################################################
##                                                                            ##
## Copyright (c) Dan Carpenter., 2004                                         ##
##                                                                            ##
## This program is free software;  you can redistribute it and#or modify      ##
## it under the terms of the GNU General Public License as published by       ##
## the Free Software Foundation; either version 2 of the License, or          ##
## (at your option) any later version.                                        ##
##                                                                            ##
## This program is distributed in the hope that it will be useful, but        ##
## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
## for more details.                                                          ##
##                                                                            ##
## You should have received a copy of the GNU General Public License          ##
## along with this program;  if not, write to the Free Software               ##
## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA    ##
##                                                                            ##
################################################################################

## DESCRIPTION:
## This test creates 20 files (0 thru 19) and then shuffles them around,
## deletes, and recreates them as fast as possible.  This is all done in
## an effort to test for race conditions in the filesystem code. This test
## runs until killed or Ctrl-C'd.  It is suggested that it run overnight
## with preempt turned on to make the system more sensitive to race
## conditions.

MAX_FILES=20
CLEAR_SECS=30
DIR="$TMPDIR/race"

execute_test()
{
[ -e $DIR ] || mkdir $DIR
./fs_racer_file_create.sh $DIR $MAX_FILES &
./fs_racer_file_create.sh $DIR $MAX_FILES &
./fs_racer_file_create.sh $DIR $MAX_FILES &

./fs_racer_dir_create.sh $DIR $MAX_FILES &
./fs_racer_dir_create.sh $DIR $MAX_FILES &
./fs_racer_dir_create.sh $DIR $MAX_FILES &

./fs_racer_file_rename.sh $DIR $MAX_FILES &
./fs_racer_file_rename.sh $DIR $MAX_FILES &
./fs_racer_file_rename.sh $DIR $MAX_FILES &

./fs_racer_file_link.sh $DIR $MAX_FILES &
./fs_racer_file_link.sh $DIR $MAX_FILES &
./fs_racer_file_link.sh $DIR $MAX_FILES &

./fs_racer_file_symlink.sh $DIR $MAX_FILES &
./fs_racer_file_symlink.sh $DIR $MAX_FILES &
./fs_racer_file_symlink.sh $DIR $MAX_FILES &

./fs_racer_file_concat.sh $DIR $MAX_FILES &
./fs_racer_file_concat.sh $DIR $MAX_FILES &
./fs_racer_file_concat.sh $DIR $MAX_FILES &

./fs_racer_file_list.sh $DIR &
./fs_racer_file_list.sh $DIR &
./fs_racer_file_list.sh $DIR &

./fs_racer_file_rm.sh $DIR $MAX_FILES &
./fs_racer_file_rm.sh $DIR $MAX_FILES &
./fs_racer_file_rm.sh $DIR $MAX_FILES &
}


usage()
{
    echo usage: fs_racer.sh -t DURATION [Execute the testsuite for given DURATION seconds]
    exit 0;
}


call_exit()
{
    echo \"Cleaning up\"
    killall fs_racer_file_create.sh
    killall fs_racer_dir_create.sh
    killall fs_racer_file_rm.sh
    killall fs_racer_file_rename.sh
    killall fs_racer_file_link.sh
    killall fs_racer_file_symlink.sh
    killall fs_racer_file_list.sh
    killall fs_racer_file_concat.sh
    rm -rf $DIR
    exit 0
}

while getopts :t: arg
do  case $arg in
    t)  execute_test
        sleep $OPTARG
        call_exit;;
    \?) usage;;
    esac
done

exit 0