Files
apfstests/114
T
Christoph Hellwig f381f98206 xfstests: move GPL boilerplates to fix lsqa.pl
It turns out lsqa.pl nees the test number and description first in the
file, so move the GPL boilerplates below it.

Also remove acouple of cases where we have one full copyright line + gpl
boilerplate before the description and another copyright line after
the description.

Signed-off-by: Christoph Hellwig <hch@lst.de>
2009-05-28 17:04:15 +02:00

346 lines
6.3 KiB
Bash
Executable File

#! /bin/sh
# FS QA Test No. 114
#
# Test some parent ptr stuff
#
#-----------------------------------------------------------------------
# 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=tes@crackle.melbourne.sgi.com
seq=`basename $0`
echo "QA output created by $seq"
here=`pwd`
tmp=/tmp/$$
status=1 # failure is the default!
trap "_cleanup; exit \$status" 0 1 2 3 15
_cleanup()
{
cd /
rm -f $tmp.*
}
_check_paths()
{
_path=$1 # might want to only check this path
sync; sleep 1
echo ""
echo "Check parent"
if ! xfs_io -x -c 'parent -c' $SCRATCH_MNT | _filter_num; then
exit 1
fi
}
_print_names()
{
echo ""
echo "Print out hardlink names for given path, $1"
echo ""
xfs_io -x -c parent $1 | awk '/p_ino.*=/ {$3 = "inodeXXX"; print; next} {print}'
}
_test_create()
{
echo ""
echo "Testing create"
echo ""
# Test out some creations
cd $SCRATCH_MNT
touch file1
mkdir dir2
touch dir2/file2
mkdir dir2/dir3
touch dir2/dir3/file3
mkdir dir2/dir3/dir4
p=dir2/dir3/dir4/file4
touch $p
#_print_names $p >>$here/$seq.full
_print_names $p | tee -a $here/$seq.full
_check_paths $SCRATCH_MNT/$p
}
_test_symlink()
{
echo ""
echo "Testing symlink"
echo ""
d=sym1/sym2/sym3
f=$d/sym4_f
mkdir -p $d
ln -s $f symlink1
ln symlink1 hlink1
ln symlink1 hlink2
ln symlink1 hlink3
_check_paths $SCRATCH_MNT/symlink1
_check_paths $SCRATCH_MNT/hlink1
_check_paths $SCRATCH_MNT/hlink2
_check_paths $SCRATCH_MNT/hlink3
}
#
# create hardlinks from the same dir
# and some from different dirs
#
# test out removing hardlinks too
#
_test_hardlink()
{
echo ""
echo "Testing hardlink"
echo ""
d=dir2/dir3/dir4
d2=dir2/dir5/dir6
mkdir -p $d
mkdir -p $d2
p=$d/file4
touch $p
# create hardlinks
paths="$d/l1 $d/l2 $d/l3 $d2/l4 $d2/l5 $d2/l6"
for x in $paths; do
ln $p $x
done
_print_names $p >>$here/$seq.full
echo ""
echo "print out names and check after created hardlinks"
echo ""
for x in $paths; do
_print_names $x | tee -a $here/$seq.full
_check_paths $SCRATCH_MNT/$x
done
echo ""
echo "now try removing half of the hardlinks"
echo ""
paths="$d/l1 $d/l2 $d/l3 $d2/l4 $d2/l5 $d2/l6"
i=0
for x in $paths; do
let i=$i+1
let j=$i%2
if [ $j -eq 0 ]; then
echo "rm'ing $x"
rm $x
fi
done
echo ""
echo "print out names and check after removed hardlinks"
echo ""
for x in $paths; do
if [ -e $x ]; then
_print_names $x | tee -a $here/$seq.full
_check_paths $SCRATCH_MNT/$x
fi
done
}
#
# in dir, file1 to file2 where file2 does not exist
# in dir, file1 to file2 where file2 does exist
# dir/file1 to dir2/file2 where file2 does not exist
# dir/file1 to dir2/file2 where file2 does exist
# dir to dir2 where dir2 does not exist
# dir to dir/dir3 - not allowed
#
#
_test_rename()
{
echo ""
echo "Testing rename"
echo ""
echo ""
echo "1. in dir, file1 to file2 where file2 does not exist"
echo ""
d1=$SCRATCH_MNT/ren1/ren2/ren3/ren4
mkdir -p $d1
p1=$d1/f1
p2=$d1/f2
touch $p1
mv $p1 $p2
_check_paths $p2
echo ""
echo "2. in dir, file1 to file2 where file2 does exist"
echo ""
touch $p1
mv $p1 $p2
_check_paths $p2
echo ""
echo "3. dir/file1 to dir2/file2 where file2 does not exist"
echo ""
d2=$SCRATCH_MNT/ren1/ren2/ren3/ren5
mkdir -p $d2
p3=$d2/f3
touch $p1
mv $p1 $p3
_check_paths $p3
echo ""
echo "4. dir/file1 to dir2/file2 where file2 does exist"
echo ""
d2=$SCRATCH_MNT/ren1/ren2/ren3/ren5
p3=$d2/f3
touch $p1
mv $p1 $p3
_check_paths $p3
echo ""
echo "5. dir to dir2 where dir2 does not exist"
echo ""
d3=$SCRATCH_MNT/ren1/ren2/ren3/ren6
mv $d1 $d3
_check_paths $d3
}
_filter_num()
{
tee -a $here/$seq.full |\
sed -e 's/[0-9][0-9]* inodes/I inodes/g' \
-e 's/[0-9][0-9]* paths/P paths/g' \
-e 's/seed = [0-9][0-9]*/seed = S/'
}
_test_fsstress()
{
echo ""
echo "Testing fsstress"
echo ""
out=$SCRATCH_MNT/fsstress.$$
count=1000
args="-z \
-f rmdir=10 -f link=10 -f creat=10 \
-f mkdir=10 -f rename=30 -f unlink=10 \
-f symlink=10 \
-n $count -d $out -p 3"
echo "fsstress $args" | sed -e "s#$out#outdir#"
if ! $FSSTRESS_PROG $args | _filter_num
then
echo " fsstress $args returned $?"
cat $tmp.out | tee -a $here/$seq.full
status=1
fi
_check_paths
}
_test_dirstress()
{
echo ""
echo "Testing dirstress"
echo ""
out=$SCRATCH_MNT/dirstress.$$
count=1000
if ! mkdir $out
then
echo "!! couldn't mkdir $out"
status=1
exit
fi
args="-d $out -f $count -k -p 3 -n 1"
echo "dirstress $args" | sed -e "s#$out#outdir#"
if ! $here/src/dirstress $args >$tmp.out 2>&1 | _filter_num
then
echo " dirstress failed"
echo "*** dirstress $args" | tee -a $here/$seq.full
cat $tmp.out >>$here/$seq.full
status=1
exit
fi
args="-d $out -f $count -k -p 3 -n 5"
echo "dirstress $args" | sed -e "s#$out#outdir#"
if ! $here/src/dirstress $args >$tmp.out 2>&1 | _filter_num
then
echo " dirstress failed"
echo "*** dirstress $args" | tee -a $here/$seq.full
cat $tmp.out >>$here/$seq.full
status=1
exit
fi
_check_paths
}
# get standard environment, filters and checks
. ./common.rc
. ./common.filter
_supported_fs xfs
_supported_os IRIX
_require_scratch
_need_to_be_root
rm -f $here/$seq.full
echo "mkfs"
_scratch_mkfs_xfs >>$here/$seq.full 2>&1 \
|| _fail "mkfs scratch failed"
_scratch_mkfs_xfs -i parent=1 >>$here/$seq.full 2>&1 \
|| _notrun "parent inodes not supported"
echo "mount"
_scratch_mount >>$here/$seq.full 2>&1 \
|| _fail "mount failed: $MOUNT_OPTIONS"
# real QA test starts here
verbose=false
_test_create
_test_hardlink
_test_rename
_test_symlink
# stress testing with verification by parent checking programs
_test_fsstress
_test_dirstress
# success, all done
status=0
exit