mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
0837e90798
In order to check that the filesystem generation does not change after failure to set a property, the test expects a specific generation number of 7 in its golden output. That currently works except when using the v2 space cache mount option (MOUNT_OPTIONS="-o space_cache=v2"), since the filesystem generation is 8 because creating a v2 space cache adds an additional transaction commit. So update the test to not hardcode specific generation numbers in its golden output and just output an unexpected message if the generation number changes. Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Eryu Guan <guaneryu@gmail.com>
245 lines
8.5 KiB
Bash
Executable File
245 lines
8.5 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
|
|
gen_before=$($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
|
|
gen_after=$($BTRFS_UTIL_PROG inspect-internal dump-super $SCRATCH_DEV | grep '^generation')
|
|
[ "$gen_after" == "$gen_before" ] || echo "filesystem generation changed"
|
|
|
|
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
|