#! /bin/bash
# FS QA Test No. 373
#
# Check that cross-mountpoint reflink doesn't work.
#
#-----------------------------------------------------------------------
# Copyright (c) 2016 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 7 15

_cleanup()
{
	cd /
	rm -rf $tmp.*
	wait
}

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

# real QA test starts here
_supported_os Linux
_supported_fs generic
_require_scratch_reflink
_require_cp_reflink

echo "Format and mount"
_scratch_mkfs > $seqres.full 2>&1
_scratch_mount >> $seqres.full 2>&1

testdir=$SCRATCH_MNT/test-$seq
mkdir $testdir
otherdir=/tmp/m.$seq
othertestdir=$otherdir/test-$seq
rm -rf $otherdir
mkdir $otherdir

blocks=1
blksz=65536
sz=$((blksz * blocks))

echo "Mount otherdir"
$MOUNT_PROG --bind $SCRATCH_MNT $otherdir

echo "Create file"
_pwrite_byte 0x61 0 $sz $testdir/file >> $seqres.full

filter_md5()
{
	_filter_scratch | sed -e "s,$otherdir,OTHER_DIR,g"
}

echo "Reflink one file to another"
_cp_reflink $testdir/file $othertestdir/otherfiles 2>&1 | filter_md5

echo "Check output"
md5sum $testdir/file | _filter_scratch
test -e $othertestdir/otherfile && echo "otherfile should not exist"

echo "Unmount otherdir"
$UMOUNT_PROG $otherdir
rm -rf $otherdir

# success, all done
status=0
exit
