[PATCH] tests: resize FAT and HFS file systems
Jim Meyering
meyering at redhat.com
Sat Sep 19 06:22:20 UTC 2009
Since it looks like we're stuck with keeping at least FAT and HFS
file-system resizing support in libparted, we have an obligation to
exercise at least some of that functionality. For now, I've limited
this test to shrinking well-aligned partitions by a well-behaved
amount. Curtis Gedak helped come up with a usable test.
* tests/t3000-resize-fs.sh: New file.
Use starting partition offset that is on a cylinder boundary,
and increase the partition size to be larger than 256 MiB.
When resizing, choose the new size to be exactly one cylinder
(8MiB) smaller than the original.
---
tests/t3000-resize-fs.sh | 95 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 95 insertions(+), 0 deletions(-)
create mode 100755 tests/t3000-resize-fs.sh
diff --git a/tests/t3000-resize-fs.sh b/tests/t3000-resize-fs.sh
new file mode 100755
index 0000000..0620a5e
--- /dev/null
+++ b/tests/t3000-resize-fs.sh
@@ -0,0 +1,95 @@
+#!/bin/sh
+
+# Copyright (C) 2009 Free Software Foundation, Inc.
+
+# This program 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 3 of the License, or
+# (at your option) any later version.
+
+# This program 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.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+test_description='exercise the resize sub-command; FAT and HFS only'
+
+: ${srcdir=.}
+. $srcdir/test-lib.sh
+
+require_512_byte_sector_size_
+dev=$DEVICE_TO_ERASE
+sz=$DEVICE_TO_ERASE_SIZE
+ss=$sector_size_
+
+start=63s
+default_end=546147s
+ new_end=530144s
+
+# ensure that the disk is large enough
+dev_n_sectors=$(parted -s $dev u s p|sed -n '2s/.* \([0-9]*\)s$/\1/p')
+device_sectors_required=$(echo $default_end | sed 's/s$//')
+test_expect_success \
+ "whether $dev is large enough for this test" \
+ 'test $device_sectors_required -le $dev_n_sectors'
+
+for fs_type in hfs+ fat32; do
+
+ test_expect_success \
+ 'create a partition table' \
+ 'parted -s $dev mklabel gpt > out 2>&1'
+ test_expect_success 'expect no output' 'compare out /dev/null'
+
+ test_expect_success \
+ "create an empty $fs_type partition, cylinder aligned, size > 256 MB" \
+ 'parted -s $dev mkpart primary $fs_type $start $default_end > out 2>&1'
+ test_expect_success 'expect no output' 'compare out /dev/null'
+
+ test_expect_success \
+ 'print partition table' \
+ 'parted -m -s $dev u s p > out 2>&1'
+
+ # FIXME: check expected output
+
+ # There's a race condition here: on udev-based systems, the partition#1
+ # device, ${dev}1 (i.e., /dev/sde1) is not created immediately, and
+ # without some delay, this mount command would fail. Using a flash card
+ # as $dev, the loop below typically iterates 7-20 times.
+ test_expect_success \
+ 'wait for new partition device to appear' \
+ 'i=0; while :; do
+ test -e "${dev}1" && break; test $i = 90 && break;
+ i=$(expr $i + 1); done; test $i != 90'
+
+ case $fs_type in
+ fat32) mkfs_cmd='mkfs.vfat -F 32';;
+ hfs*) mkfs_cmd='mkfs.hfs';;
+ *) error "internal error: unhandled fs type: $fs_type";;
+ esac
+
+ test_expect_success \
+ 'create the file system' \
+ '$mkfs_cmd ${dev}1'
+
+ # NOTE: shrinking is the only type of resizing that works.
+ test_expect_success \
+ 'resize that file system to be one cylinder (8MiB) smaller' \
+ 'parted -s $dev resize 1 $start $new_end > out 2>&1'
+ test_expect_success 'expect no output' 'compare out /dev/null'
+
+ test_expect_success \
+ 'print partition table' \
+ 'parted -m -s $dev u s p > out 2>&1'
+
+ test_expect_success \
+ 'compare against expected output' \
+ 'sed -n 3p out > k && mv k out &&
+ printf "1:$start:$new_end:530082s:$fs_type:primary:$ms;\n" > exp &&
+ compare out exp'
+
+done
+
+test_done
--
1.6.5.rc2.204.g8ea19
More information about the parted-devel
mailing list