summaryrefslogtreecommitdiffstats
path: root/tests/ts/sfdisk/resize
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ts/sfdisk/resize')
-rwxr-xr-xtests/ts/sfdisk/resize154
1 files changed, 154 insertions, 0 deletions
diff --git a/tests/ts/sfdisk/resize b/tests/ts/sfdisk/resize
new file mode 100755
index 0000000..4b2ad4f
--- /dev/null
+++ b/tests/ts/sfdisk/resize
@@ -0,0 +1,154 @@
+#!/bin/bash
+
+#
+# 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="resize"
+
+. $TS_TOPDIR/functions.sh
+ts_init "$*"
+
+ts_check_test_command "$TS_CMD_SFDISK"
+ts_check_test_command "$TS_CMD_WIPEFS"
+
+ts_skip_nonroot
+
+# set global variable TS_DEVICE
+ts_scsi_debug_init dev_size_mb=100 sector_size=512
+
+declare -a COMM
+declare -a NAME
+
+COMM[0]="3000,"
+NAME[0]="move-up-absolute"
+
+COMM[1]="2048,"
+NAME[1]="move-down-absolute"
+
+COMM[2]="+1M,"
+NAME[2]="move-up-relative"
+
+COMM[3]="-1M,"
+NAME[3]="move-down-relative"
+
+COMM[4]="-,15M"
+NAME[4]="enlarge-absolute"
+
+COMM[5]=",5M,"
+NAME[5]="reduce-absolute"
+
+COMM[6]=", +10M"
+NAME[6]="enlarge-relative"
+
+NAME[7]="reduce-relative"
+COMM[7]=", -10M"
+
+NAME[8]="enlarge-all"
+COMM[8]=",+"
+
+NAME[9]="up-preduce"
+COMM[9]="+10M,-10M"
+
+NAME[10]="down-enlarge"
+COMM[10]="-10M,+10M,,*"
+
+NAME[11]="absolute-move-resize"
+COMM[11]="2048,10M,L"
+
+function test_label_resize {
+ local label="$1"
+
+ $TS_CMD_WIPEFS -a ${TS_DEVICE} &> /dev/null
+ udevadm settle
+
+ # create a partition
+ echo ',10M,L' | $TS_CMD_SFDISK --no-reread --label ${label} ${TS_DEVICE} &> /dev/null
+ udevadm settle
+
+ for idx in $(seq 0 $(( ${#COMM[*]} - 1 ))); do
+
+ cmd=${COMM[$idx]}
+ name=${NAME[$idx]}
+
+ ts_init_subtest "$label-$idx-$name"
+ echo -e "$cmd\n" >> $TS_OUTPUT
+ echo "$cmd" | $TS_CMD_SFDISK --no-reread -N1 ${TS_DEVICE} >> $TS_OUTPUT 2>&1
+ ts_fdisk_clean $TS_DEVICE
+ udevadm settle
+ ts_finalize_subtest
+ done
+
+ echo ',10M,L' | $TS_CMD_SFDISK --no-reread --append ${TS_DEVICE} &> /dev/null
+ udevadm settle
+
+ echo ',10M,L' | $TS_CMD_SFDISK --no-reread --append ${TS_DEVICE} &> /dev/null
+ udevadm settle
+
+ idx=$(( $idx + 1 ))
+ ts_init_subtest "$label-$idx-reduce-midle"
+ cmd=',-5M'
+ echo -e "$cmd\n" >> $TS_OUTPUT
+ echo "$cmd" | $TS_CMD_SFDISK --no-reread -N2 ${TS_DEVICE} >> $TS_OUTPUT 2>&1
+ ts_fdisk_clean $TS_DEVICE
+ udevadm settle
+ ts_finalize_subtest
+
+ idx=$(( $idx + 1 ))
+ ts_init_subtest "$label-$idx-max-last"
+ cmd='-5M,+'
+ echo -e "$cmd\n" >> $TS_OUTPUT
+ echo $cmd | $TS_CMD_SFDISK --no-reread -N3 ${TS_DEVICE} >> $TS_OUTPUT 2>&1
+ ts_fdisk_clean $TS_DEVICE
+ udevadm settle
+ ts_finalize_subtest
+}
+
+# MBR
+test_label_resize dos
+
+# GPT
+test_label_resize gpt
+
+
+$TS_CMD_WIPEFS -a ${TS_DEVICE} &> /dev/null
+udevadm settle
+
+ts_init_subtest "dos-unsorted"
+# create layout where partition #4 is the last on disk (by offset)
+# and there is freespace at the end of the disk. Note that #4 is not the last
+# partno on the disk. The libfdisk has to be able to check for the free space
+# independently on the partno, only offset+size matters.
+$TS_CMD_SFDISK --no-reread ${TS_DEVICE} >> $TS_OUTPUT 2>&1 <<EOF
+label: dos
+label-id: 0xda2e45ac
+device: ${TS_DEVICE}
+unit: sectors
+
+${TS_DEVICE}1 : start= 2048, size= 2048, type=83
+${TS_DEVICE}2 : start= 4096, size= 2048, type=83
+${TS_DEVICE}3 : start= 6144, size= 102400, type=5
+${TS_DEVICE}4 : start= 108544, size= 2048, type=83
+${TS_DEVICE}5 : start= 8192, size= 2048, type=83
+${TS_DEVICE}6 : start= 12288, size= 96256, type=83
+EOF
+udevadm settle
+# enlarge to use all space behind partition #4
+echo ',+,' | $TS_CMD_SFDISK --no-reread -N 4 ${TS_DEVICE} >> $TS_OUTPUT 2>&1
+ts_fdisk_clean $TS_DEVICE
+udevadm settle
+ts_finalize_subtest
+
+ts_finalize