]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
tests: fix and refactor partx
authorRuediger Meier <ruediger.meier@ga-group.nl>
Thu, 15 Jun 2017 00:24:40 +0000 (02:24 +0200)
committerRuediger Meier <ruediger.meier@ga-group.nl>
Thu, 15 Jun 2017 06:46:46 +0000 (08:46 +0200)
Subtest delete-non-existent was broken because since 2d47fa39
option --nr was missing. It wasn't noticed because we did not
check stderr. Now we check all return values and output.

Signed-off-by: Ruediger Meier <ruediger.meier@ga-group.nl>
tests/expected/partx/partx-detect-parts
tests/ts/partx/partx

index 70f7ba8121bb01becb6b5acad1983ee8f5c79855..33d42a58c74f8b37a3c019f8167747de5a00aed0 100644 (file)
@@ -2,3 +2,4 @@ NR START    END SECTORS  SIZE NAME UUID
  1    32  33791   33760 16.5M      
  2 33792  67583   33792 16.5M      
  3 67584 102399   34816   17M      
+OK
index 5b84afe243668e9aac9663a9acf4747ec18fa2e1..7f629218ab19d431fb1c8e661c8efb608abd1e8c 100755 (executable)
@@ -31,16 +31,35 @@ ts_check_test_command "$TS_CMD_DELPART"
 ts_skip_nonroot
 ts_check_prog "xz"
 
+shopt -s nullglob
+
+function check_partition_count
+{
+       # this function needs shopt -s nullglob
+       local cnt_want=$1
+       local devname=$(basename $TS_DEVICE)
+       local parts=(/sys/block/${devname}/${devname}*)
+       local cnt_have=${#parts[@]}
+
+       if [ $cnt_have -eq $cnt_want ]; then
+               return 0
+       fi
+       echo "error: expected $cnt_want partitions, have $cnt_have" >&2
+       echo "${parts[@]}" >&2
+       return 1
+}
+
 mkdir -p $TS_OUTDIR/images-pt
-for img in $(ls $TS_IMGDIR/*.img.xz | sort); do
+for img in $TS_IMGDIR/*.img.xz; do
        name=$(basename $img .img.xz)
        outimg=$TS_OUTDIR/images-pt/${name}.img
 
        ts_init_subtest $name
-
-       xz -dc $img > $outimg
-
-       $TS_CMD_PARTX $outimg &> $TS_OUTPUT
+       {
+               xz -dc $img > $outimg &&
+                       $TS_CMD_PARTX $outimg ||
+                       echo "failed: $?"
+       } >$TS_OUTPUT 2>&1
        ts_finalize_subtest
 done
 
@@ -48,90 +67,123 @@ done
 ts_scsi_debug_init dev_size_mb=50
 
 ts_init_subtest "addpart"
-$TS_CMD_ADDPART ${TS_DEVICE} 1 0 1
-[ "$?" == 0 ] && echo OK &>$TS_OUTPUT || ts_die "Unable to add partition"a &>$TS_OUTPUT
+{
+       $TS_CMD_ADDPART ${TS_DEVICE} 1 0 1 &&
+               echo OK ||
+               echo "Unable to add partition"
+       check_partition_count 1
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 udevadm settle
 
 ts_init_subtest "delpart"
-$TS_CMD_DELPART ${TS_DEVICE} 1
-[ "$?" == 0 ] && echo OK >> $TS_OUTPUT 2>&1 || ts_die "Unable to remove partition" >> $TS_OUTPUT 2>&1
+{
+       $TS_CMD_DELPART ${TS_DEVICE} 1 &&
+               echo OK ||
+               echo "Unable to remove partition"
+       check_partition_count 0
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 ts_scsi_debug_rmmod
 
 # set global variable TS_DEVICE
 ts_scsi_debug_init dev_size_mb=50 num_parts=$PARTS
-DEVNAME=$(basename $TS_DEVICE)
 
 ts_init_subtest "detect-parts"
-$TS_CMD_PARTX --show $TS_DEVICE &> $TS_OUTPUT
+{
+       $TS_CMD_PARTX --show $TS_DEVICE &&
+               echo OK ||
+               echo "Unable to list partitions"
+       check_partition_count $PARTS
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 udevadm settle
 
 ts_init_subtest "delete-all"
 #delete partinfo
-$TS_CMD_PARTX --delete $TS_DEVICE &> $TS_OUTPUT
-[ $? -eq 0 ] && echo "partitions deleted" &> $TS_OUTPUT ||
-    echo "Unable to delete partitions on $TS_DEVICE" &> $TS_OUTPUT
-ls -d "/sys/block/${DEVNAME}/${DEVNAME}*" 2>/dev/null && ts_die
+{
+       $TS_CMD_PARTX --delete $TS_DEVICE &&
+               echo "partitions deleted" ||
+               echo "Unable to delete partitions on $TS_DEVICE"
+       check_partition_count 0
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 udevadm settle
 
 ts_init_subtest "add-all"
 #read TS_DEVICE and restore the partinfo
-$TS_CMD_PARTX --add $TS_DEVICE &> $TS_OUTPUT
-[ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null | wc -l) -eq $PARTS ] &&
-   echo "partitions added" >> $TS_OUTPUT 2>&1  ||
-   echo "Unable to add partitions for $TS_DEVICE" >> $TS_OUTPUT 2>&1
+{
+       $TS_CMD_PARTX --add $TS_DEVICE &&
+               echo "partitions added" ||
+               echo "Unable to add partitions for $TS_DEVICE"
+       check_partition_count $PARTS
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 udevadm settle
 
 ts_init_subtest "update-one"
 #read TS_DEVICE and update second partition
-$TS_CMD_PARTX --update ${TS_DEVICE}2 &> $TS_OUTPUT
-[ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null | wc -l) -eq $PARTS ] &&
-   echo "partitions updated" >> $TS_OUTPUT 2>&1  ||
-   echo "Unable to update 2nd partition for $TS_DEVICE" >> $TS_OUTPUT 2>&1
+{
+       $TS_CMD_PARTX --update ${TS_DEVICE}2 &&
+               echo "partitions updated" ||
+               echo "Unable to update 2nd partition for $TS_DEVICE"
+       check_partition_count $PARTS
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 udevadm settle
 
 ts_init_subtest "delete-one"
 #remove last partition only
-$TS_CMD_PARTX -d --nr -1 $TS_DEVICE >> $TS_OUTPUT 2>&1
-[ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null |
-wc -l) -eq $((PARTS-1)) ] &&
-    echo "last partition removed" >> $TS_OUTPUT 2>&1 ||
-    echo "Unable to remove a partition on $TS_DEVICE" >> $TS_OUTPUT 2>&1
+{
+       $TS_CMD_PARTX -d --nr -1 $TS_DEVICE &&
+               echo "last partition removed" ||
+               echo "Unable to remove a partition on $TS_DEVICE"
+       check_partition_count $((PARTS-1))
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 udevadm settle
 
 ts_init_subtest "delete-non-existent"
 #attempt to remove it again
-$TS_CMD_PARTX -d $PARTS $TS_DEVICE && echo "partx failed: removed non-existing partition" &>$TS_OUTPUT || echo "partx: OK" &>$TS_OUTPUT
+{
+       $TS_CMD_PARTX -d --nr $PARTS $TS_DEVICE &&
+               echo "partx failed: removed non-existing partition" ||
+               echo "partx: OK"
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 udevadm settle
 
 ts_init_subtest "add-existing"
 #try adding an existing partition
-$TS_CMD_PARTX -a --nr 1 $TS_DEVICE &>/dev/null && echo "partx failed: re-added an existing partition" &> $TS_OUTPUT || echo "partx: OK" &> $TS_OUTPUT
+{
+       $TS_CMD_PARTX -a --nr 1 $TS_DEVICE 2>/dev/null &&
+               echo "partx failed: re-added an existing partition" ||
+               echo "partx: OK"
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 udevadm settle
 
 ts_init_subtest "change-by-range"
 # {-a|-d} --nr 0 should handle all partitions
-$TS_CMD_PARTX -d --nr 0 $TS_DEVICE
-ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null && echo "Unable to delete partitions on $TS_DEVICE" >> $TS_OUTPUT 2>&1 || echo "partitions deleted" >> $TS_OUTPUT 2>&1
-$TS_CMD_PARTX -a --nr 0 $TS_DEVICE
-[ $(ls -d /sys/block/${DEVNAME}/${DEVNAME}* 2>/dev/null | wc -l) -eq $PARTS ] && echo "partitions added" >> $TS_OUTPUT 2>&1 || echo "Failed to add $TS_DEVICE partitions" >> $TS_OUTPUT 2>&1
+{
+       $TS_CMD_PARTX -d --nr 0 $TS_DEVICE &&
+               echo "partitions deleted" ||
+               echo "Unable to delete partitions on $TS_DEVICE"
+       check_partition_count 0
+       $TS_CMD_PARTX -a --nr 0 $TS_DEVICE &&
+               echo "partitions added" ||
+               echo "Failed to add $TS_DEVICE partitions"
+       check_partition_count $PARTS
+} >$TS_OUTPUT 2>&1
 ts_finalize_subtest
 
 ts_finalize