#! /bin/bash # SPDX-License-Identifier: GPL-2.0 # Copyright (c) 2015, Oracle and/or its affiliates. All Rights Reserved. # # FS QA Test No. 121 # # Ensure that we can dedupe parts of two files: # - Dedupe identical parts of two identical files # - Check that still have identical contents # . ./common/preamble _begin_fstest auto quick clone dedupe # Override the default cleanup function. _cleanup() { cd / rm -rf $tmp.* $testdir } # Import common functions. . ./common/filter . ./common/reflink # real QA test starts here _require_test_dedupe testdir=$TEST_DIR/test-$seq rm -rf $testdir mkdir $testdir echo "Create the original files" blksz=65536 _require_congruent_file_oplen $TEST_DIR $blksz _pwrite_byte 0x61 $((blksz * 2)) $((blksz * 6)) $testdir/file1 >> $seqres.full _pwrite_byte 0x61 $((blksz * 2)) $((blksz * 6)) $testdir/file2 >> $seqres.full _test_cycle_mount md5sum $testdir/file1 | _filter_test_dir md5sum $testdir/file2 | _filter_test_dir _compare_range $testdir/file1 0 $testdir/file2 0 $((blksz * 8)) \ || echo "Files 1-2 do not match (intentional)" echo "Dedupe the middle blocks together" free_before=$(stat -f -c '%a' $testdir) _dedupe_range $testdir/file1 $((blksz * 4)) $testdir/file2 \ $((blksz * 4)) $((blksz * 2)) >> $seqres.full _test_cycle_mount free_after=$(stat -f -c '%a' $testdir) echo "freesp changed by $free_before -> $free_after" >> $seqres.full echo "Compare sections" md5sum $testdir/file1 | _filter_test_dir md5sum $testdir/file2 | _filter_test_dir _compare_range $testdir/file1 0 $testdir/file2 0 $((blksz * 4)) \ || echo "Start sections do not match" _compare_range $testdir/file1 $((blksz * 4)) $testdir/file2 \ $((blksz * 4)) $((blksz * 2)) \ || echo "Middle sections do not match" _compare_range $testdir/file1 $((blksz * 6)) $testdir/file2 \ $((blksz * 6)) $((blksz * 2)) \ || echo "End sections do not match" # success, all done status=0 exit