Blame SOURCES/0020-tests-Use-wait_for_dev_to_-functions.patch

003ee8
From f72968f996372d923dbeded302395d8f08445b31 Mon Sep 17 00:00:00 2001
003ee8
From: "Brian C. Lane" <bcl@redhat.com>
003ee8
Date: Fri, 7 Aug 2015 11:43:17 -0700
003ee8
Subject: [PATCH 20/20] tests: Use wait_for_dev_to_ functions
003ee8
003ee8
Recent changes to udev have made some long-standing problems appear more
003ee8
frequently. udev executes various actions when changes are made to
003ee8
devices. Sometimes this can result in device nodes not appearing
003ee8
immediately. Other times it can result in EBUSY being returned. This
003ee8
patch only addresses devices that are slow to appear/disappear.
003ee8
003ee8
It is best to use the wait_for_dev_to_appear_ and
003ee8
wait_for_dev_to_disappear_ functions than to test for existance. These
003ee8
will loop and wait for up to 2 seconds for it to appear.
003ee8
003ee8
This also changes t9041 to fail if mkfs doesn't work since using skip
003ee8
here may hide cases when the device node doesn't appear.
003ee8
003ee8
(cherry picked from commit 1dc13965e1108ab513662450e0171c3ea3af3bd1)
003ee8
---
003ee8
 tests/t1100-busy-label.sh                       | 10 ++--------
003ee8
 tests/t1102-loop-label.sh                       | 25 +++++--------------------
003ee8
 tests/t2320-dos-extended-noclobber.sh           |  1 +
003ee8
 tests/t6001-psep.sh                             |  4 ++--
003ee8
 tests/t6004-dm-many-partitions.sh               |  6 ++----
003ee8
 tests/t6006-dm-512b-sectors.sh                  |  1 +
003ee8
 tests/t6100-mdraid-partitions.sh                |  5 +++--
003ee8
 tests/t9041-undetected-in-use-16th-partition.sh |  2 +-
003ee8
 8 files changed, 17 insertions(+), 37 deletions(-)
003ee8
003ee8
diff --git a/tests/t1100-busy-label.sh b/tests/t1100-busy-label.sh
003ee8
index 4e256d3..70e8ede 100755
003ee8
--- a/tests/t1100-busy-label.sh
003ee8
+++ b/tests/t1100-busy-label.sh
003ee8
@@ -27,22 +27,16 @@ dev=$(cat dev-name)
003ee8
 
003ee8
 parted -s "$dev" mklabel msdos mkpart primary fat32 1 40 > out 2>&1 || fail=1
003ee8
 compare /dev/null out || fail=1
003ee8
-mkfs.vfat ${dev}1 || skip_ "mkfs.vfat failed"
003ee8
+wait_for_dev_to_appear_ ${dev}1 || fail=1
003ee8
+mkfs.vfat ${dev}1 || fail=1
003ee8
 
003ee8
 mount_point="`pwd`/mnt"
003ee8
 
003ee8
 # Be sure to unmount upon interrupt, failure, etc.
003ee8
 cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; }
003ee8
 
003ee8
-# There's a race condition here: on udev-based systems, the partition#1
003ee8
-# device, ${dev}1 (i.e., /dev/sdd1) is not created immediately, and
003ee8
-# without some delay, this mount command would fail.  Using a flash card
003ee8
-# as $dev, the loop below typically iterates 7-20 times.
003ee8
-
003ee8
 # create mount point dir. and mount the just-created partition on it
003ee8
 mkdir $mount_point || fail=1
003ee8
-i=0; while :; do test -e "${dev}1" && break; test $i = 90 && break;
003ee8
-  i=$(expr $i + 1); done;
003ee8
 mount "${dev}1" $mount_point || fail=1
003ee8
 
003ee8
 # now that a partition is mounted, mklabel attempt must fail
003ee8
diff --git a/tests/t1102-loop-label.sh b/tests/t1102-loop-label.sh
003ee8
index 9752002..68b9af4 100644
003ee8
--- a/tests/t1102-loop-label.sh
003ee8
+++ b/tests/t1102-loop-label.sh
003ee8
@@ -44,15 +44,9 @@ mv out o2 && sed -e "s,$dev,DEVICE,;s/  *$//" o2 > out
003ee8
 
003ee8
 compare exp out || fail=1
003ee8
 parted -s $dev rm 1 || fail=1
003ee8
-if [ -e ${dev}1 ]; then
003ee8
-    echo "Partition should not exist on loop device"
003ee8
-    fail=1
003ee8
-fi
003ee8
+wait_for_dev_to_disappear_ ${dev}1 2 || fail=1
003ee8
 partprobe $dev || fail=1
003ee8
-if [ -e ${dev}1 ]; then
003ee8
-    echo "Partition should not exist on loop device"
003ee8
-    fail=1
003ee8
-fi
003ee8
+wait_for_dev_to_disappear_ ${dev}1 2 || fail=1
003ee8
 
003ee8
 mount_point="`pwd`/mnt"
003ee8
 
003ee8
@@ -80,24 +74,15 @@ umount "$mount_point"
003ee8
 
003ee8
 # make sure partprobe cleans up stale partition devices
003ee8
 parted -s $dev mklabel msdos mkpart primary ext2 0% 100% || fail=1
003ee8
-if [ ! -e ${dev}1 ]; then
003ee8
-    echo "Partition doesn't exist on loop device"
003ee8
-    fail=1
003ee8
-fi
003ee8
+wait_for_dev_to_appear_ ${dev}1 || fail=1
003ee8
 
003ee8
 mke2fs -F $dev
003ee8
 partprobe $dev || fail=1
003ee8
-if [ -e ${dev}1 ]; then
003ee8
-    echo "Partition should not exist on loop device"
003ee8
-    fail=1
003ee8
-fi
003ee8
+wait_for_dev_to_disappear_ ${dev}1 2 || fail=1
003ee8
 
003ee8
 # make sure new loop label removes old partitions > 1
003ee8
 parted -s $dev mklabel msdos mkpart primary ext2 0% 50% mkpart primary ext2 50% 100% || fail=1
003ee8
 parted -s $dev mklabel loop || fail=1
003ee8
-if [ -e ${dev}2 ]; then
003ee8
-    echo "Partition 2 not removed"
003ee8
-    fail=1
003ee8
-fi
003ee8
+wait_for_dev_to_disappear_ ${dev}2 2 || fail=1
003ee8
 
003ee8
 Exit $fail
003ee8
diff --git a/tests/t2320-dos-extended-noclobber.sh b/tests/t2320-dos-extended-noclobber.sh
003ee8
index 6f3dfff..bbc4f26 100644
003ee8
--- a/tests/t2320-dos-extended-noclobber.sh
003ee8
+++ b/tests/t2320-dos-extended-noclobber.sh
003ee8
@@ -32,6 +32,7 @@ scsi_dev=$(cat dev-name)
003ee8
 parted -s $scsi_dev mklabel msdos || fail=1
003ee8
 parted -s $scsi_dev mkpart extended 1 5 > out 2>&1 || fail=1
003ee8
 parted -s $scsi_dev mkpart primary 5 10 > out 2>&1 || fail=1
003ee8
+wait_for_dev_to_appear_ ${scsi_dev}1 || fail=1
003ee8
 
003ee8
 # Make sure the size of the extended partition is correct.
003ee8
 # 2 sectors for 512b and 1 sector for larger. /sys/.../size is in
003ee8
diff --git a/tests/t6001-psep.sh b/tests/t6001-psep.sh
003ee8
index f15090a..4c758e8 100644
003ee8
--- a/tests/t6001-psep.sh
003ee8
+++ b/tests/t6001-psep.sh
003ee8
@@ -54,7 +54,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
003ee8
 compare /dev/null out || fail=1
003ee8
 
003ee8
 #make sure device name is correct
003ee8
-test -e ${dev}p1 || fail=1
003ee8
+wait_for_dev_to_appear_ ${dev}p1 || fail=1
003ee8
 
003ee8
 #repeat on name not ending in a digit
003ee8
 # setup: create a mapping
003ee8
@@ -66,7 +66,7 @@ parted -s $dev mklabel msdos mkpart primary fat32 1m 5m > out 2>&1 || fail=1
003ee8
 compare /dev/null out || fail=1
003ee8
 
003ee8
 #make sure device name is correct
003ee8
-test -e ${dev}1 || fail=1
003ee8
+wait_for_dev_to_appear_ ${dev}1 || fail=1
003ee8
 
003ee8
 if [ -n "$fail" ]; then
003ee8
     ls /dev/mapper
003ee8
diff --git a/tests/t6004-dm-many-partitions.sh b/tests/t6004-dm-many-partitions.sh
003ee8
index 8d291ef..7ebc48a 100755
003ee8
--- a/tests/t6004-dm-many-partitions.sh
003ee8
+++ b/tests/t6004-dm-many-partitions.sh
003ee8
@@ -49,10 +49,8 @@ parted -m -a min -s /dev/mapper/$dm_name mklabel gpt $cmd > /dev/null 2>&1 || fa
003ee8
 
003ee8
 # Make sure all the partitions appeared under /dev/mapper/
003ee8
 for ((i=1; i<=$n_partitions; i+=1)); do
003ee8
-    if [ ! -e "/dev/mapper/${dm_name}p$i" ]; then
003ee8
-        fail=1
003ee8
-        break
003ee8
-    fi
003ee8
+    wait_for_dev_to_appear_ "/dev/mapper/${dm_name}p$i" || { fail=1; break; }
003ee8
+
003ee8
     # remove the partitions as we go, otherwise cleanup won't work.
003ee8
     dmsetup remove /dev/mapper/${dm_name}p$i
003ee8
 done
003ee8
diff --git a/tests/t6006-dm-512b-sectors.sh b/tests/t6006-dm-512b-sectors.sh
003ee8
index 31abba9..c3045af 100644
003ee8
--- a/tests/t6006-dm-512b-sectors.sh
003ee8
+++ b/tests/t6006-dm-512b-sectors.sh
003ee8
@@ -60,6 +60,7 @@ dev="/dev/mapper/$linear_"
003ee8
 # Create msdos partition table with a partition from 1MiB to 100MiB
003ee8
 parted -s $dev mklabel msdos mkpart primary ext2 1MiB 101MiB > out 2>&1 || fail=1
003ee8
 compare /dev/null out || fail=1
003ee8
+wait_for_dev_to_appear_ ${dev}1 || fail=1
003ee8
 
003ee8
 # The size of the partition should be 100MiB, or 204800 512b sectors
003ee8
 p1_size=$(blockdev --getsz ${dev}1) || framework_failure
003ee8
diff --git a/tests/t6100-mdraid-partitions.sh b/tests/t6100-mdraid-partitions.sh
003ee8
index 6f08442..dbc5986 100755
003ee8
--- a/tests/t6100-mdraid-partitions.sh
003ee8
+++ b/tests/t6100-mdraid-partitions.sh
003ee8
@@ -54,13 +54,14 @@ parted -s $md_dev mklabel gpt \
003ee8
 compare /dev/null out || fail=1
003ee8
 
003ee8
 # Verify that kernel has been informed about the second device.
003ee8
-grep "${md_name}p2" /proc/partitions || { fail=1; cat /proc/partitions; }
003ee8
+wait_for_dev_to_appear_ ${md_dev}p2 || { fail=1; cat /proc/partitions; }
003ee8
 
003ee8
 # Remove partitions from the raid device.
003ee8
 parted -s $md_dev rm 2 rm 1 > out 2>&1 || fail=1
003ee8
 compare /dev/null out || fail=1
003ee8
 
003ee8
 # Verify that kernel has been informed about those removals.
003ee8
-grep "${md_name}p[12]" /proc/partitions && { fail=1; cat /proc/partitions; }
003ee8
+wait_for_dev_to_disappear_ ${md_dev}p1 2 || { fail=1; cat /proc/partitions; }
003ee8
+wait_for_dev_to_disappear_ ${md_dev}p2 2 || { fail=1; cat /proc/partitions; }
003ee8
 
003ee8
 Exit $fail
003ee8
diff --git a/tests/t9041-undetected-in-use-16th-partition.sh b/tests/t9041-undetected-in-use-16th-partition.sh
003ee8
index edaae1b..673e508 100644
003ee8
--- a/tests/t9041-undetected-in-use-16th-partition.sh
003ee8
+++ b/tests/t9041-undetected-in-use-16th-partition.sh
003ee8
@@ -72,7 +72,7 @@ wait_for_dev_to_appear_ ${scsi_dev}16 || fail_ ${scsi_dev}16 did not appear
003ee8
 
003ee8
 partitions="${scsi_dev}14 ${scsi_dev}15 ${scsi_dev}16"
003ee8
 for i in $partitions; do
003ee8
-  mkfs.ext3 $i || skip_ mkfs.ext3 $i failed
003ee8
+  mkfs.ext3 $i || fail=1
003ee8
 done
003ee8
 
003ee8
 # be sure to unmount upon interrupt, failure, etc.
003ee8
-- 
003ee8
2.4.3
003ee8