]> git.ipfire.org Git - thirdparty/util-linux.git/blob - tests/ts/libmount/loop
b52b7476af93190a5b68372a9170e8da84cba372
[thirdparty/util-linux.git] / tests / ts / libmount / loop
1 #!/bin/bash
2
3 #
4 # Copyright (C) 2016 Stanislav Brabec <sbrabec@suse.cz>
5 #
6 # This file is part of util-linux.
7 #
8 # This file is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
12 #
13 # This file is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17 #
18
19 TS_TOPDIR="${0%/*}/../.."
20 TS_DESC="losetup-loop"
21
22 . $TS_TOPDIR/functions.sh
23 ts_init "$*"
24
25 ts_check_test_command "$TS_CMD_MOUNT"
26 ts_check_test_command "$TS_CMD_FINDMNT"
27 ts_check_test_command "$TS_CMD_LOSETUP"
28
29 ts_skip_nonroot
30 ts_check_losetup
31 ts_check_prog "mkfs.ext3"
32
33 function verify_mount_dev {
34 local dev=$1
35 local mp=$2
36 local dev_mounted=$($TS_CMD_FINDMNT -no SOURCE --mountpoint "$mp")
37
38 if test "$dev" != "$dev_mounted" ; then
39 echo "Mounted incorrect device: have '$dev_mounted', want '$dev'" >&2
40 return 1
41 fi
42 }
43
44 #
45 # file-* tests: Backing file is a regular file
46 #
47 BACKFILE=$(ts_image_init 10)
48
49 mkfs.ext3 -F $BACKFILE &> /dev/null || ts_die "Cannot make ext3 on $BACKFILE"
50
51 # All tests are separated by "udevadm settle" because loop device exists some time after
52 # "losetup -d". This device confuses some tests. And find-race-condition, tests,
53 # whether re-use of this device works.
54 udevadm settle
55
56 ts_init_subtest "file"
57 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
58 $TS_CMD_MOUNT "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
59 $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
60 udevadm settle
61 ts_log "Success"
62 ts_finalize_subtest
63
64 ts_init_subtest "file-o-loop"
65 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
66 $TS_CMD_MOUNT -oloop "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
67 $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
68 udevadm settle
69 ts_log "Success"
70 ts_finalize_subtest
71
72 ts_init_subtest "dev-loop"
73 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
74 LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show $BACKFILE 2>> $TS_OUTPUT )
75 $TS_CMD_MOUNT $LODEV "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
76 verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
77 $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
78 $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1
79 udevadm settle
80 ts_log "Success"
81 ts_finalize_subtest
82
83 ts_init_subtest "o-loop-val"
84 if [ "$TS_PARALLEL" = "yes" ]; then
85 # There is a race in $LODEV is usage
86 ts_skip_subtest "no-reentrant"
87 else
88 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
89 LODEV=$( $TS_CMD_LOSETUP --find 2>> $TS_OUTPUT )
90 $TS_CMD_MOUNT -oloop=$LODEV "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
91 verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
92 $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
93 udevadm settle
94 ts_log "Success"
95 ts_finalize_subtest
96 fi
97
98 ts_init_subtest "reuse"
99 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
100 LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show "$BACKFILE" 2>> $TS_OUTPUT )
101 $TS_CMD_MOUNT "$BACKFILE" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
102 verify_mount_dev "$LODEV" "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
103 $TS_CMD_UMOUNT "$TS_MOUNTPOINT" >> $TS_OUTPUT 2>&1
104 $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1
105 udevadm settle
106 ts_log "Success"
107 ts_finalize_subtest
108
109 ts_init_subtest "conflict"
110 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
111 LODEV=$( $TS_CMD_LOSETUP --find --nooverlap --show --offset=1000 "$BACKFILE" 2>> $TS_OUTPUT )
112 $TS_CMD_MOUNT "$BACKFILE" "$TS_MOUNTPOINT" 2>&1 \
113 | sed 's/:.*:/: <target>/; s/for .*/for <source>/' > $TS_OUTPUT
114 $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1
115 udevadm settle
116 ts_log "Success"
117 ts_finalize_subtest
118
119 ts_init_subtest "o-loop-val-initialized"
120 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
121 LODEV=$( $TS_CMD_LOSETUP --show -f "$BACKFILE" 2>>$TS_OUTPUT)
122 $TS_CMD_MOUNT -oloop=$LODEV "$BACKFILE" "$TS_MOUNTPOINT" 2>&1 \
123 | sed 's/:.*:/: <target>/; s/for .*/for <source>/' > $TS_OUTPUT
124 $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1
125 udevadm settle
126 ts_log "Success"
127 ts_finalize_subtest
128
129 ts_init_subtest "o-loop-val-conflict"
130 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
131 cp "$BACKFILE" "$BACKFILE"-2
132 LODEV=$( $TS_CMD_LOSETUP --show -f "$BACKFILE"-2 2>> $TS_OUTPUT)
133 $TS_CMD_MOUNT -oloop=$LODEV "$BACKFILE" "$TS_MOUNTPOINT" 2>&1 \
134 | sed 's/:.*:/: <target>/; s/for .*/for <source>/' > $TS_OUTPUT
135 $TS_CMD_LOSETUP --detach $LODEV >> $TS_OUTPUT 2>&1
136 rm "$BACKFILE"-2
137 udevadm settle
138 ts_log "Success"
139 ts_finalize_subtest
140
141 ts_log "Success"
142 ts_finalize