From 3a951379a75d64fe418d679e51d9646144a23efb Mon Sep 17 00:00:00 2001 From: Ruediger Meier Date: Thu, 15 Jun 2017 02:24:40 +0200 Subject: tests: fix and refactor partx 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 --- tests/expected/partx/partx-detect-parts | 1 + tests/ts/partx/partx | 120 +++++++++++++++++++++++--------- 2 files changed, 87 insertions(+), 34 deletions(-) (limited to 'tests') diff --git a/tests/expected/partx/partx-detect-parts b/tests/expected/partx/partx-detect-parts index 70f7ba812..33d42a58c 100644 --- a/tests/expected/partx/partx-detect-parts +++ b/tests/expected/partx/partx-detect-parts @@ -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 diff --git a/tests/ts/partx/partx b/tests/ts/partx/partx index 5b84afe24..7f629218a 100755 --- a/tests/ts/partx/partx +++ b/tests/ts/partx/partx @@ -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 -- cgit v1.2.3-55-g7522