#! /bin/bash
# FS QA Test No. 146
#
# Ensure that punch-hole steps around reflinked ranges:
#   - Create three reflink clones of a file
#   - Punch the start, middle, and end of the reflink range of each
#     of the three files, respectively
#   - Check that the reflinked areas are still there.
#
#-----------------------------------------------------------------------
# Copyright (c) 2015, Oracle and/or its affiliates.  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 -rf $tmp.* $testdir
}

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

# real QA test starts here
_supported_os Linux
_require_test_reflink
_require_cp_reflink
_require_xfs_io_command "fpunch"

rm -f $seqres.full

testdir=$TEST_DIR/test-$seq
rm -rf $testdir
mkdir $testdir

echo "Create the original files"
blksz=65536
_pwrite_byte 0x61 0 $blksz $testdir/file1 >> $seqres.full
_pwrite_byte 0x62 $blksz $blksz $testdir/file1 >> $seqres.full
_pwrite_byte 0x63 $((blksz * 2)) $blksz $testdir/file1 >> $seqres.full

_cp_reflink $testdir/file1 $testdir/file2
_cp_reflink $testdir/file1 $testdir/file3
_cp_reflink $testdir/file1 $testdir/file4

_pwrite_byte 0x00 0 $blksz $testdir/file2.chk >> $seqres.full
_pwrite_byte 0x62 $blksz $blksz $testdir/file2.chk >> $seqres.full
_pwrite_byte 0x63 $((blksz * 2)) $blksz $testdir/file2.chk >> $seqres.full

_pwrite_byte 0x61 0 $blksz $testdir/file3.chk >> $seqres.full
_pwrite_byte 0x00 $blksz $blksz $testdir/file3.chk >> $seqres.full
_pwrite_byte 0x63 $((blksz * 2)) $blksz $testdir/file3.chk >> $seqres.full

_pwrite_byte 0x61 0 $blksz $testdir/file4.chk >> $seqres.full
_pwrite_byte 0x62 $blksz $blksz $testdir/file4.chk >> $seqres.full
_pwrite_byte 0x00 $((blksz * 2)) $blksz $testdir/file4.chk >> $seqres.full
_test_cycle_mount

md5sum $testdir/file1 | _filter_test_dir
md5sum $testdir/file2 | _filter_test_dir
md5sum $testdir/file3 | _filter_test_dir
md5sum $testdir/file4 | _filter_test_dir
md5sum $testdir/file2.chk | _filter_test_dir
md5sum $testdir/file3.chk | _filter_test_dir
md5sum $testdir/file4.chk | _filter_test_dir

c1=$(_md5_checksum $testdir/file1)
c2=$(_md5_checksum $testdir/file2)
c3=$(_md5_checksum $testdir/file3)
c4=$(_md5_checksum $testdir/file4)

test ${c1} = ${c2} || echo "file1 and file2 should match"
test ${c1} = ${c3} || echo "file1 and file3 should match"
test ${c1} = ${c4} || echo "file1 and file4 should match"
test ${c2} = ${c3} || echo "file2 and file3 should match"
test ${c2} = ${c4} || echo "file2 and file4 should match"
test ${c3} = ${c4} || echo "file3 and file4 should match"

echo "fpunch files"
$XFS_IO_PROG -f -c "fpunch 0 $blksz" $testdir/file2
$XFS_IO_PROG -f -c "fpunch $blksz $blksz" $testdir/file3
$XFS_IO_PROG -f -c "fpunch $((blksz * 2)) $blksz" $testdir/file4
_test_cycle_mount

echo "Compare files"
md5sum $testdir/file1 | _filter_test_dir
md5sum $testdir/file2 | _filter_test_dir
md5sum $testdir/file3 | _filter_test_dir
md5sum $testdir/file4 | _filter_test_dir
md5sum $testdir/file2.chk | _filter_test_dir
md5sum $testdir/file3.chk | _filter_test_dir
md5sum $testdir/file4.chk | _filter_test_dir

c1=$(_md5_checksum $testdir/file1)
c2=$(_md5_checksum $testdir/file2)
c3=$(_md5_checksum $testdir/file3)
c4=$(_md5_checksum $testdir/file4)

test ${c1} != ${c2} || echo "file1 and file2 should not match"
test ${c1} != ${c3} || echo "file1 and file3 should not match"
test ${c1} != ${c4} || echo "file1 and file4 should not match"
test ${c2} != ${c3} || echo "file2 and file3 should not match"
test ${c2} != ${c4} || echo "file2 and file4 should not match"
test ${c3} != ${c4} || echo "file3 and file4 should not match"

echo "Compare against check files"
cmp -s $testdir/file2 $testdir/file2.chk || echo "file2 and file2.chk do not match"
cmp -s $testdir/file3 $testdir/file3.chk || echo "file3 and file3.chk do not match"
cmp -s $testdir/file4 $testdir/file4.chk || echo "file4 and file4.chk do not match"

# success, all done
status=0
exit
