From: "Brian C. Lane" <bcl@redhat.com>
Date: Fri, 7 Aug 2015 11:43:17 -0700
Subject: tests: Use wait_for_dev_to_ functions
For: upstream code
Patch-mainline: v3.3
Git-commit: db1728e6402a27fe64e8e132f810c22160ab8bcc

Recent changes to udev have made some long-standing problems appear more
frequently. udev executes various actions when changes are made to
devices. Sometimes this can result in device nodes not appearing
immediately. Other times it can result in EBUSY being returned. This
patch only addresses devices that are slow to appear/disappear.

It is best to use the wait_for_dev_to_appear_ and
wait_for_dev_to_disappear_ functions than to test for existance. These
will loop and wait for up to 2 seconds for it to appear.

This also changes t9041 to fail if mkfs doesn't work since using skip
here may hide cases when the device node doesn't appear.

[sparschauer: remove hunks for non-existing tests]
Signed-off-by: Sebastian Parschauer <sparschauer@suse.de>
---
 tests/t1100-busy-label.sh                       |   10 ++--------
 tests/t6001-psep.sh                             |    4 ++--
 tests/t6100-mdraid-partitions.sh                |    5 +++--
 tests/t9041-undetected-in-use-16th-partition.sh |    2 +-
 4 files changed, 8 insertions(+), 13 deletions(-)

--- a/tests/t1100-busy-label.sh
+++ b/tests/t1100-busy-label.sh
@@ -27,22 +27,16 @@ dev=$(cat dev-name)
 
 parted -s "$dev" mklabel msdos mkpart primary fat32 1 40 > out 2>&1 || fail=1
 compare /dev/null out || fail=1
-mkfs.vfat ${dev}1 || skip_ "mkfs.vfat failed"
+wait_for_dev_to_appear_ ${dev}1 || fail=1
+mkfs.vfat ${dev}1 || fail=1
 
 mount_point="`pwd`/mnt"
 
 # Be sure to unmount upon interrupt, failure, etc.
 cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; }
 
-# There's a race condition here: on udev-based systems, the partition#1
-# device, ${dev}1 (i.e., /dev/sdd1) is not created immediately, and
-# without some delay, this mount command would fail.  Using a flash card
-# as $dev, the loop below typically iterates 7-20 times.
-
 # create mount point dir. and mount the just-created partition on it
 mkdir $mount_point || fail=1
-i=0; while :; do test -e "${dev}1" && break; test $i = 90 && break;
-  i=$(expr $i + 1); done;
 mount "${dev}1" $mount_point || fail=1
 
 # now that a partition is mounted, mklabel attempt must fail
--- a/tests/t6001-psep.sh
+++ b/tests/t6001-psep.sh
@@ -54,7 +54,7 @@ parted -s $dev mklabel msdos mkpart prim
 compare /dev/null out || fail=1
 
 #make sure device name is correct
-test -e ${dev}p1 || fail=1
+wait_for_dev_to_appear_ ${dev}p1 || fail=1
 
 #repeat on name not ending in a digit
 # setup: create a mapping
@@ -66,7 +66,7 @@ parted -s $dev mklabel msdos mkpart prim
 compare /dev/null out || fail=1
 
 #make sure device name is correct
-test -e ${dev}1 || fail=1
+wait_for_dev_to_appear_ ${dev}1 || fail=1
 
 if [ -n "$fail" ]; then
     ls /dev/mapper
--- a/tests/t6100-mdraid-partitions.sh
+++ b/tests/t6100-mdraid-partitions.sh
@@ -54,13 +54,14 @@ parted -s $md_dev mklabel gpt \
 compare /dev/null out || fail=1
 
 # Verify that kernel has been informed about the second device.
-grep "${md_name}p2" /proc/partitions || { fail=1; cat /proc/partitions; }
+wait_for_dev_to_appear_ ${md_dev}p2 || { fail=1; cat /proc/partitions; }
 
 # Remove partitions from the raid device.
 parted -s $md_dev rm 2 rm 1 > out 2>&1 || fail=1
 compare /dev/null out || fail=1
 
 # Verify that kernel has been informed about those removals.
-grep "${md_name}p[12]" /proc/partitions && { fail=1; cat /proc/partitions; }
+wait_for_dev_to_disappear_ ${md_dev}p1 2 || { fail=1; cat /proc/partitions; }
+wait_for_dev_to_disappear_ ${md_dev}p2 2 || { fail=1; cat /proc/partitions; }
 
 Exit $fail
--- a/tests/t9041-undetected-in-use-16th-partition.sh
+++ b/tests/t9041-undetected-in-use-16th-partition.sh
@@ -72,7 +72,7 @@ wait_for_dev_to_appear_ ${scsi_dev}16 ||
 
 partitions="${scsi_dev}14 ${scsi_dev}15 ${scsi_dev}16"
 for i in $partitions; do
-  mkfs.ext3 $i || skip_ mkfs.ext3 $i failed
+  mkfs.ext3 $i || fail=1
 done
 
 # be sure to unmount upon interrupt, failure, etc.
