Files
apfstests/tests/xfs/148
T
Darrick J. Wong a860a167d8 common: kill _supported_os
fstests only supports Linux, so get rid of this unnecessary predicate.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
2020-09-21 01:16:50 +08:00

137 lines
3.2 KiB
Bash
Executable File

#! /bin/bash
# SPDX-License-Identifier: GPL-2.0-or-newer
# Copyright (c) 2019, Oracle and/or its affiliates. All Rights Reserved.
#
# FS QA Test No. 148
#
# See if we catch corrupt directory names or attr names with nulls or slashes
# in them.
seq=`basename $0`
seqres=$RESULT_DIR/$seq
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 /
$UMOUNT_PROG $mntpt > /dev/null 2>&1
test -n "$loopdev" && _destroy_loop_device $loopdev > /dev/null 2>&1
rm -r -f $imgfile $mntpt $tmp.*
}
# get standard environment, filters and checks
. ./common/rc
. ./common/filter
. ./common/attr
# real QA test starts here
_supported_fs xfs
_require_test
_require_attrs
_require_xfs_mkfs_crc
_disable_dmesg_check
rm -f $seqres.full
imgfile=$TEST_DIR/img-$seq
mntpt=$TEST_DIR/mount-$seq
testdir=$mntpt/testdir
testfile=$mntpt/testfile
nullstr="too_many_beans"
slashstr="are_bad_for_you"
test_names=("something" "$nullstr" "$slashstr" "another")
# Format image file w/o crcs so we can sed the image file
$XFS_IO_PROG -f -c 'truncate 40m' $imgfile
loopdev=$(_create_loop_device $imgfile)
MKFS_OPTIONS="-m crc=0" _mkfs_dev $loopdev >> $seqres.full
# Mount image file
mkdir -p $mntpt
_mount $loopdev $mntpt
echo "creating entries" >> $seqres.full
# Create directory entries
mkdir -p $testdir
for name in "${test_names[@]}"; do
touch "$testdir/f_$name"
done
# Create attrs
touch $testfile
for name in "${test_names[@]}"; do
$ATTR_PROG -s "a_$name" -V heh $testfile >> $seqres.full
done
# Now put in the first part of the garbage names to make sure we can't
# access those directly
test_names+=("too_many" "are_bad/for_you")
access_stuff() {
ls $testdir
$ATTR_PROG -l $testfile | grep 'a_' | sort
for name in "${test_names[@]}"; do
ls "$testdir/f_$name"
$ATTR_PROG -g "a_$name" $testfile
done
}
# Does it work?
echo "++ ACCESSING GOOD METADATA" | tee -a $seqres.full
access_stuff > $tmp.log 2>&1
cat $tmp.log >> $seqres.full
cat $tmp.log | _filter_test_dir
# Corrupt the entries
$UMOUNT_PROG $mntpt
_destroy_loop_device $loopdev
cp $imgfile $imgfile.old
sed -b \
-e "s/$nullstr/too_many\x00beans/g" \
-e "s/$slashstr/are_bad\/for_you/g" \
-i $imgfile
test "$(md5sum < $imgfile)" != "$(md5sum < $imgfile.old)" ||
_fail "sed failed to change the image file?"
rm -f $imgfile.old
loopdev=$(_create_loop_device $imgfile)
_mount $loopdev $mntpt
# Try to access the corrupt metadata
echo "++ ACCESSING BAD METADATA" | tee -a $seqres.full
access_stuff > $tmp.log 2>&1
cat $tmp.log >> $seqres.full
cat $tmp.log | _filter_test_dir | sed -e '/Could not list/d'
echo "does scrub complain?" >> $seqres.full
# Does scrub complain about this?
if _supports_xfs_scrub $mntpt $loopdev; then
$XFS_SCRUB_PROG -n $mntpt >> $seqres.full 2>&1
res=$?
test $((res & 1)) -eq 0 && \
echo "scrub failed to report corruption ($res)"
fi
echo "does repair complain?" >> $seqres.full
# Does repair complain about this?
$UMOUNT_PROG $mntpt
$XFS_REPAIR_PROG -n $loopdev >> $seqres.full 2>&1
res=$?
test $res -eq 1 || \
echo "repair failed to report corruption ($res)"
_destroy_loop_device $loopdev
loopdev=
# success, all done
status=0
exit