diff options
Diffstat (limited to 'tests/ts/partx/partx')
-rwxr-xr-x | tests/ts/partx/partx | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/tests/ts/partx/partx b/tests/ts/partx/partx new file mode 100755 index 0000000..3925d1b --- /dev/null +++ b/tests/ts/partx/partx @@ -0,0 +1,186 @@ +#!/bin/bash + +# +# Copyright (C) 2010 Davidlohr Bueso <dave@gnu.org> +# +# This file is part of util-linux. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This file is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# + +TS_TOPDIR="${0%/*}/../.." +TS_DESC="partitions probing" +PARTS=3 + +. $TS_TOPDIR/functions.sh +ts_init "$*" + +ts_check_test_command "$TS_CMD_PARTX" +ts_check_test_command "$TS_CMD_ADDPART" +ts_check_test_command "$TS_CMD_DELPART" +ts_check_test_command "$TS_CMD_SFDISK" + +ts_skip_nonroot + +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 +} + +# set global variable TS_DEVICE +ts_scsi_debug_init dev_size_mb=50 + +ts_init_subtest "addpart" +{ + $TS_CMD_ADDPART ${TS_DEVICE} 1 0 1 && + echo OK || + echo "Unable to add partition" + check_partition_count 1 +} >> $TS_OUTPUT 2>> $TS_ERRLOG +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "delpart" +{ + $TS_CMD_DELPART ${TS_DEVICE} 1 && + echo OK || + echo "Unable to remove partition" + check_partition_count 0 +} >> $TS_OUTPUT 2>> $TS_ERRLOG +ts_finalize_subtest + + +udevadm settle +$TS_CMD_SFDISK $TS_DEVICE &> /dev/null <<EOF +label: dos +label-id: 0x1ddc8a79 +32,33760,, +33792,33792,, +67584,34816,, +EOF +udevadm settle + + +ts_init_subtest "detect-parts" +{ + $TS_CMD_PARTX --show $TS_DEVICE && + echo OK || + echo "Unable to list partitions" + check_partition_count $PARTS +} >> $TS_OUTPUT 2>> $TS_ERRLOG +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "delete-all" +#delete partinfo +{ + $TS_CMD_PARTX --delete $TS_DEVICE && + echo "partitions deleted" || + echo "Unable to delete partitions on $TS_DEVICE" + check_partition_count 0 +} >> $TS_OUTPUT 2>> $TS_ERRLOG +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "add-all" +#read TS_DEVICE and restore the partinfo +{ + $TS_CMD_PARTX --add $TS_DEVICE && + echo "partitions added" || + echo "Unable to add partitions for $TS_DEVICE" + check_partition_count $PARTS +} >> $TS_OUTPUT 2>> $TS_ERRLOG +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "update-one" +#read TS_DEVICE and update second partition +{ + $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>> $TS_ERRLOG +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "delete-one" +#remove last partition only +{ + $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>> $TS_ERRLOG +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "delete-non-existent" +#attempt to remove it again +{ + # remove non-existing partitions (ENXIO) is not error + # + # see ab025087f91b66ee8e23a16bc49eb0d9bd421d65 and + # 53ae7d60cfeacd4e87bfe6fcc015b58b78ef4555 + # + $TS_CMD_PARTX -d --nr $PARTS $TS_DEVICE && + echo "partx: OK" || + echo "partx failed: removed non-existing partition" +} >> $TS_OUTPUT 2>> $TS_ERRLOG +ts_finalize_subtest + +udevadm settle + +ts_init_subtest "add-existing" +#try adding an existing partition +{ + $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>> $TS_ERRLOG +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 && + 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>> $TS_ERRLOG +ts_finalize_subtest + +ts_finalize |