]>
Commit | Line | Data |
---|---|---|
c4af75a8 SB |
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 | TS_TOPDIR="${0%/*}/../.." | |
19 | TS_DESC="btrfs (fstab)" | |
20 | ||
21 | . $TS_TOPDIR/functions.sh | |
22 | ts_init "$*" | |
23 | ||
24 | ts_check_test_command "$TS_CMD_MOUNT" | |
25 | ts_check_test_command "$TS_CMD_UMOUNT" | |
26 | ||
27 | ts_skip_nonroot | |
28 | ts_check_losetup | |
29 | ts_check_prog "mkfs.btrfs" | |
30 | ts_check_prog "btrfs" | |
31 | ||
370d31f7 | 32 | # btrfs feature check |
131e5437 RM |
33 | if ! btrfs inspect-internal --help &>/dev/null || \ |
34 | btrfs inspect-internal rootid bla 2>&1 | grep -q "unknown token"; then | |
35 | ts_skip "btrfs too old" | |
36 | fi | |
370d31f7 | 37 | |
c4af75a8 SB |
38 | TS_MOUNTPOINT_ANY="$TS_MOUNTPOINT" |
39 | TS_MOUNTPOINT_CREATE="$TS_MOUNTPOINT-create" | |
40 | TS_MOUNTPOINT_DEFAULT="$TS_MOUNTPOINT-default" | |
41 | TS_MOUNTPOINT_SUBVOL="$TS_MOUNTPOINT-subvol" | |
42 | TS_MOUNTPOINT_SUBVOLID="$TS_MOUNTPOINT-subvolid" | |
43 | TS_MOUNTPOINT_BIND="$TS_MOUNTPOINT-bind" | |
44 | ||
7e927e1d | 45 | ts_device_init 50 |
c4af75a8 SB |
46 | DEVICE=$TS_LODEV |
47 | [ -d "$TS_MOUNTPOINT_CREATE" ] || mkdir -p "$TS_MOUNTPOINT_CREATE" | |
48 | [ -d "$TS_MOUNTPOINT_DEFAULT" ] || mkdir -p "$TS_MOUNTPOINT_DEFAULT" | |
49 | [ -d "$TS_MOUNTPOINT_SUBVOL" ] || mkdir -p "$TS_MOUNTPOINT_SUBVOL" | |
50 | [ -d "$TS_MOUNTPOINT_SUBVOLID" ] || mkdir -p "$TS_MOUNTPOINT_SUBVOLID" | |
51 | [ -d "$TS_MOUNTPOINT_BIND" ] || mkdir -p "$TS_MOUNTPOINT_BIND" | |
1c280706 | 52 | mkfs.btrfs -d single -m single $DEVICE &> /dev/null || ts_die "Cannot make btrfs on $DEVICE" |
c4af75a8 SB |
53 | |
54 | $TS_CMD_MOUNT -o loop "$DEVICE" "$TS_MOUNTPOINT_CREATE" | |
55 | pushd . >/dev/null | |
56 | cd "$TS_MOUNTPOINT_CREATE" | |
57 | mkdir -p d0/dd0/ddd0 | |
58 | cd ./d0/dd0/ddd0 | |
59 | touch file{1..5} | |
60 | btrfs subvol create s1 >/dev/null | |
61 | cd ./s1 | |
62 | touch file{1..5} | |
63 | mkdir bind-point | |
64 | mkdir -p d1/dd1/ddd1 | |
65 | cd ./d1/dd1/ddd1 | |
66 | btrfs subvol create s2 >/dev/null | |
131e5437 | 67 | DEFAULT_SUBVOLID=$(btrfs inspect-internal rootid s2) |
c4af75a8 SB |
68 | btrfs subvol set-default $DEFAULT_SUBVOLID . >/dev/null |
69 | 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) | |
70 | cd ../../../.. | |
71 | mkdir -p d2/dd2/ddd2 | |
72 | cd ./d2/dd2/ddd2 | |
73 | btrfs subvol create s3 >/dev/null | |
74 | mkdir -p s3/bind-mnt | |
75 | popd >/dev/null | |
76 | NON_DEFAULT_SUBVOL=d0/dd0/ddd0/d2/dd2/ddd2/s3 | |
77 | $TS_CMD_UMOUNT "$TS_MOUNTPOINT_CREATE" | |
78 | ||
79 | ||
80 | ts_init_subtest "btrfs" | |
e140506a KZ |
81 | ts_fstab_lock |
82 | ts_fstab_open | |
c4af75a8 SB |
83 | # Tests with fs == btrfs |
84 | # mounting default subvolume, deep in the structure, without entry in fstab | |
e140506a | 85 | ts_fstab_addline "$DEVICE" "$TS_MOUNTPOINT_DEFAULT" "btrfs" "" |
c4af75a8 | 86 | # mounting default subvolume, deep in the structure |
e140506a | 87 | ts_fstab_addline "$DEVICE" "$TS_MOUNTPOINT_SUBVOL" "btrfs" "subvol=$NON_DEFAULT_SUBVOL" |
c4af75a8 | 88 | # mounting non-default subvolume |
e140506a | 89 | ts_fstab_addline "$DEVICE" "$TS_MOUNTPOINT_SUBVOLID" "btrfs" "subvolid=$NON_DEFAULT_SUBVOLID" |
c4af75a8 | 90 | # test bind mount pointing to subvolume root |
e140506a KZ |
91 | ts_fstab_addline "$TS_MOUNTPOINT_SUBVOLID" "$TS_MOUNTPOINT_BIND" "auto" "bind" |
92 | ts_fstab_close | |
c4af75a8 | 93 | |
b59c3bf2 SB |
94 | $TS_CMD_MOUNT -a >> $TS_OUTPUT 2>&1 |
95 | $TS_CMD_MOUNT -a >> $TS_OUTPUT 2>&1 | |
c4af75a8 | 96 | |
b59c3bf2 SB |
97 | $TS_CMD_UMOUNT "$TS_MOUNTPOINT_BIND" >> $TS_OUTPUT 2>&1 |
98 | $TS_CMD_UMOUNT "$TS_MOUNTPOINT_DEFAULT" >> $TS_OUTPUT 2>&1 | |
99 | $TS_CMD_UMOUNT "$TS_MOUNTPOINT_SUBVOL" >> $TS_OUTPUT 2>&1 | |
100 | $TS_CMD_UMOUNT "$TS_MOUNTPOINT_SUBVOLID" >> $TS_OUTPUT 2>&1 | |
c4af75a8 SB |
101 | |
102 | # check that everything was unmounted | |
b59c3bf2 | 103 | $TS_CMD_MOUNT | grep "$TS_MOUNTPOINT_ANY" >> $TS_OUTPUT 2>&1 |
c4af75a8 | 104 | |
e140506a | 105 | ts_fstab_clean # this unlock too |
c4af75a8 SB |
106 | ts_log "Success" |
107 | ts_finalize_subtest | |
108 | ||
e140506a | 109 | |
c4af75a8 | 110 | ts_init_subtest "auto" |
e140506a KZ |
111 | ts_fstab_lock |
112 | ts_fstab_open | |
c4af75a8 SB |
113 | # Tests with fs == auto |
114 | # mounting default subvolume, deep in the structure, without entry in fstab | |
e140506a | 115 | ts_fstab_addline "$DEVICE" "$TS_MOUNTPOINT_DEFAULT" "auto" "" |
c4af75a8 | 116 | # mounting default subvolume, deep in the structure |
e140506a | 117 | ts_fstab_addline "$DEVICE" "$TS_MOUNTPOINT_SUBVOL" "auto" "subvol=$NON_DEFAULT_SUBVOL" |
c4af75a8 | 118 | # mounting non-default subvolume |
e140506a | 119 | ts_fstab_addline "$DEVICE" "$TS_MOUNTPOINT_SUBVOLID" "auto" "subvolid=$NON_DEFAULT_SUBVOLID" |
c4af75a8 | 120 | # test bind mount pointing to subvolume sub-directory |
e140506a KZ |
121 | ts_fstab_addline "$TS_MOUNTPOINT_SUBVOL/bind-mnt" "$TS_MOUNTPOINT_BIND" "auto" "bind" |
122 | ts_fstab_close | |
c4af75a8 | 123 | |
b59c3bf2 SB |
124 | $TS_CMD_MOUNT -a >> $TS_OUTPUT 2>&1 |
125 | $TS_CMD_MOUNT -a >> $TS_OUTPUT 2>&1 | |
c4af75a8 | 126 | |
b59c3bf2 SB |
127 | $TS_CMD_UMOUNT "$TS_MOUNTPOINT_BIND" >> $TS_OUTPUT 2>&1 |
128 | $TS_CMD_UMOUNT "$TS_MOUNTPOINT_DEFAULT" >> $TS_OUTPUT 2>&1 | |
129 | $TS_CMD_UMOUNT "$TS_MOUNTPOINT_SUBVOL" >> $TS_OUTPUT 2>&1 | |
130 | $TS_CMD_UMOUNT "$TS_MOUNTPOINT_SUBVOLID" >> $TS_OUTPUT 2>&1 | |
c4af75a8 SB |
131 | |
132 | # check that everything was unmounted | |
b59c3bf2 | 133 | $TS_CMD_MOUNT | grep "$TS_MOUNTPOINT_ANY" >> $TS_OUTPUT 2>&1 |
c4af75a8 | 134 | |
e140506a | 135 | ts_fstab_clean # this unlock too |
c4af75a8 SB |
136 | ts_log "Success" |
137 | ts_finalize_subtest | |
138 | ||
139 | ||
140 | ts_finalize | |
141 |