| #! /bin/bash | |
| # FS QA Test No. 015 | |
| # | |
| # check out-of-space behaviour | |
| # | |
| #----------------------------------------------------------------------- | |
| # Copyright (c) 2000-2002 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=dxm@sgi.com | |
| seq=`basename $0` | |
| echo "QA output created by $seq" | |
| here=`pwd` | |
| tmp=/tmp/$$ | |
| status=1 # success is the default! | |
| # get standard environment, filters and checks | |
| . ./common.rc | |
| . ./common.filter | |
| _cleanup() | |
| { | |
| umount $SCRATCH_MNT | |
| } | |
| trap "_cleanup; exit \$status" 0 1 2 3 15 | |
| _free() | |
| { | |
| _df_dir $SCRATCH_MNT | $AWK_PROG '{ print $5 }' | |
| } | |
| # real QA test starts here | |
| _supported_fs generic | |
| _supported_os IRIX Linux | |
| _require_scratch | |
| _require_nobigloopfs | |
| _scratch_mkfs_sized `expr 50 \* 1024 \* 1024` >/dev/null 2>&1 \ | |
| || _fail "mkfs failed" | |
| _scratch_mount || _fail "mount failed" | |
| out=$SCRATCH_MNT/fillup.$$ | |
| rm -f $seq.full | |
| free0=`_free` | |
| if [ -z "$free0" ] | |
| then | |
| echo " *** failed to get free space (0)" | |
| exit 1 | |
| fi | |
| echo "free space at start $free0" >> $seq.full | |
| echo "fill disk:" # well, filesystem really - not disk | |
| POSIXLY_CORRECT=yes dd if=/dev/zero of=$out bs=1024k 2>&1 | _filter_dd | |
| echo "check free space:" | |
| free1=`_free` | |
| if [ -z "$free1" ] | |
| then | |
| echo " *** failed to get free space (1)" | |
| exit 1 | |
| fi | |
| echo "free space after fill $free1" >> $seq.full | |
| if [ ! -e $out ] | |
| then | |
| echo " *** file not created" | |
| exit 1 | |
| fi | |
| if [ ! -s $out ] | |
| then | |
| echo " *** file created with zero length" | |
| ls -l $out | |
| exit 1 | |
| fi | |
| echo "delete fill:" | |
| if ! rm $out | |
| then | |
| echo " *** file not deleted" | |
| exit 1 | |
| fi | |
| if [ -e $out ] | |
| then | |
| echo " *** file still exists" | |
| ls -l $out | |
| exit 1 | |
| fi | |
| echo "check free space:" | |
| free2=`_free` | |
| if [ -z "$free2" ] | |
| then | |
| echo " *** failed to get free space (2)" | |
| exit 1 | |
| fi | |
| echo "free space after delete $free2" >> $seq.full | |
| echo -n " !!! " | |
| _within_tolerance "free space" $free2 $free0 1% -v | |
| status=0 | |
| exit |