#! /bin/bash
# FS QA Test No. 014
#
# Create and populate an ext4 filesystem, corrupt root directory, then
# see how the kernel and e2fsck deal with it.
#
#-----------------------------------------------------------------------
# Copyright (c) 2015 Oracle, 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
#-----------------------------------------------------------------------
#

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 /
    #rm -f $tmp.*
}

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

# real QA test starts here
_supported_fs ext4
_supported_os Linux

_require_scratch
test -n "${FORCE_FUZZ}" || _require_scratch_ext4_crc
_require_attrs

rm -f $seqres.full
TESTDIR="${SCRATCH_MNT}/scratchdir"
TESTFILE="${TESTDIR}/testfile"

echo "+ create scratch fs"
_scratch_mkfs_ext4 > /dev/null 2>&1

echo "+ mount fs image"
_scratch_mount

echo "+ make some files"
mkdir -p "${TESTDIR}"
for x in `seq 1 128`; do
	touch "${SCRATCH_MNT}/junk.${x}"
	inode="$(stat -c '%i' "${SCRATCH_MNT}/junk.${x}")"
	if [ "$x" -gt 64 ] && [ "$((inode % 64))" -eq 0 ]; then
		mv "${SCRATCH_MNT}/junk.${x}" "${TESTFILE}.1"
		break
	fi
done
for x in `seq 2 64`; do
	touch "${TESTFILE}.${x}"
done
umount "${SCRATCH_MNT}"

echo "+ check fs"
e2fsck -fn "${SCRATCH_DEV}" >> $seqres.full 2>&1 || _fail "fsck should not fail"

echo "+ corrupt image"
debugfs -w -R "zap -f / 0" "${SCRATCH_DEV}" >> $seqres.full 2>&1

echo "+ mount image"
_scratch_mount

echo "+ modify files"
broken=0
for x in `seq 1 64`; do
	#test -e "${TESTFILE}.${x}" || continue
	stat "${TESTFILE}.${x}" >> $seqres.full 2>&1
	test $? -ne 0 && broken=1
	echo moo | dd oflag=append of="${TESTFILE}.${x}" 2>/dev/null
	test $? -ne 0 && broken=1
done
echo "broken: ${broken}"
umount "${SCRATCH_MNT}"

echo "+ repair fs"
e2fsck -fy "${SCRATCH_DEV}" >> $seqres.full 2>&1 && _fail "e2fsck should not succeed"

echo "+ mount image (2)"
_scratch_mount

echo "+ chattr -R -i"
$CHATTR_PROG -R -f -i "${SCRATCH_MNT}/"

echo "+ modify files (2)"
broken=0
for x in `seq 1 64`; do
	test -e "${TESTFILE}.${x}" || continue
	stat "${TESTFILE}.${x}" >> $seqres.full 2>&1
	test $? -ne 0 && broken=1
	echo moo | dd oflag=append of="${TESTFILE}.${x}" 2>/dev/null
	test $? -ne 0 && broken=1
done
echo "broken: ${broken}"
umount "${SCRATCH_MNT}"

echo "+ check fs (2)"
e2fsck -fn "${SCRATCH_DEV}" >> $seqres.full 2>&1 || _fail "fsck should not fail"

status=0
exit
