summaryrefslogtreecommitdiffstats
path: root/tests/ts/partx/partx
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ts/partx/partx')
-rwxr-xr-xtests/ts/partx/partx186
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