#! /bin/bash
# FS QA Test No. 113
#
# aio-stress
#
#-----------------------------------------------------------------------
# Copyright (c) 2005 Silicon Graphics, Inc.  All Rights Reserved.
#
# 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.
#
# This program is distributed in the hope that it would 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 the Free Software Foundation,
# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#
#-----------------------------------------------------------------------
#
# creator
owner=nathans@sgi.com

seq=`basename $0`
echo "QA output created by $seq"

here=`pwd`
tmp=/tmp/$$
status=0	# success is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15

_cleanup()
{
    cd /
    rm -f $testdir/aio-stress.$$.*
    _cleanup_testdir
}

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

_do_test()
{
    _n="$1"
    _param="$2"
    _count="$3"
    _nproc="$4"

    _files="$testdir/aiostress.$$.$_n"
    __proc=$_nproc
    [ $__proc -gt 1 ] && _param="-t $__proc $_param"
    while [ $__proc -gt 1 ]; do
        _files="$_files $testdir/aiostress.$$.$_n.$__proc"
	let __proc=$__proc-1
    done
    rm -f $_files
 
    echo ""
    echo "-----------------------------------------------"
    echo "aio-stress.$_n : $_param"
    echo "-----------------------------------------------"
    if ! $here/ltp/aio-stress $_param $AIOSTRESS_AVOID -I $_count $_files >>$tmp.out 2>&1
    then
        echo "    aio-stress (count=$_count) returned $?"
        cat $tmp.out
        status=1
        exit
    fi

    _check_test_fs
    rm -f $_files
}


# real QA test starts here
_supported_fs generic
_supported_os Linux

[ -x $here/ltp/aio-stress ] || _notrun "aio-stress not built for this platform"

_setup_testdir

echo "brevity is wit..."

count=1000
procs=20

_check_test_fs

# the default
_do_test 1 "-s 120m" $count 1

# and the default with multiprocess
_do_test 2 "-s 10m" $count $procs

# as above, but now using direct IO
_do_test 3 "-s 10m -O" $count $procs

exit
