mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
18b7c53fd6
The current btrfs/048 test-case did not check the behavior of properties with options like compression and with the compression level supplied. Add test cases for compression with compression level as well so we can be sure we don't regress there. Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
244 lines
8.4 KiB
Bash
Executable File
244 lines
8.4 KiB
Bash
Executable File
#! /bin/bash
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# Copyright (c) 2014 Filipe Manana. All Rights Reserved.
|
|
#
|
|
# FS QA Test No. btrfs/048
|
|
#
|
|
# Btrfs properties test. The btrfs properties feature was introduced in the
|
|
# linux kernel 3.14.
|
|
# Fails without the kernel patches:
|
|
# btrfs: fix vanished compression property after failed set
|
|
# btrfs: fix zstd compression parameter
|
|
#
|
|
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()
|
|
{
|
|
rm -fr $send_files_dir
|
|
rm -fr $tmp
|
|
}
|
|
|
|
# get standard environment, filters and checks
|
|
. ./common/rc
|
|
. ./common/filter
|
|
. ./common/filter.btrfs
|
|
|
|
# real QA test starts here
|
|
_supported_fs btrfs
|
|
_supported_os Linux
|
|
_require_test
|
|
_require_scratch
|
|
_require_btrfs_command "property"
|
|
_require_btrfs_command inspect-internal dump-super
|
|
|
|
send_files_dir=$TEST_DIR/btrfs-test-$seq
|
|
|
|
rm -f $seqres.full
|
|
rm -fr $send_files_dir
|
|
mkdir $send_files_dir
|
|
|
|
_scratch_mkfs >/dev/null 2>&1
|
|
_scratch_mount
|
|
|
|
echo "Testing label property"
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT label
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT label foobar
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT label
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT label ''
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT label
|
|
echo "***"
|
|
mkdir $SCRATCH_MNT/testdir
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir label 2>&1 |
|
|
_filter_btrfs_prop_error label
|
|
echo "***"
|
|
|
|
echo -e "\nTesting subvolume ro property"
|
|
_run_btrfs_util_prog subvolume create $SCRATCH_MNT/sv1
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1 ro
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/sv1 ro foo 2>&1 |
|
|
_filter_btrfs_prop_error
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/sv1 ro true
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1 ro
|
|
echo "***"
|
|
touch $SCRATCH_MNT/sv1/foobar 2>&1 | _filter_scratch
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/sv1 ro false
|
|
touch $SCRATCH_MNT/sv1/foobar 2>&1 | _filter_scratch
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1
|
|
echo "***"
|
|
|
|
echo -e "\nTesting compression property"
|
|
mkdir $SCRATCH_MNT/testdir/subdir1
|
|
touch $SCRATCH_MNT/testdir/file1
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1 compression
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/file1 compression \
|
|
foo 2>&1 | _filter_scratch |
|
|
_filter_btrfs_prop_error SCRATCH_MNT/testdir/file1
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/file1 compression lzo
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
|
|
|
|
# Verify property was persisted.
|
|
_scratch_unmount
|
|
_check_scratch_fs
|
|
_scratch_mount
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/file1 compression zlib
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/file1 compression ''
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/file1 compression
|
|
|
|
# Test compression property inheritance.
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1 compression lzo
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1 compression
|
|
echo "***"
|
|
mkdir $SCRATCH_MNT/testdir/subdir1/subsubdir
|
|
touch $SCRATCH_MNT/testdir/subdir1/some_file
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir compression
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/some_file compression
|
|
echo "***"
|
|
mkdir $SCRATCH_MNT/testdir/subdir1/subsubdir/foo
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir/foo \
|
|
compression
|
|
echo "***"
|
|
|
|
# Verify property was persisted.
|
|
_scratch_unmount
|
|
_check_scratch_fs
|
|
_scratch_mount
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir compression
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir/foo \
|
|
compression
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/some_file compression
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1/subsubdir \
|
|
compression ''
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1/some_file \
|
|
compression ''
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1 compression ''
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/subsubdir compression
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/some_file compression
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1 compression
|
|
echo "***"
|
|
touch $SCRATCH_MNT/testdir/subdir1/some_file_2
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/some_file_2 \
|
|
compression
|
|
echo "***"
|
|
|
|
# Verify send is able to replicate properties.
|
|
echo -e "\nTesting properties with send"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/testdir/subdir1 compression lzo
|
|
touch $SCRATCH_MNT/testdir/subdir1/foobar
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1 compression
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/testdir/subdir1/foobar compression
|
|
echo "***"
|
|
|
|
_run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap1
|
|
touch $SCRATCH_MNT/testdir/subdir1/foobar2
|
|
_run_btrfs_util_prog subvolume snapshot -r $SCRATCH_MNT $SCRATCH_MNT/mysnap2
|
|
|
|
_run_btrfs_util_prog send -f $send_files_dir/1.snap $SCRATCH_MNT/mysnap1
|
|
_run_btrfs_util_prog send -p $SCRATCH_MNT/mysnap1 -f $send_files_dir/2.snap \
|
|
$SCRATCH_MNT/mysnap2
|
|
|
|
_scratch_unmount
|
|
_check_scratch_fs
|
|
_scratch_mkfs >/dev/null 2>&1
|
|
_scratch_mount
|
|
|
|
_run_btrfs_util_prog receive -f $send_files_dir/1.snap $SCRATCH_MNT
|
|
_run_btrfs_util_prog receive -f $send_files_dir/2.snap $SCRATCH_MNT
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/mysnap2/testdir/subdir1 compression
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/mysnap2/testdir/subdir1/foobar \
|
|
compression
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/mysnap2/testdir/subdir1/foobar2 \
|
|
compression
|
|
echo "***"
|
|
|
|
_scratch_unmount
|
|
_check_scratch_fs
|
|
_scratch_mkfs >/dev/null 2>&1
|
|
_scratch_mount
|
|
|
|
echo -e "\nTesting subvolume properties"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'lzo'
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT compression
|
|
echo "***"
|
|
touch $SCRATCH_MNT/file1
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/file1 compression
|
|
echo "***"
|
|
mkdir $SCRATCH_MNT/dir1
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/dir1 compression
|
|
echo "***"
|
|
mkdir $SCRATCH_MNT/dir1/subdir1
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/dir1/subdir1 compression
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT/dir1/subdir1 compression 'zlib'
|
|
touch $SCRATCH_MNT/dir1/subdir1/foo
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/dir1/subdir1/foo compression
|
|
|
|
echo -e "\nTesting subvolume property inheritance"
|
|
_run_btrfs_util_prog subvolume create $SCRATCH_MNT/sv1
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1 compression
|
|
touch $SCRATCH_MNT/sv1/file2
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT/sv1/file2 compression
|
|
|
|
echo -e "\nTesting argument validation, should fail"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'lz' 2>&1 | _filter_scratch
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'zli' 2>&1 | _filter_scratch
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'zst' 2>&1 | _filter_scratch
|
|
|
|
echo -e "\nTesting if property is persistent across failed validation"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'lzo'
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'zli' 2>&1 | _filter_scratch
|
|
$BTRFS_UTIL_PROG property get $SCRATCH_MNT compression
|
|
|
|
echo -e "\nTesting generation is unchanged after failed validation"
|
|
$BTRFS_UTIL_PROG filesystem sync $SCRATCH_MNT
|
|
$BTRFS_UTIL_PROG inspect-internal dump-super $SCRATCH_DEV | grep '^generation'
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'lz' 2>&1 | _filter_scratch
|
|
$BTRFS_UTIL_PROG filesystem sync $SCRATCH_MNT
|
|
$BTRFS_UTIL_PROG inspect-internal dump-super $SCRATCH_DEV | grep '^generation'
|
|
|
|
echo -e "\nTesting argument validation with options"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'zlib:3'
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'zstd:0'
|
|
echo "***"
|
|
|
|
echo -e "\nTesting invalid argument validation with options, should fail"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'zl:9' 2>&1 | _filter_scratch
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'zli:0' 2>&1 | _filter_scratch
|
|
echo "***"
|
|
$BTRFS_UTIL_PROG property set $SCRATCH_MNT compression 'zst:3' 2>&1 | _filter_scratch
|
|
|
|
status=0
|
|
exit
|