]> git.ipfire.org Git - thirdparty/util-linux.git/blob - tests/ts/mount/umount-alltargets
tests: split stdout and stderr
[thirdparty/util-linux.git] / tests / ts / mount / umount-alltargets
1 #!/bin/bash
2
3 # Copyright (C) 2013 Karel Zak <kzak@redhat.com>
4
5 TS_TOPDIR="${0%/*}/../.."
6 TS_DESC="umount-all-targets"
7
8 . $TS_TOPDIR/functions.sh
9 ts_init "$*"
10
11 ts_check_test_command "$TS_CMD_MOUNT"
12 ts_check_test_command "$TS_CMD_UMOUNT"
13 ts_check_test_command "$TS_CMD_FDISK"
14
15 ts_skip_nonroot
16 ts_check_prog "mkfs.ext2"
17
18 $TS_CMD_UMOUNT --help | grep -q all-targets
19 [ $? -eq 1 ] && ts_skip "all-targets unsupported"
20
21 has_mtab=$( ts_has_mtab_support )
22 if [ "$has_mtab" == "yes" ]; then
23 [ -L /etc/mtab ] || ts_skip "regular mtab"
24 fi
25
26 # set global variable TS_DEVICE
27 ts_scsi_debug_init dev_size_mb=50
28
29 ts_log "Create partitions"
30 $TS_CMD_FDISK ${TS_DEVICE} &> /dev/null <<EOF
31 n
32 p
33 1
34
35 +10M
36 n
37 p
38 2
39
40 +10M
41 n
42 p
43 3
44
45 +10M
46 n
47 p
48
49 +10M
50 w
51 q
52 EOF
53
54 udevadm settle
55
56 ts_log "Create filesystem A"
57 mkfs.ext2 ${TS_DEVICE}1 &> /dev/null
58 ts_log "Create filesystem B"
59 mkfs.ext2 ${TS_DEVICE}2 &> /dev/null
60 ts_log "Create filesystem C"
61 mkfs.ext2 ${TS_DEVICE}3 &> /dev/null
62 ts_log "Create filesystem D"
63 mkfs.ext2 ${TS_DEVICE}4 &> /dev/null
64
65 udevadm settle
66
67 function multi_mount() {
68 local DEV=$1
69 local MNT=$2
70
71 ts_log "prepare: Mount dev to mnt1"
72 [ -d "${MNT}1" ] || mkdir -p ${MNT}1
73 $TS_CMD_MOUNT $DEV ${MNT}1 >> $TS_OUTPUT 2>> $TS_ERRLOG
74
75 ts_log "prepare: Mount dev to mnt2"
76 [ -d "${MNT}2" ] || mkdir -p ${MNT}2
77 $TS_CMD_MOUNT $DEV ${MNT}2 >> $TS_OUTPUT 2>> $TS_ERRLOG
78
79 ts_log "prepare: Mount /dev/xxx1 to mnt3"
80 [ -d "${MNT}3" ] || mkdir -p ${MNT}3
81 $TS_CMD_MOUNT $DEV ${MNT}3 >> $TS_OUTPUT 2>> $TS_ERRLOG
82
83 udevadm settle
84 }
85
86 # use the same top-level mountpoint for all sub-tests
87 MOUNTPOINT=$TS_MOUNTPOINT
88
89 #
90 # The same device mounted on more places, umount all by mountpoint name
91 #
92 ts_init_subtest "all-targets-mnt"
93 multi_mount ${TS_DEVICE}1 $MOUNTPOINT
94 $TS_CMD_UMOUNT --all-targets ${MOUNTPOINT}1 >> $TS_OUTPUT 2>> $TS_ERRLOG
95 [ $? == 0 ] || ts_log "umount failed"
96 ts_finalize_subtest
97
98 #
99 # The same device mounted on more places, umount all by device name
100 #
101 ts_init_subtest "all-targets-dev"
102 multi_mount ${TS_DEVICE}1 $MOUNTPOINT
103 $TS_CMD_UMOUNT --all-targets ${TS_DEVICE}1 >> $TS_OUTPUT 2>> $TS_ERRLOG
104 [ $? == 0 ] || ts_log "umount failed"
105 ts_finalize_subtest
106
107 #
108 # The same device mounted on more places, one of the mountpoints also contains
109 # sub-mounts. Umount all by one umount all by top-level device name.
110 #
111 ts_init_subtest "all-targets-recursive"
112 multi_mount ${TS_DEVICE}1 $MOUNTPOINT
113 [ -d "${MOUNTPOINT}1/subA" ] || mkdir -p ${MOUNTPOINT}1/subA
114 $TS_CMD_MOUNT ${TS_DEVICE}2 ${MOUNTPOINT}1/subA
115 [ -d "${MOUNTPOINT}1/subA/subAB" ] || mkdir -p ${MOUNTPOINT}1/subA/subAB
116 $TS_CMD_MOUNT ${TS_DEVICE}3 ${MOUNTPOINT}1/subA/subAB
117 [ -d "${MOUNTPOINT}1/subB" ] || mkdir -p ${MOUNTPOINT}1/subB
118 $TS_CMD_MOUNT ${TS_DEVICE}4 ${MOUNTPOINT}1/subB
119 $TS_CMD_UMOUNT --recursive --all-targets ${TS_DEVICE}1 >> $TS_OUTPUT 2>> $TS_ERRLOG
120 [ $? == 0 ] || ts_log "umount failed"
121 ts_finalize_subtest
122
123 ts_log "Success"
124 ts_finalize