]>
Commit | Line | Data |
---|---|---|
c886eb9d AM |
1 | From f72968f996372d923dbeded302395d8f08445b31 Mon Sep 17 00:00:00 2001 |
2 | From: "Brian C. Lane" <bcl@redhat.com> | |
3 | Date: Fri, 7 Aug 2015 11:43:17 -0700 | |
4 | Subject: [PATCH 20/20] tests: Use wait_for_dev_to_ functions | |
5 | ||
6 | Recent changes to udev have made some long-standing problems appear more | |
7 | frequently. udev executes various actions when changes are made to | |
8 | devices. Sometimes this can result in device nodes not appearing | |
9 | immediately. Other times it can result in EBUSY being returned. This | |
10 | patch only addresses devices that are slow to appear/disappear. | |
11 | ||
12 | It is best to use the wait_for_dev_to_appear_ and | |
13 | wait_for_dev_to_disappear_ functions than to test for existance. These | |
14 | will loop and wait for up to 2 seconds for it to appear. | |
15 | ||
16 | This also changes t9041 to fail if mkfs doesn't work since using skip | |
17 | here may hide cases when the device node doesn't appear. | |
18 | ||
19 | (cherry picked from commit 1dc13965e1108ab513662450e0171c3ea3af3bd1) | |
20 | --- | |
21 | tests/t1100-busy-label.sh | 10 ++-------- | |
22 | tests/t1102-loop-label.sh | 25 +++++-------------------- | |
23 | tests/t2320-dos-extended-noclobber.sh | 1 + | |
24 | tests/t6001-psep.sh | 4 ++-- | |
25 | tests/t6004-dm-many-partitions.sh | 6 ++---- | |
26 | tests/t6006-dm-512b-sectors.sh | 1 + | |
27 | tests/t6100-mdraid-partitions.sh | 5 +++-- | |
28 | tests/t9041-undetected-in-use-16th-partition.sh | 2 +- | |
29 | 8 files changed, 17 insertions(+), 37 deletions(-) | |
30 | ||
31 | diff --git a/tests/t1100-busy-label.sh b/tests/t1100-busy-label.sh | |
32 | index 4e256d3..70e8ede 100755 | |
33 | --- a/tests/t1100-busy-label.sh | |
34 | +++ b/tests/t1100-busy-label.sh | |
35 | @@ -27,22 +27,16 @@ dev=$(cat dev-name) | |
36 | ||
37 | parted -s "$dev" mklabel msdos mkpart primary fat32 1 40 > out 2>&1 || fail=1 | |
38 | compare /dev/null out || fail=1 | |
39 | -mkfs.vfat ${dev}1 || skip_ "mkfs.vfat failed" | |
40 | +wait_for_dev_to_appear_ ${dev}1 || fail=1 | |
41 | +mkfs.vfat ${dev}1 || fail=1 | |
42 | ||
43 | mount_point="`pwd`/mnt" | |
44 | ||
45 | # Be sure to unmount upon interrupt, failure, etc. | |
46 | cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; } | |
47 | ||
48 | -# There's a race condition here: on udev-based systems, the partition#1 | |
49 | -# device, ${dev}1 (i.e., /dev/sdd1) is not created immediately, and | |
50 | -# without some delay, this mount command would fail. Using a flash card | |
51 | -# as $dev, the loop below typically iterates 7-20 times. | |
52 | - | |
53 | # create mount point dir. and mount the just-created partition on it | |
54 | mkdir $mount_point || fail=1 | |
55 | -i=0; while :; do test -e "${dev}1" && break; test $i = 90 && break; | |
56 | - i=$(expr $i + 1); done; | |
57 | mount "${dev}1" $mount_point || fail=1 | |
58 | ||
59 | # now that a partition is mounted, mklabel attempt must fail | |
60 | diff --git a/tests/t1102-loop-label.sh b/tests/t1102-loop-label.sh | |
61 | index 9752002..68b9af4 100644 | |
62 | --- a/tests/t1102-loop-label.sh | |
63 | +++ b/tests/t1102-loop-label.sh | |
64 | @@ -44,15 +44,9 @@ mv out o2 && sed -e "s,$dev,DEVICE,;s/ *$//" o2 > out | |
65 | ||
66 | compare exp out || fail=1 | |
67 | parted -s $dev rm 1 || fail=1 | |
68 | -if [ -e ${dev}1 ]; then | |
69 | - echo "Partition should not exist on loop device" | |
70 | - fail=1 | |
71 | -fi | |
72 | +wait_for_dev_to_disappear_ ${dev}1 2 || fail=1 | |
73 | partprobe $dev || fail=1 | |
74 | -if [ -e ${dev}1 ]; then | |
75 | - echo "Partition should not exist on loop device" | |
76 | - fail=1 | |
77 | -fi | |
78 | +wait_for_dev_to_disappear_ ${dev}1 2 || fail=1 | |
79 | ||
80 | mount_point="`pwd`/mnt" | |
81 | ||
82 | @@ -80,24 +74,15 @@ umount "$mount_point" | |
83 | ||
84 | # make sure partprobe cleans up stale partition devices | |
85 | parted -s $dev mklabel msdos mkpart primary ext2 0% 100% || fail=1 | |
86 | -if [ ! -e ${dev}1 ]; then | |
87 | - echo "Partition doesn't exist on loop device" | |
88 | - fail=1 | |
89 | -fi | |
90 | +wait_for_dev_to_appear_ ${dev}1 || fail=1 | |
91 | ||
92 | mke2fs -F $dev | |
93 | partprobe $dev || fail=1 | |
94 | -if [ -e ${dev}1 ]; then | |
95 | - echo "Partition should not exist on loop device" | |
96 | - fail=1 | |
97 | -fi | |
98 | +wait_for_dev_to_disappear_ ${dev}1 2 || fail=1 | |
99 | ||
100 | # make sure new loop label removes old partitions > 1 | |
101 | parted -s $dev mklabel msdos mkpart primary ext2 0% 50% mkpart primary ext2 50% 100% || fail=1 | |
102 | parted -s $dev mklabel loop || fail=1 | |
103 | -if [ -e ${dev}2 ]; then | |
104 | - echo "Partition 2 not removed" | |
105 | - fail=1 | |
106 | -fi | |
107 | +wait_for_dev_to_disappear_ ${dev}2 2 || fail=1 | |
108 | ||
109 | Exit $fail | |
110 | diff --git a/tests/t2320-dos-extended-noclobber.sh b/tests/t2320-dos-extended-noclobber.sh | |
111 | index 6f3dfff..bbc4f26 100644 | |
112 | --- a/tests/t2320-dos-extended-noclobber.sh | |
113 | +++ b/tests/t2320-dos-extended-noclobber.sh | |
114 | @@ -32,6 +32,7 @@ scsi_dev=$(cat dev-name) | |
115 | parted -s $scsi_dev mklabel msdos || fail=1 | |
116 | parted -s $scsi_dev mkpart extended 1 5 > out 2>&1 || fail=1 | |
117 | parted -s $scsi_dev mkpart primary 5 10 > out 2>&1 || fail=1 | |
118 | +wait_for_dev_to_appear_ ${scsi_dev}1 || fail=1 | |
119 | ||
120 | # Make sure the size of the extended partition is correct. | |
121 | # 2 sectors for 512b and 1 sector for larger. /sys/.../size is in | |
122 | diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh | |
123 | index f15090a..4c758e8 100644 | |
124 | --- a/tests/t6001-psep.sh | |
125 | +++ b/tests/t6001-psep.sh | |
126 | @@ -54,7 +54,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1 | |
127 | compare /dev/null out || fail=1 | |
128 | ||
129 | #make sure device name is correct | |
130 | -test -e ${dev}p1 || fail=1 | |
131 | +wait_for_dev_to_appear_ ${dev}p1 || fail=1 | |
132 | ||
133 | #repeat on name not ending in a digit | |
134 | # setup: create a mapping | |
135 | @@ -66,7 +66,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1 | |
136 | compare /dev/null out || fail=1 | |
137 | ||
138 | #make sure device name is correct | |
139 | -test -e ${dev}1 || fail=1 | |
140 | +wait_for_dev_to_appear_ ${dev}1 || fail=1 | |
141 | ||
142 | if [ -n "$fail" ]; then | |
143 | ls /dev/mapper | |
144 | diff --git a/tests/t6004-dm-many-partitions.sh b/tests/t6004-dm-many-partitions.sh | |
145 | index 8d291ef..7ebc48a 100755 | |
146 | --- a/tests/t6004-dm-many-partitions.sh | |
147 | +++ b/tests/t6004-dm-many-partitions.sh | |
148 | @@ -49,10 +49,8 @@ parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fa | |
149 | ||
150 | # Make sure all the partitions appeared under /dev/mapper/ | |
151 | for ((i=1; i<=$n_partitions; i+=1)); do | |
152 | - if [ ! -e "/dev/mapper/${dm_name}p$i" ]; then | |
153 | - fail=1 | |
154 | - break | |
155 | - fi | |
156 | + wait_for_dev_to_appear_ "/dev/mapper/${dm_name}p$i" || { fail=1; break; } | |
157 | + | |
158 | # remove the partitions as we go, otherwise cleanup won't work. | |
159 | dmsetup remove /dev/mapper/${dm_name}p$i | |
160 | done | |
161 | diff --git a/tests/t6006-dm-512b-sectors.sh b/tests/t6006-dm-512b-sectors.sh | |
162 | index 31abba9..c3045af 100644 | |
163 | --- a/tests/t6006-dm-512b-sectors.sh | |
164 | +++ b/tests/t6006-dm-512b-sectors.sh | |
165 | @@ -60,6 +60,7 @@ dev="/dev/mapper/$linear_" | |
166 | # Create msdos partition table with a partition from 1MiB to 100MiB | |
167 | parted -s $dev mklabel msdos mkpart primary ext2 1MiB 101MiB > out 2>&1 || fail=1 | |
168 | compare /dev/null out || fail=1 | |
169 | +wait_for_dev_to_appear_ ${dev}1 || fail=1 | |
170 | ||
171 | # The size of the partition should be 100MiB, or 204800 512b sectors | |
172 | p1_size=$(blockdev --getsz ${dev}1) || framework_failure | |
173 | diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh | |
174 | index 6f08442..dbc5986 100755 | |
175 | --- a/tests/t6100-mdraid-partitions.sh | |
176 | +++ b/tests/t6100-mdraid-partitions.sh | |
177 | @@ -54,13 +54,14 @@ parted -s $md_dev mklabel gpt \ | |
178 | compare /dev/null out || fail=1 | |
179 | ||
180 | # Verify that kernel has been informed about the second device. | |
181 | -grep "${md_name}p2" /proc/partitions || { fail=1; cat /proc/partitions; } | |
182 | +wait_for_dev_to_appear_ ${md_dev}p2 || { fail=1; cat /proc/partitions; } | |
183 | ||
184 | # Remove partitions from the raid device. | |
185 | parted -s $md_dev rm 2 rm 1 > out 2>&1 || fail=1 | |
186 | compare /dev/null out || fail=1 | |
187 | ||
188 | # Verify that kernel has been informed about those removals. | |
189 | -grep "${md_name}p[12]" /proc/partitions && { fail=1; cat /proc/partitions; } | |
190 | +wait_for_dev_to_disappear_ ${md_dev}p1 2 || { fail=1; cat /proc/partitions; } | |
191 | +wait_for_dev_to_disappear_ ${md_dev}p2 2 || { fail=1; cat /proc/partitions; } | |
192 | ||
193 | Exit $fail | |
194 | diff --git a/tests/t9041-undetected-in-use-16th-partition.sh b/tests/t9041-undetected-in-use-16th-partition.sh | |
195 | index edaae1b..673e508 100644 | |
196 | --- a/tests/t9041-undetected-in-use-16th-partition.sh | |
197 | +++ b/tests/t9041-undetected-in-use-16th-partition.sh | |
198 | @@ -72,7 +72,7 @@ wait_for_dev_to_appear_ ${scsi_dev}16 || fail_ ${scsi_dev}16 did not appear | |
199 | ||
200 | partitions="${scsi_dev}14 ${scsi_dev}15 ${scsi_dev}16" | |
201 | for i in $partitions; do | |
202 | - mkfs.ext3 $i || skip_ mkfs.ext3 $i failed | |
203 | + mkfs.ext3 $i || fail=1 | |
204 | done | |
205 | ||
206 | # be sure to unmount upon interrupt, failure, etc. | |
207 | -- | |
208 | 2.4.3 | |
209 |