summaryrefslogtreecommitdiffstats
path: root/tests/ts/partx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xtests/ts/partx/partx178
-rwxr-xr-xtests/ts/partx/partx-image43
2 files changed, 221 insertions, 0 deletions
diff --git a/tests/ts/partx/partx b/tests/ts/partx/partx
new file mode 100755
index 0000000..67f35f5
--- /dev/null
+++ b/tests/ts/partx/partx
@@ -0,0 +1,178 @@
+#!/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_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
+
+ts_scsi_debug_rmmod
+
+# set global variable TS_DEVICE
+ts_scsi_debug_init dev_size_mb=50 num_parts=$PARTS
+
+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
diff --git a/tests/ts/partx/partx-image b/tests/ts/partx/partx-image
new file mode 100755
index 0000000..c7f471e
--- /dev/null
+++ b/tests/ts/partx/partx-image
@@ -0,0 +1,43 @@
+#!/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="show images"
+TS_IMGDIR="$TS_TOPDIR/ts/blkid/images-pt"
+
+. $TS_TOPDIR/functions.sh
+ts_init "$*"
+
+ts_check_test_command "$TS_CMD_PARTX"
+ts_check_prog "xz"
+
+mkdir -p $TS_OUTDIR/images-pt
+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 ||
+ echo "failed: $?"
+ } >> $TS_OUTPUT 2>> $TS_ERRLOG
+ ts_finalize_subtest
+done
+
+ts_finalize