summaryrefslogtreecommitdiffstats
path: root/tests/ts/mount/fallback
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ts/mount/fallback')
-rwxr-xr-xtests/ts/mount/fallback86
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/ts/mount/fallback b/tests/ts/mount/fallback
new file mode 100755
index 0000000..e2a1de7
--- /dev/null
+++ b/tests/ts/mount/fallback
@@ -0,0 +1,86 @@
+#!/bin/bash
+
+TS_TOPDIR="${0%/*}/../.."
+TS_DESC="fstab-fallback"
+
+. "$TS_TOPDIR"/functions.sh
+ts_init "$*"
+
+ts_check_test_command "$TS_CMD_MOUNT"
+ts_check_test_command "$TS_CMD_UMOUNT"
+ts_check_test_command "$TS_CMD_FINDMNT"
+ts_check_test_command "$TS_CMD_LOSETUP"
+ts_check_enosys_syscalls open_tree fsopen mount_setattr
+
+ts_skip_nonroot
+
+test_mount_fallback() {
+ ts_init_subtest "$1"
+
+ MY_SOURCE="${TS_MOUNTPOINT}-src"
+
+ mkdir -p "$MY_SOURCE"
+ mkdir -p "$TS_MOUNTPOINT"
+
+ "$TS_HELPER_ENOSYS" $2 -- "$TS_CMD_MOUNT" --bind "$MY_SOURCE" "$TS_MOUNTPOINT" \
+ >> "$TS_OUTPUT" 2>> "$TS_ERRLOG"
+ [ "$?" = "0" ] || ts_log "error: mount $TS_MOUNTPOINT"
+
+ "$TS_CMD_FINDMNT" --mountpoint "$TS_MOUNTPOINT" &> /dev/null
+ [ $? -eq 0 ] || ts_die "Not found target (mount failed?)"
+
+ "$TS_CMD_UMOUNT" "$TS_MOUNTPOINT" || ts_die "Cannot umount $TS_MOUNTPOINT"
+
+ ts_finalize_subtest
+}
+
+test_mount_fallback "open_tree" "-s open_tree"
+test_mount_fallback "fsopen" "-s fsopen"
+
+
+ts_device_init
+DEVICE=$TS_LODEV
+mkfs.ext2 $DEVICE &> /dev/null || ts_die "Cannot make ext2 on $DEVICE"
+ts_udevadm_settle "$DEVICE"
+
+# use the same in all next subtests
+MOUNTPOINT=$TS_MOUNTPOINT
+mkdir -p "$MOUNTPOINT"
+
+
+ts_init_subtest "later-fsopen"
+$TS_HELPER_ENOSYS -s fsopen -- "$TS_CMD_MOUNT" -t foo,bar,ext2 "$DEVICE" "$MOUNTPOINT" \
+ >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_is_mounted $DEVICE || ts_log "Cannot find $DEVICE in /proc/mounts"
+mkdir -p ${MOUNTPOINT}/subdir
+$TS_CMD_UMOUNT $MOUNTPOINT >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_finalize_subtest
+
+
+ts_init_subtest "subdir"
+$TS_HELPER_ENOSYS -s fsopen -s open_tree -- \
+ "$TS_CMD_MOUNT" -o X-mount.subdir=subdir "$DEVICE" "$MOUNTPOINT" \
+ >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_is_mounted $DEVICE || ts_log "Cannot find $DEVICE in /proc/mounts"
+$TS_CMD_UMOUNT $MOUNTPOINT
+ts_finalize_subtest
+
+
+ts_init_subtest "mount_setattr"
+"$TS_CMD_MOUNT" "$DEVICE" "$MOUNTPOINT" >> $TS_OUTPUT 2>> $TS_ERRLOG
+ts_is_mounted $DEVICE || ts_log "Cannot find $DEVICE in /proc/mounts"
+$TS_HELPER_ENOSYS -s mount_setattr -- \
+ "$TS_CMD_MOUNT" -o remount,ro "$MOUNTPOINT" \
+ >> $TS_OUTPUT 2>> $TS_ERRLOG
+$TS_CMD_FINDMNT --kernel --mountpoint "$MOUNTPOINT" --options "ro" &> /dev/null
+[ "$?" == "0" ] || ts_die "Cannot find read-only in $MOUNTPOINT in /proc/self/mountinfo"
+$TS_HELPER_ENOSYS -s mount_setattr -- \
+ "$TS_CMD_MOUNT" --make-slave "$MOUNTPOINT" \
+ >> $TS_OUTPUT 2>> $TS_ERRLOG
+$TS_CMD_FINDMNT -n --kernel --mountpoint "$MOUNTPOINT" -o PROPAGATION >> $TS_OUTPUT
+$TS_CMD_UMOUNT $MOUNTPOINT
+ts_finalize_subtest
+
+
+ts_finalize
+