Older Linux distributions came with differently incomplete
btrfs-tools 0.19+git versions (2009-2013). Old mkfs.btrfs
needs minimum device size 256M.
Note the most simple way to skip btrfs-tools < 3.14 would be
btrfs property --help 2>&1 || ts_skip "btrfs too old"
but I want to include 3.12 because of Ubuntu Trusty on travis.
This patch partly reverts/rewrites the following commits:
7e604f3c - tests: don't skip case "output undefined"
076153f8 - tests: don't compare btrfs mount options
370d31f7 - tests: skip btrfs tests if version too old
Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
Create partitions
Create filesystem
Do tests...
-Create filesystem [btrfs]
...done.
Create partitions
Create filesystem
Do tests...
-Create filesystem [btrfs]
...done.
ts_skip_nonroot
ts_check_prog "mkfs.ext4"
-ts_check_prog "mkfs.btrfs"
TESTPROG="$TS_HELPER_LIBMOUNT_CONTEXT"
LABEL=libmount-test
[ -x $TESTPROG ] || ts_skip "test not compiled"
# set global variable TS_DEVICE
-ts_scsi_debug_init dev_size_mb=100
+ts_scsi_debug_init dev_size_mb=257
DEVNAME=$(basename $TS_DEVICE)
ts_log "Create partitions"
ts_finalize_subtest
-$TS_CMD_WIPEFS -a $DEVICE &> /dev/null
-ts_log "Create filesystem [btrfs]"
-mkfs.btrfs -L "$LABEL" $DEVICE &> /dev/null
-udevadm settle
-
-mount -t btrfs $DEVICE $MOUNTPOINT &> /dev/null
-btrfs subvolume create $MOUNTPOINT/sub &> /dev/null
-umount $MOUNTPOINT &> /dev/null
-
-udevadm settle
-
-ts_init_subtest "mount-uhelper-subvol"
-mkdir -p $MOUNTPOINT &> /dev/null
-ts_valgrind $TESTPROG --mount -o uhelper=foo,rw,subvol=sub $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
-grep -q $DEVICE $LIBMOUNT_UTAB || \
- echo "cannot find $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
-ts_finalize_subtest
-
-# Don't temporary write btrfs mount options to the test output,
-# the options depend on kernel version (since 4.2 it contains
-# subvol= and subvolid=).
-#
-#ts_log "All mount options (btrfs subvolume + utab) ---"
-#$TS_CMD_FINDMNT --mtab $MOUNTPOINT -o OPTIONS -n >> $TS_OUTPUT 2>&1
-#ts_log "---"
-
-ts_init_subtest "umount-subvol"
-ts_valgrind $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
-grep -q $DEVICE $LIBMOUNT_UTAB && \
- echo "umount (mountpoint) failed: found $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
-ts_finalize_subtest
+if type "mkfs.btrfs" &>/dev/null && mkfs.btrfs --version &>/dev/null; then
+ $TS_CMD_WIPEFS -a $DEVICE &> /dev/null
+ #ts_log "Create filesystem [btrfs]"
+ mkfs.btrfs -L "$LABEL" $DEVICE &> /dev/null
+ udevadm settle
+
+ mount -t btrfs $DEVICE $MOUNTPOINT &> /dev/null
+ btrfs subvolume create $MOUNTPOINT/sub &> /dev/null
+ umount $MOUNTPOINT &> /dev/null
+
+ udevadm settle
+
+ ts_init_subtest "mount-uhelper-subvol"
+ mkdir -p $MOUNTPOINT &> /dev/null
+ ts_valgrind $TESTPROG --mount -o uhelper=foo,rw,subvol=sub $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
+ grep -q $DEVICE $LIBMOUNT_UTAB || \
+ echo "cannot find $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
+ ts_finalize_subtest
+
+ # Don't temporary write btrfs mount options to the test output,
+ # the options depend on kernel version (since 4.2 it contains
+ # subvol= and subvolid=).
+ #
+ #ts_log "All mount options (btrfs subvolume + utab) ---"
+ #$TS_CMD_FINDMNT --mtab $MOUNTPOINT -o OPTIONS -n >> $TS_OUTPUT 2>&1
+ #ts_log "---"
+
+ ts_init_subtest "umount-subvol"
+ ts_valgrind $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
+ grep -q $DEVICE $LIBMOUNT_UTAB && \
+ echo "umount (mountpoint) failed: found $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
+ ts_finalize_subtest
+fi
ts_log "...done."
rmmod scsi_debug
ts_skip_nonroot
ts_check_prog "mkfs.ext4"
-ts_check_prog "mkfs.btrfs"
ts_init_py libmount
MOUNTPOINT="$TS_MOUNTPOINT"
# set global variable TS_DEVICE
-ts_scsi_debug_init dev_size_mb=100
+ts_scsi_debug_init dev_size_mb=257
DEVNAME=$(basename $TS_DEVICE)
ts_log "Create partitions"
ts_finalize_subtest
-$TS_CMD_WIPEFS -a $DEVICE &> /dev/null
-ts_log "Create filesystem [btrfs]"
-mkfs.btrfs -L "$LABEL" $DEVICE &> /dev/null
-udevadm settle
-
-mount -t btrfs $DEVICE $MOUNTPOINT &> /dev/null
-btrfs subvolume create $MOUNTPOINT/sub &> /dev/null
-umount $MOUNTPOINT &> /dev/null
-
-udevadm settle
-
-ts_init_subtest "mount-uhelper-subvol"
-mkdir -p $MOUNTPOINT &> /dev/null
-$PYTHON $TESTPROG --mount -o uhelper=foo,rw,subvol=sub $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
-grep -q $DEVICE $LIBMOUNT_UTAB || \
- echo "cannot find $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
-ts_finalize_subtest
-
-
-# Don't temporary write btrfs mount options to the test output,
-# the options depend on kernel version (since 4.2 it contains
-# subvol= and subvolid=).
-#
-#ts_log "All mount options (btrfs subvolume + utab) ---"
-#$TS_CMD_FINDMNT --mtab $MOUNTPOINT -o OPTIONS -n >> $TS_OUTPUT 2>&1
-#ts_log "---"
-
-ts_init_subtest "umount-subvol"
-$PYTHON $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
-grep -q $DEVICE $LIBMOUNT_UTAB && \
- echo "umount (mountpoint) failed: found $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
-ts_finalize_subtest
+if type "mkfs.btrfs" &>/dev/null && mkfs.btrfs --version &>/dev/null; then
+ $TS_CMD_WIPEFS -a $DEVICE &> /dev/null
+ #ts_log "Create filesystem [btrfs]"
+ mkfs.btrfs -L "$LABEL" $DEVICE &> /dev/null
+ udevadm settle
+
+ mount -t btrfs $DEVICE $MOUNTPOINT &> /dev/null
+ btrfs subvolume create $MOUNTPOINT/sub &> /dev/null
+ umount $MOUNTPOINT &> /dev/null
+
+ udevadm settle
+
+ ts_init_subtest "mount-uhelper-subvol"
+ mkdir -p $MOUNTPOINT &> /dev/null
+ $PYTHON $TESTPROG --mount -o uhelper=foo,rw,subvol=sub $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
+ grep -q $DEVICE $LIBMOUNT_UTAB || \
+ echo "cannot find $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
+ ts_finalize_subtest
+
+ # Don't temporary write btrfs mount options to the test output,
+ # the options depend on kernel version (since 4.2 it contains
+ # subvol= and subvolid=).
+ #
+ #ts_log "All mount options (btrfs subvolume + utab) ---"
+ #$TS_CMD_FINDMNT --mtab $MOUNTPOINT -o OPTIONS -n >> $TS_OUTPUT 2>&1
+ #ts_log "---"
+
+ ts_init_subtest "umount-subvol"
+ $PYTHON $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
+ grep -q $DEVICE $LIBMOUNT_UTAB && \
+ echo "umount (mountpoint) failed: found $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
+ ts_finalize_subtest
+fi
ts_log "...done."
rmmod scsi_debug
ts_check_prog "btrfs"
# btrfs feature check
-btrfs inspect rootid bla 2>&1 | grep -q "unknown token" \
- && ts_skip "btrfs too old"
+if ! btrfs inspect-internal --help &>/dev/null || \
+ btrfs inspect-internal rootid bla 2>&1 | grep -q "unknown token"; then
+ ts_skip "btrfs too old"
+fi
TS_MOUNTPOINT_ANY="$TS_MOUNTPOINT"
TS_MOUNTPOINT_CREATE="$TS_MOUNTPOINT-create"
mkdir -p d1/dd1/ddd1
cd ./d1/dd1/ddd1
btrfs subvol create s2 >/dev/null
-DEFAULT_SUBVOLID=$(btrfs inspect rootid s2)
+DEFAULT_SUBVOLID=$(btrfs inspect-internal rootid s2)
btrfs subvol set-default $DEFAULT_SUBVOLID . >/dev/null
NON_DEFAULT_SUBVOLID=$(btrfs subvol list "$TS_MOUNTPOINT_CREATE" | while read dummy id rest ; do if test $id = $DEFAULT_SUBVOLID ; then continue ; fi ; echo $id ; done)
cd ../../../..